Mengacu pada NaN atau ± ∞ (nilai floating point khusus) dalam kueri definisi ArcMap?


10

Saya kebetulan menemukan bagaimana ArcMap menampilkan nilai floating point khusus kepada pengguna.

  • + ∞ (positif tanpa batas) ditampilkan sebagai 1.#INF
  • –∞ (infinity negatif) seharusnya akan ditampilkan sebagai -1.#INF- Saya belum memverifikasi yang ini.
  • NaN (bukan angka) ditampilkan sebagai rata-rata <Null>- jangan dikacaukan dengan rata kiri <Null>, yang menunjukkan NULL (nilai yang hilang):

    Cuplikan layar dari tabel yang dilihat di ArcMap yang menunjukkan dua jenis NULL yang berbeda

    ( Omong-omong, dapatkan nilai unik di bidang kalkulator tidak mencantumkan NaN sama sekali.)

Tetapi saya belum menemukan cara menulis query definisi layer untuk memilih baris berdasarkan pada nilai-nilai khusus ini:

  • ColumnName IS NULL hanya akan memilih nilai NULL biasa, tetapi bukan NaN.
  • ColumnName = 1.#INF ditolak karena memiliki sintaks yang tidak valid.

Adakah yang tahu bagaimana melakukan ini?


Cuplikan kode kode C # ArcObjects untuk menyimpan nilai 1. # INF ke bidang tabel (konsep dasar):

Seperti yang diminta. Karena saya tidak lagi bekerja, berikut ini bukan kode asli yang saya gunakan dan saya tidak bisa mengujinya sekarang, tetapi seharusnya menghasilkan efek yang ditunjukkan pada tangkapan layar di atas:

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

Pertanyaan Luar Biasa. Saya tidak menyadari bahwa NaN direpresentasikan sebagai <Null> rata kanan. Saya juga menantikan jawabannya. btw, Seperti apa tampilan <null> kanan yang selaras di jendela Cari berdasarkan Atribut (Saat Anda mendapatkan semua nilai berbeda untuk Bidang itu?)
Devdatta Tengshe

@Devdatta, sejauh yang saya tahu, Dapatkan nilai unik tidak mencantumkan NaN sama sekali.
stakx

Jenis data apa ini? Apakah ini tabel atribut Grid? Apakah Anda mengimpor data ini dari sumber non-ArcGIS?
Jakub Sisak GeoGraphics

@ Yakub: Ini adalah tabel di dalam file geodatabase, dan bidang yang ditunjukkan pada tangkapan layar memiliki tipe Double. Dan tidak, tabel telah dibuat dan diedit dengan ArcObjects & ArcMap.
stakx

Ya, tetapi bagaimana Anda mendapatkan nilai seperti itu di bidang?
whuber

Jawaban:


2

Dalam ArcGIS angka floating-point presisi tunggal memiliki kisaran sekitar -3.4E38 hingga 1.2E38.

Jika Anda benar-benar melihat 1. # INF -1. # Nilai INF ditampilkan di tabel atribut Anda (atau melalui MS Access saat menganalisis atribut) atau statistik kotak, maka ini mungkin angka yang berada di luar rentang yang didukung oleh ESRI. Dan jika angka ini benar-benar berada di luar rentang yang didukung, aman untuk mengatakan Anda tidak akan dapat meminta nilai-nilai ini. Anda bisa mencoba lebih besar dan lebih kecil dari maksimum dan minimum (-3.4E38 hingga 1.2E38) dan melihat apa yang dikembalikan tetapi saya ragu kueri akan bekerja sama sekali jika tabel / bidang berisi rentang nilai yang tidak didukung.

Sumber ini menunjukkan bahwa nilai-nilai tersebut mungkin telah diimpor dari aplikasi pihak ketiga non-ESRI . Anda mungkin perlu mengonversi nilai ke rentang nilai yang didukung sebelum mengimpor ke produk ESRI.

Adapun nilai NULL / NuN, akan berguna untuk mengetahui dengan tepat apa yang kita lihat dalam contoh Anda; Tabel attrubute dari kisi, shapefile, kelas fitur geodatabase, dll. Misalnya, shapefile tidak dapat menyimpan nilai NULL jadi jika kelas fitur yang berisi nilai NULL dikonversi ke shapefile yang disimpan sebagai berbagai nilai lainnya ("", 0, NuN ?, dll.) Tetapi ketika ditampilkan dalam tabel atribut ArcMap mereka masih direpresentasikan secara visual sebagai "<Null>". Mungkin saja penyelarasan NULL di tabel atribut Anda adalah situasi seperti itu. Saya hanya berspekulasi tentang mengapa Anda dapat meminta NULL yang selaras tetapi bukan NULL yang selaras tetapi jika ini adalah shapefile, coba mengimpor menjadi geodatabase kemudian jalankan kueri lagi. Kemungkinannya adalah semua ini akan dikonversi ke nilai NULL yang tepat.


@stakx - Saya baru saja memperhatikan komentar Anda di atas. Saya tidak melihat komentar ketika saya merumuskan jawaban saya. Saya meninggalkannya di sini.
Jakub Sisak GeoGraphics

Sebenarnya, shapefile adalah salah satu cara yang masuk akal di mana nilai-nilai tersebut dapat terjadi. Dengan shapefile, angka dipertahankan dalam format karakter ASCII basis-10, bukan sebagai pelampung biner atau ganda. Jika nilai yang disimpan dikonversi menjadi tak terhingga atau NaN, bagaimana ArcGIS akan menafsirkannya? Mungkin atas kemauan siapa pun yang mengkodekan pembaca shapefile (yang berarti perilaku ArcGIS dapat berubah setiap saat, bervariasi dengan versi, rilis, dan perbaikan bug saat ini berlaku :-).
whuber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.