Đề cập đến NaN hoặc ± (giá trị dấu phẩy động đặc biệt) trong các truy vấn định nghĩa ArcMap?


10

Tôi tình cờ phát hiện ra cách ArcMap hiển thị các giá trị dấu phẩy động đặc biệt cho người dùng.

  • + (Vô cực dương) được hiển thị dưới dạng 1.#INF
  • Cấm∞ (vô cực âm) được cho là sẽ được hiển thị dưới dạng -1.#INF- Tôi chưa xác minh cái này.
  • NaN (không phải là số) được hiển thị dưới dạng căn phải <Null>- không bị nhầm lẫn với căn lề trái <Null>, biểu thị NULL (giá trị thiếu):

    Ảnh chụp màn hình của bảng được xem trong ArcMap hiển thị hai loại NULL riêng biệt

    (Nhân tiện, nhận các giá trị duy nhất trong máy tính trường không liệt kê NaN.)

Nhưng tôi chưa khám phá ra cách viết các truy vấn định nghĩa lớp để chọn các hàng dựa trên các giá trị đặc biệt này:

  • ColumnName IS NULL sẽ chỉ chọn các giá trị NULL thông thường, nhưng không chọn NaN.
  • ColumnName = 1.#INF bị từ chối vì có cú pháp không hợp lệ.

Có ai biết cách để làm điều này không?


Đoạn mã C # ArcObjects để lưu trữ giá trị 1. # INF vào trường bảng (khái niệm cơ bản):

Như yêu cầu. Vì tôi không còn làm việc nữa, nên đây không phải là mã thực tôi đã sử dụng và tôi không thể kiểm tra nó ngay bây giờ, nhưng nó sẽ tạo ra hiệu ứng hiển thị trong ảnh chụp màn hình ở trên:

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

Câu hỏi xuất sắc. Tôi đã không biết rằng NaN được biểu diễn dưới dạng <Null> bên phải. Tôi cũng mong chờ câu trả lời. btw, <null> được căn chỉnh bên phải trông như thế nào trong cửa sổ Tìm kiếm theo thuộc tính (Khi bạn nhận được tất cả các giá trị riêng biệt cho Trường đó?)
Devdatta Tengshe

@Devdatta, theo như tôi có thể nói, Nhận các giá trị duy nhất không liệt kê NaN nào cả.
stakx

Loại dữ liệu này là gì? Đây có phải là bảng thuộc tính của Lưới không? Bạn đã nhập dữ liệu này từ nguồn không phải ArcGIS?
Jakub Sisak GeoGraphics

@Jakub: Đây là một bảng bên trong cơ sở dữ liệu địa lý tệp và các trường hiển thị trong ảnh chụp màn hình có loại Double. Và không, bảng đã được tạo và chỉnh sửa bằng ArcObjects & ArcMap.
stakx

Có, nhưng làm thế nào bạn có được những giá trị như vậy vào các lĩnh vực?
whuber

Câu trả lời:


2

Trong ArcGIS, một số dấu phẩy động có độ chính xác đơn có phạm vi từ -3,4E38 đến 1,2E38.

Nếu bạn thực sự thấy các giá trị 1. # INF -1. # INF được hiển thị trong bảng thuộc tính của bạn (hoặc thông qua MS Access khi phân tích thuộc tính) hoặc thống kê lưới thì đây có thể là các số nằm ngoài phạm vi được ESRI hỗ trợ. Và nếu những con số này thực tế nằm ngoài phạm vi được hỗ trợ, có thể nói rằng bạn sẽ không thể truy vấn các giá trị này. Bạn có thể thử lớn hơn và tối thiểu sau đó tối đa và tối thiểu (-3.4E38 đến 1.2E38) và xem những gì nó trả về nhưng tôi nghi ngờ rằng truy vấn sẽ hoạt động hoàn toàn nếu bảng / trường chứa phạm vi giá trị không được sắp xếp.

Nguồn này cho thấy các giá trị như vậy có thể đã được nhập từ ứng dụng không phải ESRI của bên thứ 3 . Bạn có thể cần chuyển đổi các giá trị thành một phạm vi giá trị được hỗ trợ trước khi nhập vào sản phẩm ESRI.

Đối với các giá trị NULL / NuN, sẽ rất hữu ích khi biết chính xác những gì chúng tôi đang xem xét trong ví dụ của bạn; Một bảng attrubute của một mạng lưới, shapefile, geodatabase lớp đối tượng, vv Ví dụ, shapefile không thể lưu trữ các giá trị NULL vì vậy nếu một lớp đối tượng Thant chứa giá trị NULL được chuyển đổi sang một shapefile những được lưu trữ như các giá trị khác nhau ( "", 0, NuN?, V.v.) nhưng khi được hiển thị trong bảng thuộc tính ArcMap, chúng vẫn được biểu thị trực quan là "<Null>". Có thể sự liên kết của các NULL trong bảng thuộc tính của bạn là một tình huống như vậy. Tôi chỉ suy đoán về lý do tại sao bạn có thể truy vấn các NULL được căn trái nhưng không phải là NULL được căn phải, nhưng nếu đây là một shapefile, hãy thử nhập vào một cơ sở dữ liệu địa lý sau đó chạy lại truy vấn. Rất có thể tất cả những điều này sẽ được chuyển đổi thành các giá trị NULL thích hợp.


@stakx - Tôi chỉ nhận thấy ý kiến ​​của bạn ở trên. Tôi không thấy các bình luận khi tôi đang đưa ra câu trả lời của mình. Dù sao tôi cũng để nó ở đây.
Jakub Sisak GeoGraphics

Trên thực tế, một shapefile là một cách hợp lý trong đó các giá trị như vậy có thể xảy ra. Với một shapefile, các số được duy trì ở định dạng ký tự ASCII cơ sở 10, không phải là số nhị phân hoặc số nhân. Nếu giá trị được lưu trữ chuyển thành vô cực hoặc NaN, ArcGIS sẽ giải thích nó như thế nào? Có lẽ là bất cứ ai đã mã hóa trình đọc shapefile (có nghĩa là hành vi ArcGIS có thể thay đổi bất cứ lúc nào, thay đổi theo phiên bản, bản phát hành và sửa lỗi hiện đang có hiệu lực :-).
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.