количество геометрических форм не совпадает с числом записей в таблице

Как программно проверить, если число фигур = количество записей в таблице?

У меня есть около 1000 шейп-файлов, которые повреждены (см. Прикрепленное сообщение об ошибке). Шейп-файлы были сгенерированы из eCognition Developer 8. Существует инструмент-скрипт, который, похоже, восстанавливает шейп-файл, если он идентифицирован как поврежденный.

количество геометрических форм не совпадает с числом записей в таблице

Я хочу создать быстрый скрипт, который будет перебирать все мои шейп-файлы и проверять, совпадает ли количество фигур с записями таблицы. Я могу посчитать записи таблицы, используя следующие:

В конечном итоге я хотел бы создать какую-то проверку логики, такую ​​как:

К сожалению (или, к счастью, к счастью?), У меня нет поднятых шейп-файлов, чтобы проверить, нет ли. форм может! = нет. записей.

Подожди минутку, у меня теперь есть поднятый шейп-файл благодаря идее Кирка в комментариях ниже. Я сделал резервную копию dbf, сделал копию всего шейп-файла, удалил некоторые функции, затем переименовал резервную копию dbf обратно в оригинал, и вот, количество фигур — Чед Купер
источник

Если вы попытаетесь запустить функцию GetCount для шейп-файла с другим количеством записей, произойдет сбой с ошибкой:

ОШИБКА 000229 : невозможно открыть. Не удалось выполнить (GetCount).

Так как функция GetCount завершается с ошибкой в ​​этом сценарии, и все, что вам нужно сделать, это идентифицировать шейп-файлы по ошибке, вы можете поймать это с помощью выражения try / исключением в вашем коде вместо if / else, который вы ранее пытались использовать.

Я позволил себе добавить код и цикл «List FeatureClasses», чтобы вы могли проверить все FC в вашем рабочем пространстве без необходимости вручную проверять каждый из них.

Источник

Визуализация и анализ географических данных на языке R

9.1 Предварительные требования

Данный модуль посвящен введению в работу с пространственными данными в R. Рассмотрены общие вопросы моделирования реального мира средствами моделей пространственных данных. Рассматривается чтение векторных и растровых данных, их визуализация стандартными средствами.

Необходимые для работы пакеты:

9.2 Модели пространственных данных

Если говорить по сути, то пространственные данные можно определить как данные о географических объектах или явлениях, фиксирующие их местоположение и/или распределение в системе координат, привязанной к телу Земли или любого другого небесного тела. Таким образом, отличительной особенностью пространственных данных перед непространственными является координатное описание местоположения. На профессиональном жаргоне пространственные данные также часто называют геоданными. Не следует использовать этот

Важно знать отличия между векторной и растровой моделью пространственных данных.

Векторная модель пространственных данных включает описание координатных данных пространственных объектов и, опционально, топологических отношений между ними. Векторные данные фиксируют местоположение и форму объектов в виде геометрических примитивов, таких как точки, линии, полигоны, объемные тела. Выбор модели объекта (например, представить город точкой или полигоном) зависит от масштаба анализа и целей исследования. Векторная модель данных является объектно-ориентированной.

Растровая модель описывает не объекты, а пространственное распределение некоторой (выбранной исследователем) характеристики. Пространство разбивается регулярной сеткой ячеек, в каждой ячейке фиксируется значение исследуемого параметра (путем статистического осреднения, семплирования в центре ячейки и т.п.). Растровые данные могут быть как количественными (например, поле температуры), так и качественными (например, растр классифицированного снимка, каждая ячейка которого фиксирует принадлежность к тому или иному типу объекта). Таким образом, растровая модель является пространственно-ориентированной (или феномен-ориентированной).

Существуют и другие модели пространственных данных, однако их рассмотрение выходит за рамки настоящей лекции.

В настоящей лекции мы познакомимся с чтением и визуализацией пространственных данных в векторном и растровом формате, а также рассмотрим вопросы связанные с использованием картографических проекций.

