Сохранение координат, полученных с помощью Google Maps GeocodingApi, в базе данных Oracle и вычисление расстояний между ними с помощью SDO_GEOM.SDO_DISTANCE - PullRequest
0 голосов
/ 14 июля 2020

Я написал приложение Spring, в котором я использую com.google.maps.GeocodingApi.GeocodingApi для получения координат адресов. После этого я использую метод com.vividsolutions.jts.geom.GeometryFactory.createPoint() для создания точки, которую я могу сохранить в своей базе данных Oracle. Я создал GeometryFactory следующим образом: new GeometryFactory(new PrecisionModel(), 3857).

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

INSERT INTO USER_SDO_GEOM_METADATA(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES('ADRESSE', 'KOORDINATE', SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', -180, 180, 0.05), SDO_DIM_ELEMENT('Y', -90, 90, 0.05)), 3857);

CREATE INDEX koords ON ADRESSE (KOORDINATE) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ('layer_gtype=POINT sdo_max_memory=200000000');

Когда я просто получаю координаты и представляю их на карте Google Maps, все работает, как ожидалось. Моя проблема в том, что пространственные запросы, которые я использую для фильтрации данных, не работают должным образом. Я использую SDO_WITHIN_DISTANCE, чтобы получить все координаты, входящие в радиус 100 км от координаты, которую я использую в качестве параметра. После этого я использую SDO_GEOM.SDO_DISTANCE для вычисления расстояния между координатами в км. Результирующие маркеры на карте всегда имеют сферическую форму, а не круг, и рассчитанные расстояния также полностью неверны. Я пробовал много SRID, но расчеты всегда неверны. Я подозреваю, что мне нужно преобразовать координаты или сохранить их с другим SRID, чтобы вычисления, выполненные функциями Oracle, дали мне ожидаемые результаты, но с тех пор я не мог заставить его работать.

1 Ответ

0 голосов
/ 17 июля 2020

Как Альберт Годфринд упомянул в своих комментариях, я использовал неправильный SRID и дополнительно перепутал широту с долготой.

...