xBB – бесплатные скрипты PHP и доки для вебмастеров | |||||||||||||
ДокументацияМетки (все метки)bbcode, html, php, xbb, базы данных, интернет, компьютер, программирование, сайт, софт
Подписаться через RSS2Email.ru
|
4.2. Использование стандартов OpenGISOpenGIS-овская "Спецификация простых возможностей для SQL" определяет стандартные типы объектов ГИС, функции для манипуляции ими, и набор таблиц метаданных. В целях сохранения совместимости метаданных, такие операции как создание и удаление пространственных столбцов осуществляются специальными процедурами, определенными OpenGIS. Существуют две таблицы метаданных OpenGIS: SPATIAL_REF_SYS и GEOMETRY_COLUMNS. Таблица SPATIAL_REF_SYS содержит числовые ID-ы и текстовые описания систем координат, используемых в пространственной базе данных. 4.2.1. Таблица SPATIAL_REF_SYSТаблица SPATIAL_REF_SYS определяется следующим образом: CREATE TABLE spatial_ref_sys ( srid INTEGER NOT NULL PRIMARY KEY, auth_name VARCHAR(256), auth_srid INTEGER, srtext VARCHAR(2048), proj4text VARCHAR(2048) ) SPATIAL_REF_SYS имеет следующие столбцы:
4.2.2. Таблица GEOMETRY_COLUMNSТаблица GEOMETRY_COLUMNS определяется следующим образом: CREATE TABLE geometry_columns ( f_table_catalog VARRCHAR(256) NOT NULL, f_table_schema VARCHAR(256) NOT NULL, f_table_nam VARCHAR(256) NOT NULL, f_geometry_column VARCHAR(256) NOT NULL, coord_dimension INTEGER NOT NULL, srid INTEGER NOT NULL, type VARCHAR(30) NOT NULL ) Она имеет следующие столбцы:
4.2.3. Создание пространственной таблицыСоздание таблицы с пространственными данными выполняется в два приема:
Приведем пример использования SQL для создания таблицы и добавления пространственного столбца (при условии, что уже существует SRID 128): CREATE TABLE parks (
park_id INTEGER,
park_name VARCHAR,
park_date DATE,
park_type VARCHAR
);
SELECT AddGeometryColumn('parks', 'park_geom', 128, 'MULTIPOLYGON', 2 );
Приведем другой пример, использующий общий тип "geometry" и SRID в неопределенном значении -1: CREATE TABLE roads ( road_id INTEGER, road_name VARCHAR ); SELECT AddGeometryColumn( 'roads', 'roads_geom', -1, 'GEOMETRY', 3 ); 4.2.4. Обеспечение совместимости геометрий с OpenGISБольшинство функций, предоставленных библиотекой GEOS, основаны на предположении, что ваши геометрии валидны согласно OpenGIS-овой Спейификации простых возможностей. Вы можете проверить валидность геометрий с помощью функции IsValid(): gisdb=# select isvalid('LINESTRING(0 0, 1 1)'),
isvalid('LINESTRING(0 0,0 0)');
isvalid | isvalid
---------+---------
t | f
По умолчанию PostGIS не применяет эту проверку валидности к геометрическому вводу, так как проверка валидности требует дополнительного процессорного времени для сложных геометрий, особенно для полигонов. Если вы не доверяете вашим исходным данным, вы можете вручную включить такую проверку для своей таблицы, добавив ограничение "CHECK": ALTER TABLE mytable
ADD CONSTRAINT geometry_valid_check
CHECK (isvalid(the_geom));
Если вы столкнулись с непонятной ошибкой, такой как "GEOS Intersection() threw an error!" или "JTS Intersection() threw an error!", которые генерируются функциями PostGIS на правильно введенных геометриях, то, возможно, вы обнаружили ошибку в PostGIS или в одной из используемых им библиотек, и вам следует обратиться к разработчикам PostGIS. Это касается и тех случаев, когда функция PostGIS возвращает невалидную геометрию для ввалидного ввода. ЗамечаниеГеометрии, строго соответствующие OGC, не должны иметь значений Z или M. Функция IsValid() не считает многомерные геометрии невалидными! Вызывая AddGeometryColumn(), вы можете указать ограничение числа измерений геометрии. Для строгого соответствия ограничьте число измерений двумя.
Последнее редактирование: 2008-03-24 14:05:18 Метки материала: PostGIS, OpenGIS, ГИС, SQL, SPATIAL_REF_SYS, GEOMETRY_COLUMNS Оставьте свой комментарий: |
||||||||||||
© 2007-2010, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.