9.3 Векторные данные

9.3.1 Simple Features

Simple Features (официально Simple Features Access) — это стандарт OGC 06-103, разработанный Open Geospatial Consortium (OGC) и реализованный также в виде международного стандарта ISO 19125, который определяет общую модель хранения и доступа к векторным объектам (точка, линия, многоугольник, мульти точечные, мультилинии и т. д.), в географических информационных системах.

Геометрическое представление пространственных объектов базируется на следующих принципах:

В дополнение к координатам \(X\) и \(Y\) имеются два дополнительных дополнительных параметра:

В случае использования широт и долгот \(X\) соответствует долготе, \(Y\) соответствует широте.

Всего стандарт Simple Features включает в себя 17 типов геометрий. Из них наиболее употребительными являются следующие 7:

ТипОписание
POINTнуль-мерная геометрия, содержащая одну точку
LINESTRINGпоследовательность точек, соединенных прямыми, несамопересекающимися отрезками; одномерная геометрия
POLYGONгеометрия с положительной площадью (двумерная); последовательность точек, отрезки между которыми формируют замкнутое кольцо без самопересечений; первое кольцо является внешним, ноль и более остальных колец представляют дырки внутри полигона
MULTIPOINTмножество точек; геометрия типа MULTIPOINT называется простой если ни одна пара точек в MULTIPOINT не совпадает
MULTILINESTRINGмножество линий
MULTIPOLYGONмножество полигонов
GEOMETRYCOLLECTIONмножество геометрий произвольного типа за исключением GEOMETRYCOLLECTION

Примеры различных видов геометрий представлены на рисунке ниже:

количество геометрических форм не совпадает с числом записей в таблице

Существует два официально закрепленных формата представления SF: Well-Known Text (WKT) и Well-Known Binary (WKB), которые необходимы для чтения таких данных человеком и машиной соответственно.

Well-Known Text (WKT) — стандарт представления геометрии в виде множества списков координат, в которых координаты вершин разделены пробелами, вершины разделены запятыми, а компоненты полигонов и мультигеометрий заключены в круглые скобки и также разделены запятыми. Вышеприведенной картинке соответствуют следующие строки WKT:

Well-Known Binary (WKB) — бинарный формат хранения координат. Именно этот формат фактически используется в базах данных, поскольку он обеспечивает высокую скорость чтения и записи данных (в отличие от текстового). Однако внешний вид данных в формате WKB мало о чем говорит человеку, поскольку он предназначен для чтения компьютером. Например, вышеприведенная строка LINESTRING будет выглядеть так:

9.3.2 Базовые библиотеки

В R существует высоко развитая инфраструктура для работы с векторными данными, которая обеспечивается пакетом sf. Этот пакет появился относительно недавно (в 2016 году), и активно развивается в настоящее время. Ранее поддержка пространственных данных обеспечивалась пакетом sp, который по прежнему используется некоторыми пакетами R. Пакет sf базируется на библиотеках PROJ, GDAL, GEOS и S2, которые устанавливаются вместе с ним. Их назначение кратко описано на следующем рисунке:

количество геометрических форм не совпадает с числом записей в таблице

Рис. 9.1: Архитектура программных библиотек для работы с пространственными данными в R

9.3.3 Чтение

Существует большое количество форматов хранения пространственных данных. Но в общем и целом их можно разделить на две категории: файловые форматы (наиболее привычные пользователям) и хранение данных в СУБД — системах управления базами данных. Благодаря библиотеке GDAL пакет sf имеет возможность читать и записывать более 90 различных форматов векторных даных.

Исторически наиболее распространенным форматом был (и остается) ESRI Shapefile. Данный формат, однако не отвечает современным техническим требованиям с точки зрения гибкости, соответствия стандартам и возможностям хранения разнообразных типов геометрий (напомним, что в стандарте Simple Features их 17, а с учетом четырех вариантов размерности точек получается целых 68 ). Современный формат, который обеспечивает полную поддержку стандарта Simple Features (и не только) — это GeoPackage. Именно его мы и будем использовать в нашем практикуме.

