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

Storing coordinates retreived by Google Maps GeocodingApi in an Oracle Database and calculate distances between them with SDO_GEOM.SDO_DISTANCE

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

我在具体Table中的坐标列上建立了一个空间索引,代码如下,这样我就可以运行对其进行空间查询:

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

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