Ссылаясь на 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> с выравниванием по правому краю. Я тоже с нетерпением жду ответов. Кстати, как выглядит выровненный по правому краю <null> в окне поиска по атрибуту (когда вы получаете все различные значения для этого поля?)
Devdatta Tengshe

@Devdatta, насколько я могу судить, Получить уникальные значения не перечисляет NaN вообще.
stakx

Что это за данные? Это таблица атрибутов таблицы? Импортировали ли вы эти данные из источника, отличного от ArcGIS?
Якуб Сисак GeoGraphics

@Jakub: это таблица в файловой базе геоданных, а поля, показанные на скриншоте, имеют тип Double. И нет, таблица была создана и отредактирована с помощью ArcObjects & ArcMap.
stakx

Да, но как вы получили такие значения в полях?
whuber

Ответы:


2

В ArcGIS число с плавающей запятой одинарной точности имеет диапазон от -3,4E38 до 1,2E38.

Если вы на самом деле видите значения 1. # INF -1. # INF, отображаемые в вашей таблице атрибутов (или через MS Access при анализе атрибутов) или статистике сетки, то это могут быть числа, которые выходят за пределы диапазона, поддерживаемого ESRI. И если эти числа действительно выходят за пределы поддерживаемого диапазона, можно с уверенностью сказать, что вы не сможете запросить эти значения. Вы можете попробовать больше и меньше максимума и минимума (от -3,4E38 до 1,2E38) и посмотреть, что он возвращает, но я сомневаюсь, что запрос будет работать вообще, если таблица / поле будет содержать неподдерживаемый диапазон значений.

Этот источник предполагает, что такие значения могли быть импортированы из стороннего приложения не-ESRI . Возможно, вам придется преобразовать значения в поддерживаемый диапазон значений перед импортом в продукт ESRI.

Что касается значений NULL / NuN, было бы полезно точно знать, на что мы смотрим в вашем примере; Таблица атрибутов сетки, шейп-файла, класса пространственных объектов базы геоданных и т. Д. Например, шейп-файлы не могут хранить значения NULL, поэтому, если объект класса пространственных объектов содержит значения NULL, преобразуется в шейп-файл, который сохраняется как различные другие значения ("", 0, NuN ?, и т. Д.), Но при отображении в таблице атрибутов ArcMap они все еще визуально представляются как "<Null>Msgstr "Возможно, что выравнивание NULL в вашей таблице атрибутов является такой ситуацией. Я только размышляю о том, почему вы можете запрашивать выровненные по левому краю NULL, но не выровненные по правому NULL, но если это шейп-файл, попробуйте импортировать в базу геоданных, а затем снова запустите запрос. Скорее всего, все они будут преобразованы в правильные значения NULL.


@stakx - я только что заметил ваши комментарии выше. Я не видел комментарии, когда формулировал свой ответ. Я все равно оставляю это здесь.
Якуб Сисак GeoGraphics

На самом деле, шейп-файл - это один из возможных способов получения таких значений. В шейп-файле числа поддерживаются в формате символов ASCII с базовым номером 10, а не в виде двоичных чисел с плавающей точкой или двойных чисел. Если сохраненное значение преобразуется в бесконечность или NaN, как ArcGIS его интерпретирует? Вероятно, по желанию того, кто закодировал читатель шейп-файла (что означает, что поведение ArcGIS может измениться в любое время, в зависимости от версии, выпуска и исправления ошибки, действующего в настоящее время :-).
whuber
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.