Ссылаясь на 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.