Проверка геометрии производится при помощи типа данных ST_Geometry посредством библиотек st_shapelib (Oracle) и st_geometry в PostgreSQL, IBM DB2 и Informix. После создания таблицы проверка выполняется при вставке или обновлении данных.
Существует два основных способа вставки данных в пространственные таблицы:
- Использование функций конструктора (constructor) или приложений, построенных на основе этих функций
- Использование ArcGIS API или приложений, построенных на основе этого интерфейса
Функции конструктора определяются реализацией каждого пространственного типа, и они могут применять для проверки геометрии данных различные методы. Функции конструктора Esri и IBM ST_Geometry, а также ArcGIS API, используют для проверки геометрии данных библиотеку геометрии Esri. Другие пространственные типы, такие как SDO_Geometry, PostGIS geometry или geography и Microsoft SQL Server geometry, имеют собственные функции конструктора и используют собственные правила проверки геометрии. Поэтому, следует изучить соответствующую документацию по Oracle, PostGIS или SQL Server, чтобы узнать, какие правила применяются при вставке или обновлении этих пространственных типов вне ArcGIS.
ArcGIS также проверяет геометрию при чтении данных. Недопустимые типы геометрии не могут быть отображены в ArcGIS.
Следующие правила проверки геометрии применяются к функциям конструктора Esri API, ST_Geometry, а также при чтении геометрии в ArcGIS:
Правила проверки для точечных форм (point shapes)
Площадь и длина точек равны 0,0.
Конверт одной точки равен значениям X, Y этой точки.
- Конверт формы из нескольких точек равен минимальному прямоугольнику, ограничивающему точки.
Правила проверки для простых линий или последовательностей линий
- Удаляются последовательные дублированные точки.
- Каждая часть линии должна иметь, по меньшей мере, две различные точки.
- Каждая часть линии не должна пересекать сама себя. Начальная и конечная точка линии могут быть одинаковыми, но полученное замкнутое кольцо (ring) не будет считаться формой площади (area shape).
- Части линии могут касаться друг друга в конечных точках.
- Длина линии равна сумме длин всех ее частей.
Правила проверки для линий или слабо структурированных последовательностей линий
- Линии могут пересекать сами себя.
- Каждая часть линии должна иметь, по меньшей мере, две различные точки.
- Удаляются последовательные дублированные точки.
- Длина линии равна сумме длин всех ее частей.
Правила проверки и операции для форм площадей (area shapes)
- Удаляются последовательные повторы одной координатной точки.
- Удаляются висячие объекты (dangles).
- Сегменты линий должны быть замкнуты (при этом координаты Z начальной и конечной точки также должны совпадать) и не должны перекрещиваться.
- Если форма площади имеет пробелы (holes), они должны полностью располагаться внутри внешней границы площади. Все пробелы, находящиеся за пределами внешней границы, в ArcGIS удаляются.
- Пробел, имеющий одну общую точку с внешней границей, преобразуется в точки внешней границы формы площади.
- Несколько пробелов, имеющих общие точки, объединяются в один пробел.
- Части составной формы площади не могут перекрываться. Однако две части могут касаться в одной общей точке.
- Части составной формы площади не могут иметь общих границ. Общие границы расформировываются.
- Если два кольца имеют общую границу, они сливаются в одно кольцо.
- В качестве длины геометрии рассчитывается общий периметр, включая границы всех пробелов в полигонах с пробелами.
- Вычислена площадь.
- Вычислен конверт.
- Точки формы площади хранятся в базе по направлению против часовой стрелки, хотя клиенты ArcGIS могут возвращать точки в любом направлении. Если создана форма площади, содержащая координаты в направлении по часовой стрелке, ArcGIS изменяет это направление и записывает координаты в порядке против часовой стрелки.
В этом примере начальная точка – a, и координаты должны быть перечислены в порядке a,b,c,d,a.
- Форма площади может включать смену направления точек в тех местах, где пустоты внутри площади касаются внешней границы формы.
- Формы площади со сменой направления имеют внутреннее кольцо, касающееся внешней границы. Они не считаются полигонами с пробелами.
- Если форма площади имеет внутри себя пробел, в первую очередь записывается внешняя граница. Точки пробелов хранятся в направлении, противоположном направлению внешней границы.
В примере на следующем рисунке внешняя граница описана в порядке a,b,c,d,a, а пробел – в порядке e,f,g,h,e. В списке координат форма геометрии хранится в виде a,b,c,d,a,e,f,g,h,e.
- Если два пробела касаются в одной общей точке, они считаются за один пробел, а не за два.
В приведенном примере две внутренние области являются единым пробелом, так как они имеют общую точку g.
- Как показано на следующем рисунке, сочетания форм площадей, с пробелами и без, могут иметь достаточно сложную структуру. Внешняя граница представляет озеро с островом. На острове тоже есть небольшое озеро.
Эти пространственные объекты можно представить одной, двумя или тремя формами. Каждый объект может храниться отдельно. Большое озеро является полигоном с пробелом. Граница большого озера является внешней границей формы, тогда как остров представлен границей ее единственного пробела. Остров также является полигоном с пробелом. Граница острова является внешней границей, тогда как маленькое озеро представлено пробелом. Маленькое озеро является одной формой площади.
Если как пространственные объекты важны именно озера, одна форма с пробелом может представлять большое озеро, а вторая форма – малое озеро. Также для отображения этих объектов можно использовать составную форму площади. Первой частью формы будет большое озеро с пробелом, представляющим остров. Второй частью будет малое озеро.
- Нулевые формы (Nil shapes) выступают как заменители реальных форм – так можно вывести атрибутивную строку без соответствующей геометрии. Например, нулевая форма может появиться как результат запроса пересечения двух непересекающихся площадей.
Так как площади A и B не касаются друг друга, в результате запроса их пересечения будет возвращена пустая геометрия.
- Формы имеют измерения. Форма, имеющая только координаты X и Y, считается двухмерной. Форма, имеющая координаты Z или другие измерения (значения M), считается трехмерной. Форма также может иметь нулевое измерение.
Идентификатор пространственной привязки (SRID)
Для классов объектов, использующих тип ST_Geometry, при попытке вставить значение с координатами, лежащими вне пределов идентификатора пространственной привязки (SRID), с которым была создана таблица, оператор INSERT даст сбой с подобным сообщением об ошибке:
СУБД | Сообщение об ошибке |
---|---|
Oracle | ERROR at line 1: ORA-20004: Error generating shape from text (-112) ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42 ORA-06512: at "SDE.ST_POLYGON", line 69 ORA-06512: at line 1 |
PostgreSQL | ERROR: ESRI: error generating shape [-112]: |
Informix | SQL Error (-937): Coordinates out of bounds in ST_PolyFromText. |
DB2 | GSE3416N Coordinate out of bounds |
SQLite | Error: ST_Geometry failed with SDE error -139: 'The specified coordinate exceeds the valid coordinate range':[4] |