首页 > 解决方案 > 将 Google Maps GeocodingApi 检索到的坐标存储在 Oracle 数据库中,并使用 SDO_GEOM.SDO_DISTANCE 计算它们之间的距离

问题描述

我写了一个 Spring-Applicationcom.google.maps.GeocodingApi.GeocodingApi来检索地址的坐标。之后,我使用该方法com.vividsolutions.jts.geom.GeometryFactory.createPoint()生成可以存储在 Oracle 数据库中的点。我像这样创建了 GeometryFactory new GeometryFactory(new PrecisionModel(), 3857):.

我使用以下代码在特定表中的坐标列上建立了空间索引,以便可以在其上运行空间查询:

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');

当我只是检索坐标并将它们显示在谷歌地图上时,一切都按预期工作。我遇到的问题是,我用来过滤数据的空间查询似乎无法正常工作。我正在使用 SDO_WITHIN_DISTANCE 来获取从我用作参数的坐标入站 100 公里半径内的所有坐标。之后,我使用 SDO_GEOM.SDO_DISTANCE 计算坐标之间的距离,以公里为单位。地图上生成的标记始终是球形而不是圆形,计算的距离也完全错误。我尝试了许多 SRID,但计算总是错误的。我怀疑我必须转换坐标或者我必须用不同的 SRID 存储它们,以便 Oracle 函数进行的计算给我预期的结果,但现在我不能

标签: oracle12cgoogle-geocoding-apioracle-spatialhibernate-spatial

解决方案


正如Albert Godfrind在他的评论中提到的,我使用了错误的 SRID,并且还混淆了纬度和经度。


推荐阅读