Для чтения данных средствами sf необходимо использовать функцию st_read() :

Лог функции сообщил нам следующую информацию:

Подгрузим также для работы данные по другим типам объектов:

9.3.4 Внутренняя структура

В R используется первый подход, в котором информация о геометрии хранится в специальном столбце таблицы. Каждая ячейка этого столбца соответствует геометрическому объекту Simple Features. Представление геометрических объектов реализовано стандартными средствами, такими как списки, матрицы и векторы. Эти структуры данных упорядоченным образом хранят координаты объектов и естественным образом соответствуют способу организации данных, который регламентируется стандартом Simple Features. Поскольку геометрический столбец хранит не обычные переменные, а структуры данных, он реализуется в виде так называемого списка-колонки (list-column), каждый элемент которой соответствует отдельному объекту.

Исходя из этих соображений, представление пространственных объектов реализовано в R в виде иерархии из трех классов объектов:

Посмотрим, как все это реализовано, на конкретном примере:

Данная форма записи говорит о том, что прочитанный слой имеет класс sf, который, в свою очередь, является расширением класса data.frame.

А теперь посмотрим на последние колонки в первых строках таблицы:

Теперь если просмотреть начало данных, то мы увидим, что это больше не фрейм данных, а аннотированный список:

Далее можно опуститься на базовый уровень геометрии, получив доступ к отдельному объекту. Поскольку объект класса sfc представляет собой список, любой элемент можно извлечь по его порядковому номеру. Класс полученного объекта будет:

9.3.5 Визуализация

9.3.5.1 Базовая графическая система

Если попытаться применить функцию plot() к геометрии объекта, она попытается нарисовать тематические карты по всем имеющимся атрибутам (но остановится, если их более 9):

количество геометрических форм не совпадает с числом записей в таблице

Если задача стоит нарисовать границы объектов, то нужно отображать объект sfc:

количество геометрических форм не совпадает с числом записей в таблице

Для быстрого построения тематических карт по выбранному показателю необходимо при вызове функции plot() указать соответствующий атрибут фрейма данных:

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

Внимание: чтобы слои совместились на карте, они должна иметь одинаковую систему координат.

Ясно, что на полученных нами картах можно много что улучшить, однако это мы отложим до следующей главы, где подробно разбирается построение тематических карт в R.

Внимание: чтобы слои данных можно было совместно анализировать и наносить на одну карту, они должны иметь одну и ту же координатную систему (проекцию).

9.3.6 Интерактивные карты

R предоставляет возможности для интерактивного просмотра пространственных данных средствами библиотек веб-картографирования. В данном разделе мы кратко познакомимся с возможностями пакета mapview, который использует возможности библиотеки Leaflet. Функции данного пакета не предназначены для создания тематических карт высокого качества и рассчитаны на выполнение исследовательского анализа данных.

Чтобы отобразить векторный или растровый слой средствами mapview, достаточно вызвать одноименную функцию данного пакета:

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

Чтобы скомбинировать несколько слоев, необходимо сложить несколько вызовов mapview() :

количество геометрических форм не совпадает с числом записей в таблице

9.3.7 Атрибутивные операции

Поскольку пространственные объекты хранятся в фреймах данных, к ним можно применять стандартные операции выборки по атрибутам и преобразования таблиц. Например, можно выбрать Италию и отобразить ее на отдельной карте:

количество геометрических форм не совпадает с числом записей в таблице

Следующий пример иллюстрирует как выбрать страны с населением более 100 млн человек:

количество геометрических форм не совпадает с числом записей в таблице

Обратите внимание на то, что при вызове функции select() столбец geometry не был указан в числе выбираемых переменных. Тем не менее, то, что мы смогли построить карту по результатам выборки, говорит о том, что данный столбец был сохранен. Функции dplyr определены для объектов sf таким образом, чтобы всегда сохранять геометрический столбец.

