将谷歌地图GeocodingApi检索到的坐标存储在Oracle数据库中,并使用SDO_GEOM.SDO_ISTANCE



我编写了一个Spring应用程序,使用com.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来计算坐标之间的距离,单位为km。地图上的标记总是呈球形而不是圆形,计算的距离也完全错误。我试过很多SRID,但计算总是错误的。我怀疑我必须转换坐标,或者我必须用不同的SRID存储它们,这样Oracle函数进行的计算才能得到预期的结果,但从现在起,我无法使其工作。

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

最新更新