อ้างถึง NaN หรือ±∞ (ค่าทศนิยมพิเศษ) ในแบบสอบถามคำจำกัดความ ArcMap?


10

ฉันบังเอิญค้นพบว่า ArcMap แสดงค่าทศนิยมพิเศษให้กับผู้ใช้อย่างไร

  • + ∞ (บวกอนันต์) แสดงเป็น 1.#INF
  • –∞ (อินฟินิตี้ลบ) ควรจะแสดงเป็น-1.#INF- ฉันยังไม่ได้ยืนยันตัวนี้
  • NaN (ไม่ใช่ตัวเลข) แสดงเป็นจัดชิดขวา<Null>- เพื่อไม่ให้สับสนกับจัดชิดซ้าย<Null>ซึ่งหมายถึง NULL (ค่าที่หายไป):

    สกรีนช็อตของตารางที่ดูใน ArcMap ที่แสดงค่า NULL สองประเภท

    (รับค่าที่ไม่ซ้ำกันในเครื่องคิดเลขฟิลด์ไม่ได้แสดงรายการ NaN เลย)

แต่ฉันไม่ได้ค้นพบวิธีเขียนแบบสอบถามคำจำกัดความของเลเยอร์เพื่อเลือกแถวตามค่าพิเศษเหล่านี้:

  • ColumnName IS NULL จะเลือกเฉพาะค่า NULL ปกติ แต่ไม่ใช่ NaN
  • ColumnName = 1.#INF ถูกปฏิเสธเนื่องจากมีไวยากรณ์ที่ไม่ถูกต้อง

ไม่มีใครรู้วิธีการทำเช่นนี้?


โค้ด C # ArcObjects สำหรับการจัดเก็บค่า 1. # INF ลงในฟิลด์ตาราง (แนวคิดพื้นฐาน):

ตามที่ขอ. เนื่องจากฉันไม่ได้ทำงานต่อไปนี้ไม่ใช่รหัสจริงที่ฉันใช้และฉันไม่สามารถทดสอบได้ในตอนนี้ แต่ควรให้เอฟเฟกต์ที่แสดงในหน้าจอด้านบน:

ITable table = …;
int doubleFieldIndex = table.FindField(…);
IRow row = table.CreateRow(); 
row.Value[doubleFieldIndex] = double.PositiveInfinity;
row.Store();

คำถามที่ยอดเยี่ยม ฉันไม่ทราบว่า NaN นั้นถูกจัดวางในลักษณะ <Null> ที่ถูกต้อง ฉันก็หวังว่าจะได้คำตอบ btw, <null> ที่จัดแนวถูกต้องมีลักษณะอย่างไรในหน้าต่างค้นหาตามแอตทริบิวต์ (เมื่อคุณได้รับค่าที่แตกต่างทั้งหมดสำหรับฟิลด์นั้น)
Devdatta Tengshe

@Devdatta เท่าที่ฉันสามารถบอกได้รับค่าที่ไม่ซ้ำกันไม่ได้แสดงรายการ NaN เลย
stakx

นี่เป็นข้อมูลประเภทใด นี่เป็นตารางคุณลักษณะของ Grid หรือไม่ คุณนำเข้าข้อมูลนี้จากแหล่งที่ไม่ใช่ ArcGIS หรือไม่
Jakub Sisak GeoGraphics

@Jakub: นี่คือตารางภายในไฟล์ฐานข้อมูลและฟิลด์ที่แสดงในภาพหน้าจอมีประเภท Double และไม่ตารางถูกสร้างและแก้ไขด้วย ArcObjects & ArcMap
stakx

ใช่ แต่คุณได้ค่าดังกล่าวมาในช่องได้อย่างไร
whuber

คำตอบ:


2

ใน ArcGIS ตัวเลขความแม่นยำจุดเดียวมีช่วงประมาณ -3.4E38 ถึง 1.2E38