Еще интереснее работает агрегирование объектов по атрибутам. В случае, когда агрегируются пространственные объекты, необходимо объединять и их геометрию. При этом если у агрегируемых объектов имеется общая граница, ее необходимо удалить, а если объекты разнесены в пространстве, из них нужно собрать новый мульти-объект.

Например, мы можем агрегировать валовой региональный продукт по континентам:

количество геометрических форм не совпадает с числом записей в таблице

Потрясающе просто, не правда ли? Вдобавок, мы еще и получили границы континентов (достаточно условные, конечно), которых у нас раньше не было. Данный пример также показывает, что атрибутивные операции над пространственными объектами всегда учитывают их геометрию.

9.3.8 Создание пространственных объектов

Пространственные объекты в R можно собирать “вручную”, если есть такая необходимость. Например, вам известны координаты границ участков полевого обследования, полученные посредством GPS, а вам необходимо превратить их в полигоны, чтобы выполнить анализ и картографирование. Придется из координат собрать полигоны программным путем. Процесс создания пространственных объектов осуществляется в последовательности их иерархического соподчинения: sfg > sfc > sf.

9.3.8.1 Геометрические объекты (sfg)

Для создания геометрических объектов в пакете sf существует ряд функций с говорящими названиями:

ФункцияТип пространственного объекта
st_point()POINT
st_linestring()LINESTRING
st_polygon()POLYGON
st_multipoint()MULTIPOINT
st_multilinestring()MULTILINESTRING
st_multipolygon()MULTIPOLYGON
st_geometrycollection()GEOMETRYCOLLECTION

В зависимости от типа создаваемого объекта, данные функции принимают координаты, организованные в виде одной из трех структур данных:

Проще всего создаются отдельные точки (POINT):

Дополнительный параметр dim= служит для уточнения типа геометрии точек и по сути нужен только тогда, когда необходимо создать редко используемые точки типа XYM. во всех остальных случаях (XY, XYZ, XYZM) размерность геометрии распознается по умолчанию.

При создании мультиточек (MULTIPOINT) и линий (LINESTRING) необходимо подавать на вход функции уже матрицу координат:

В первом случае геометрия состоит из отдельных точек. Во втором случае те же самые точки соединены линией:

количество геометрических форм не совпадает с числом записей в таблице

Создание полигонов (POLYGON), мультиполигонов (MULTIPOLYGON) и мультилиний (MULTILINESTRING) требует уже создания списков из матриц.

Почему нельзя представить обычный (не мульти) полигон просто матрицей координат? Потому что полигон может содержать дырки. Например, контур леса может содержать дырку в том месте, где находится озеро. Или озеро может содержать дырку в том месте, где находится остров. Природа предлагает нам бесконечное число таких примеров. В целях универсализации приходится закладываться на возможность наличия дырок в полигонах, поэтому даже полигоны без дырок представляются в виде списков. При этом действу.т следующее правила:

Если дыр в полигоне нет, его список будет содержать только одну матрицу. Рассмотрим оба примера построения полигонов:

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

Мультиполигоны (MULTIPOLYGON) и мультилинии (MULTILINESTRING) требуются тогда, когда один и тот же географический объект состоит из нескольких геометрических объектов. Простейший пример — островные государства. Чтобы представить страну, занимающую архипелаг (Багамские острова, Индонезия, Япония и т.д.) как один пространственный объект, необходимо создать мультиполигон. Все компоненты мультиполигона будут иметь общий набор атрибутов (непространственных характеристик). Мультилинии используются реже мультиполигонов и необходимы для представления линейных объектов, разорванных в пространстве. Примером такого объекта может быть любая река или канал, которые разорваны в тех местах, где они протекают через озеро или водохранилище, представленное полигональным объектом.

В мультиполигонах добавляется еще один уровень списка, то есть искомые матрицы координат будут располагаться как минимум на втором уровне вложенности:

количество геометрических форм не совпадает с числом записей в таблице

