ArcMap tanım sorgularında NaN veya ± ∞ (özel kayan nokta değerleri) referansı?


10

Şans eseri ArcMap'in kullanıcıya özel kayan nokta değerlerini nasıl gösterdiğini keşfettim.

  • + ∞ (pozitif sonsuz) şu şekilde görüntülenir: 1.#INF
  • –∞ (negatif sonsuz) varsayılan olarak gösterilecektir -1.#INF- Bunu doğrulamamıştım.
  • NaN (sayı değil) sağa hizalı olarak görüntülenir <Null>- sola hizalı olarak karıştırılmamalıdır <Null>, bu da NULL (eksik değerler) anlamına gelir:

    ArcMap'te görüntülenen ve iki farklı NULL türü gösteren bir tablonun ekran görüntüsü

    (Bu arada hesap makinesinde benzersiz değerleri alın NaN'yi hiç listelemez.)

Ancak, bu özel değerlere dayalı satırları seçmek için katman tanımı sorgularının nasıl yazılacağını keşfetmedim:

  • ColumnName IS NULL yalnızca normal NULL değerleri seçer, ancak NaN olmayanları seçer.
  • ColumnName = 1.#INF geçersiz sözdizimine sahip olduğu reddedildi.

Bunu nasıl yapacağını bilen var mı?


C # ArcObjects kod snippet'ini tablo alanına 1. # INF değeri kaydetmek için (temel kavram):

İstendiği gibi. Artık işte olmadığım için, aşağıdaki gerçek kod değil ve şu anda test edemiyorum, ancak yukarıdaki ekran görüntüsünde gösterilen efekti üretmelidir:

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

Mükemmel Soru. NaN'nin sağa hizalı <Boş> olarak temsil edildiğinin farkında değildim. Ben de cevapları dört gözle bekliyorum. btw,
Niteliğe Göre

@Devdatta, anlayabildiğim kadarıyla, Benzersiz değerleri al NaN'ı hiç listelemiyor.
stakx

Bu ne tür veriler? Bu bir Izgara nitelik tablosu mu? Bu verileri ArcGIS olmayan bir kaynaktan aldınız mı?
Jakub Sisak GeoGraphics

@ Jakub: Bu, bir dosya coğrafi veritabanındaki bir tablodur ve ekran görüntüsünde gösterilen alanların Çift türü vardır. Ve hayır, tablo bir ArcObjects & ArcMap ile oluşturuldu ve düzenlendi.
stakx

Evet, ancak bu değerleri alanlara nasıl aldınız?
whuber

Yanıtlar:


2

ArcGIS'de bir tek duyarlıklı kayan nokta sayısı yaklaşık -3.4E38 1.2E38 arasında bir aralığı vardır.

Nitelik tablonuzda (veya öznitelikleri analiz ederken MS Access yoluyla) veya ızgara istatistiklerinde görüntülenen 1. # INF -1. # INF değerlerini veya ızgara istatistiklerini görüyorsanız, bunlar ESRI tarafından desteklenen aralığın dışında kalan sayılar olabilir. Ve bu sayı aslında desteklenen aralığın dışında kalıyorsa, bu değerleri sorgulayamayacağınızı söylemek güvenlidir. Daha büyük ve daha az maksimum ve minimum (-3.4E38 ila 1.2E38) denemek ve ne döndüğünü görebilirsiniz ama tablo / alan desteklenmeyen değerler aralığı içeriyorsa sorgu hiç çalışacağından şüpheliyim.

Bu kaynak , bu tür değerlerin 3. taraf ESRI dışı bir uygulamadan içe aktarılmış olabileceğini gösterir . Bir ESRI ürününe aktarmadan önce değerleri desteklenen bir değer aralığına dönüştürmeniz gerekebilir.

NULL / NuN değerlerine gelince, örneğinizde tam olarak neye baktığımızı bilmek faydalı olacaktır; Bir ızgara, şekil dosyası, coğrafi veritabanı özellik sınıfı vb. Gibi bir öznitelik tablosu. Örneğin, şekil dosyaları NULL değerleri depolayamaz; bu nedenle, bir özellik sınıfı NULL değerleri içeriyorsa, çeşitli diğer değerler ("", 0, NuN ?, vb.) Ancak bir ArcMap öznitelik tablosunda görüntülendiğinde görsel olarak "<Null>Öznitelik tablonuzdaki NULL'lerin hizalanmasının böyle bir durum olması mümkündür. Yalnızca sola hizalanmış NULL'ları neden sorgulayabildiğinizi, ancak sağa hizalanmış NULL'ları sorgulayabileceğinizi tahmin ediyorum, ancak bu bir şekil dosyası içeri aktarmayı deneyin sonra tüm bunları uygun NULL değerlerine dönüştürür.


@stakx - Yukarıdaki yorumlarınızı yeni farkettim. Cevabımı formüle ederken yorumları görmedim. Ben yine de burada bırakıyorum.
Jakub Sisak GeoGraphics

Aslında bir şekil dosyası, bu tür değerlerin oluşabileceği makul bir yoldur. Bir şekil dosyasıyla, sayılar ikili yüzer veya iki kat değil, temel-10 ASCII karakter biçiminde tutulur. Depolanan değer bir sonsuza veya NaN'ye dönüştürülürse, ArcGIS bunu nasıl yorumlar? Muhtemelen şekil dosyası okuyucusunu kim kodladı?
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.