หากคุณเห็นจริง ๆ แล้ว 1. # INF -1 ค่า # INF แสดงในตารางแอตทริบิวต์ของคุณ (หรือผ่าน MS Access เมื่อวิเคราะห์คุณลักษณะ) หรือสถิติกริดดังนั้นตัวเลขเหล่านี้อาจเป็นตัวเลขที่อยู่นอกช่วงที่ ESRI สนับสนุน และหากจำนวนเหล่านี้จริง ๆ แล้วอยู่นอกช่วงที่สนับสนุนมันปลอดภัยที่จะบอกว่าคุณจะไม่สามารถสืบค้นค่าเหล่านี้ได้ คุณสามารถลองมากขึ้นหรือน้อยลงจากนั้นก็สูงสุดและต่ำสุด (-3.4E38 ถึง 1.2E38) และดูว่ามันจะกลับมา แต่ฉันสงสัยว่าแบบสอบถามจะทำงานได้ทั้งหมดถ้าตาราง / เขตข้อมูลมีช่วงค่าที่ไม่กระจัดกระจาย

แหล่งที่มานี้แสดงให้เห็นว่าค่าดังกล่าวอาจได้รับนำเข้าจาก 3 ถโปรแกรมของบุคคลที่ไม่ใช่ คุณอาจต้องแปลงค่าเป็นช่วงของค่าที่รองรับก่อนนำเข้าสู่ผลิตภัณฑ์ ESRI

สำหรับค่า NULL / NuN มันจะมีประโยชน์ที่จะรู้ว่าสิ่งที่เรากำลังดูในตัวอย่างของคุณ; ตาราง attrubute ของ grid, shapefile, คลาสคุณสมบัติฐานข้อมูลทางภูมิศาสตร์เป็นต้นตัวอย่างเช่นshapefiles ไม่สามารถเก็บค่า NULL ได้ดังนั้นหากคุณลักษณะของคลาสที่มีค่า NULL นั้นถูกแปลงเป็นรูปร่างไฟล์ที่ถูกเก็บไว้เป็นค่าอื่น ๆ ("", 0, NuN ?, ฯลฯ ) แต่เมื่อแสดงในตารางแอ็ตทริบิวต์ ArcMap พวกเขาจะยังคงมองเห็นเป็น "<Null>". เป็นไปได้ว่าการจัดแนวของ NULLs ในตารางคุณลักษณะของคุณเป็นสถานการณ์เช่นนี้ฉันแค่คาดเดาว่าทำไมคุณถึงสามารถค้นหา NULL ที่มีการจัดแนวซ้าย แต่ไม่ใช่ NULL ที่ปรับชิดขวา แต่ถ้านี่เป็นรูปร่างไฟล์ลองนำเข้า ไปยังฐานข้อมูลภูมิศาสตร์แล้วเรียกใช้แบบสอบถามอีกครั้งโอกาสที่สิ่งเหล่านี้จะถูกแปลงเป็นค่า NULL ที่เหมาะสม


@stakx - ฉันเพิ่งสังเกตเห็นความคิดเห็นของคุณด้านบน ฉันไม่เห็นความคิดเห็นขณะที่ฉันกำลังกำหนดคำตอบ ฉันจะออกจากที่นี่ต่อไป
Jakub Sisak GeoGraphics

ที่จริงแล้ว Shapefile เป็นวิธีที่เป็นไปได้ที่ค่าดังกล่าวอาจเกิดขึ้น ด้วย Shapefile ตัวเลขจะถูกคงอยู่ในรูปแบบอักขระ ASCII ฐาน -10 ไม่ใช่แบบเลขฐานสองแบบลอยหรือแบบสองเท่า หากค่าที่เก็บไว้แปลงเป็นอนันต์หรือ NaN จะตีความได้อย่างไร ArcGIS อาจเป็นเพราะใครก็ตามที่เข้ารหัสเครื่องอ่าน shapefile (ซึ่งหมายความว่าพฤติกรรม ArcGIS สามารถเปลี่ยนแปลงได้ตลอดเวลาขึ้นอยู่กับรุ่นการวางจำหน่ายและการแก้ไขข้อบกพร่องที่เกิดขึ้นในขณะนี้ :-)
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.