Как насчет острова на озере? Если остров и суша, окружающая озеро, составляют единое целое (например, подлежат учету как единый массив леса), их можно собрать как мультиполигон. В этом случае первая компонента мультиполигона будет представлять собой полигон с дыркой, а вторая компонента — остров. Порядок компонент в данном случае роли не играет:

количество геометрических форм не совпадает с числом записей в таблице

Из данного примера также видно, что при сборе мультиполигона на самом нижнем уровне вложенности можно подавать не списки матриц координат, а готовые полигоны.

Мультилиния, в отличие от мультиполигона, не требует дополнительного списка верхнего уровня, поскольку линии не могут содержать дыр. Например, можно собрать мультилинию из двух частей, соответствующих участкам реки до и после озера:

количество геометрических форм не совпадает с числом записей в таблице

Наконец, еще один вид геометрии — это геометрическая коллекция (GEOMETRYCOLLECTION), который позволяет хранить вместе любые виды геометрий. Эта возможность используется достаточно редко, тем не менее, рассмотреть ее нужно. Геометрическая коллекция собирается из списка объектов с простыми типами геометрии (мы создали их ранее):

количество геометрических форм не совпадает с числом записей в таблице

9.3.8.2 Списки геометрических объектов (sfc)

При создании списка геометрий для него может быть определена система координат (это можно сделать и позднее при создании таблицы пространственных объектов). Для этого используем уже знакомую нам функцию st_crs() :

Для списка геометрий может быть определена только одна система координат

Можно посмотреть, куда легли наши точки:

количество геометрических форм не совпадает с числом записей в таблице

9.3.8.3 Пространственные объекты (sf)

9.3.8.4 Точки по координатам

Теперь создадим пространственные точки на основе этой таблицы, взяв координаты из столбцов lat и lon соответственно и указав код системы координат:

количество геометрических форм не совпадает с числом записей в таблице

9.3.8.5 Преобразование типов геометрии

количество геометрических форм не совпадает с числом записей в таблице

9.3.8.6 Полигонизация и разбиение линий

Полигонизация — это процесс преобразования линии или мультилинии в полигон(ы). Полигон может быть образован последовательностью из одной и более линий, для которых выполняются следующие условия:

Полигонизация может применяться только к одному геометрическому объекту (simple feature geometry). Соответственно, это должна быть либо просто замкнутая линия, либо мультилиния, компоненты которой образуют замкнутую последовательность.

Рассмотрим операции полигонизации и добавления узлов на простом примере трех пересекающихся отрезков:

количество геометрических форм не совпадает с числом записей в таблице

Из рисунка видно, что линии образуют треугольную замкнутую область. Также рисунок показывает, что у компонент мультилинии нет вершин в точках пересечения. Мы можем попытаться найти замкнутые области и превратить их в полигоны, используя st_polygonize() :

Операция завершилась возвратом пустой геометрической коллекции, то есть программа не смогла выделить замкнутые области. Это произошло по причине того, что линии не разбиты в точках пересечения. Разбить их на компоненты можно, используя функцию st_node() :

количество геометрических форм не совпадает с числом записей в таблице

Таким образом, после разбиения линий на куски в точках пересечения стала возможной операция полигонизации.

9.3.9 Геометрические атрибуты

Обратите внимание на то, что площадь и периметр выводятся с указанием единиц измерений! Это возможно благодаря тому, что объекты типа sf поддерживают единицы измерений на основе пакета units.

Если данные находятся в плоской прямоугольной системе координат, то единицы измерения как правило указываются в параметрах проекции — следовательно, они могут быть использованы при вычислении геометрических параметров объектов. Если же данные хранятся в широтах и долготах, то вычисление геометрических параметров осуществляется пакетом sf по формулам сферической тригонометрии через пакет geosphere. Это позволяет выводить результат в плоских единицах измерения.

Ограничивающий прямоугольник можно быстро преобразовать в полигон и нанести на карту, применив функцию st_as_sfc() :

