Сохранение полигона в базе данных Oracle
Я захватил четыре точки (координаты) графика, используя устройство GPS.
Точка 1: - лат - 27,54798833, длинный - 80,16397166
Точка 2: - широта 27,547766, длинная - 80,16450166
точка 3: - широта 27,548131, длинная - 80,164701
пункт 4: - ---
Теперь я хочу сохранить эти координаты в базе данных оракула, которые сохраняются в виде многоугольника.
Спасибо
3 ответа
Если вы намереваетесь использовать Oracle Spatial для хранения или обработки полигонов, то вам нужно будет хранить данные как SDO_GEOMETRY
объект. Вот быстрый пример:
CREATE TABLE my_polygons (
id INTEGER
, polygon sdo_geometry
)
/
INSERT INTO my_polygons (
id
, polygon
)
VALUES (
1
, sdo_geometry (
2003 -- 2D Polygon
, 4326 -- WGS84, the typical GPS coordinate system
, NULL -- sdo_point_type, should be NULL if sdo_ordinate_array specified
, sdo_elem_info_array(
1 -- First ordinate position within ordinate array
, 1003 -- Exterior polygon
, 1 -- All polygon points are specified in the ordinate array
)
, sdo_ordinate_array(
80.16397166, 27.54798833,
, 80.16450166, 27.547766,
, 80.164701, 27.548131,
, 80.16397166, 27.54798833
)
)
)
/
Здесь есть гораздо больше информации о различных флагах типа объекта: http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_objrelschema.htm
Основные вещи, на которые стоит обратить внимание:
- Какова ваша исходная система координат? Вы заявляете GPS - это WGS84 (Oracle SRID = 4326)? Ваше устройство GPS скажет вам. Вы можете найти Oracle SRID для этого в таблице
MDSYS.SDO_COORD_REF_SYS
- Убедитесь, что ваши координаты завершают полный многоугольник (т. Е. Вернитесь назад к начальной точке).
- Ваши координаты для внешней границы полигона должны быть упорядочены против часовой стрелки.
- Вы можете вызвать метод
st_isvalid()
на объекте геометрии, чтобы быстро проверить, является ли он действительным или нет. Вы должны убедиться, что геометрии действительны, прежде чем представлять их любому другому программному обеспечению.
Создайте таблицу для Polygon, в которой будут храниться данные Polygon (PolygonId).
Теперь создайте другую таблицу Coordinates и для вышеуказанного PolygonID сохраните точечные местоположения, такие как.
Polygoind Id Longitude Latitude
При этом, если у вашего многоугольника n чисел или координат, вы также можете его сохранить. И детали можно легко получить из таблицы координат.
Одна небольшая поправка к прекрасному ответу Бена...
Oracle Spatial (как и почти все другие системы кодирования геометрии) хранит координаты в порядке X,Y, что означает, что геодезические (широта / долгота) координаты должны храниться как long, lat - не как широта, long.
Так что просто измените ответ на:
, sdo_ordinate_array (80.16397166, 27.54798833, 80.16450166, 27.547766, 80.164701, 27.548131, 80.16397166, 27.54798833)
Для пуристов: система координат 4326 EPSG (WGS84 или "GPS") фактически определяет порядок координат как широта / долгота, но я не знаю ни одной реализации, которая использует что-либо еще, кроме длинного / широкового.