Сохранение полигона в базе данных 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

Основные вещи, на которые стоит обратить внимание:

  1. Какова ваша исходная система координат? Вы заявляете GPS - это WGS84 (Oracle SRID = 4326)? Ваше устройство GPS скажет вам. Вы можете найти Oracle SRID для этого в таблице MDSYS.SDO_COORD_REF_SYS
  2. Убедитесь, что ваши координаты завершают полный многоугольник (т. Е. Вернитесь назад к начальной точке).
  3. Ваши координаты для внешней границы полигона должны быть упорядочены против часовой стрелки.
  4. Вы можете вызвать метод 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") фактически определяет порядок координат как широта / долгота, но я не знаю ни одной реализации, которая использует что-либо еще, кроме длинного / широкового.

Другие вопросы по тегам