количество геометрических форм не совпадает с числом записей в таблице

Как видно, в данном случае центроид и характерная точка расположились относительно рядом. Однако так бывает далеко не всегда. Выполним аналогичные вычисления для Индонезии:

количество геометрических форм не совпадает с числом записей в таблице

9.3.10 Экспорт

9.4 Растровые данные

Работа с растровыми данными в целом гораздо проще, чем работа с векторными объектами. Это обусловлено в том числе жесткой сеточной структурой данных, которая предоставляет не так много свободы в различных сценариях обработки данных. В то же время, эта структура позволяет сделать растровые алгоритмы универсальными и робастными, многие задачи решаются в растровом виде быстрее и проще, чем в векторном.

9.4.1 Теоретические сведения

Растр представляет из себя матрицу значений. Каждой ячейке матрицы соответствует прямоугольная пространственная область фиксированного размера, которая называется пикселом. Различают растры непрерывные и категориальные (классифицированные). Также необходимо разделять одноканальные и многоканальные растры. Примером одноканального растра является цифровая модель рельефа. В виде многоканальных растров часто представляют космические снимки.

В отличие от векторных данных, которые требуют указания координат для каждой вершины, регулярно-ячеистый характер растровой модели позволяет вычислять координаты пикселов на основе их индексов. Поэтому фактически растровые данные хранятся в виде линейно упорядоченного списка значений (raster values) и описания геометрии растра (raster geometry).

Геометрия растра определяет, где именно располагаются в пространстве пикселы растра и может быть описана путем указания следующих компонентНазвания перечисленных компонент геометрии растра укоренились благодаря распространенности стандарта Esri ASCII Grid

ПараметрНазначение
NCOLSКоличество столбцов
NROWSКоличество строк
XLLCENTERКоордината \(X\) центра левой нижней ячейки растра
YLLCENTERКоордината \(Y\) центра левой нижней ячейки растра
CELLSIZEРазмер ячейки

В отличие от векторной модели, которая позволяет хранить данные только о нужных географических локациях, растровая модель такой свободы не предоставляет. Матрица ячеек растра всегда покрывает область данных целиком, и за простоту растровой структуры приходится расплачиваться ее неэкономичностью. Поскольку часто данные имеются не на всю территорию, возникает необходимость кодирования ячеек, для которых данные не известны, специальным числом (назовем его условно NODATA_VALUE ). Значение этого числа хранится в метаданных растра и позволяет интерпретировать соответствующие ячейки как пустые.

В этой и ближайших лекциях мы будем работать с растрами в формате stars, поскольку он концептуально близок к пакету sf.

9.4.2 Чтение

Для чтения растров любой размерности можно использовать функцию read_stars() :

9.4.3 Внутренняя струкура

Для работы с данными типа stars необходимо понимать их внутреннюю структуру. Для начала можно взглянуть на нее посредством стандартной функции str() :

Видно, что данный трёхканальный растр представляет собой список из единственного элемента с названием BlueMarbleJuly.tif — это имя было присвоено автоматически при чтении растра. Каждый такой элемент соответствует переменной данных. В данном случае переменная одна — это интенсивность цвета. Хранится она в виде трехмерного массива ( array ) размерностью \(720 \times 360 \times 3\) :

Например, посмотрим параметры измерения x растра:

Видно, что атрибут raster содержит 3 элемента:

9.4.4 Визуализация

9.4.4.1 Статичные карты

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

количество геометрических форм не совпадает с числом записей в таблице

Для синтезирования цветного изображения на основе многоканального растра необходимо объект stars предварительно подать в функцию st_rgb() :

количество геометрических форм не совпадает с числом записей в таблице

Поскольку при визуализации космических снимков часто используют различные варианты синтеза каналов (чтобы лучше дешифрировать те или иные категории объектов), функция st_rgb() предоставляет такую возможность. Достаточно перечислить последовательность каналов растрового стека (по умолчанию эти каналы будут подставлены в каналы R, G и B соответственно):

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *