oracle12c - 将 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 函数进行的计算给我预期的结果,但现在我不能
解决方案
正如Albert Godfrind在他的评论中提到的,我使用了错误的 SRID,并且还混淆了纬度和经度。
推荐阅读
- php - 调用 Lambda 客户端返回未知错误
- python - 在函数调用中添加要设置的项目?
- node.js - DynamoDB = 为什么我在传递有效值时收到“提供的关键元素与架构不匹配”错误?
- r - 渲染带有旋转的R脚本时如何传递参数?
- angular - 使用 ng-select 插入动态模板
- group-by - 如何创建动态汇总表以包含在 DAX 度量中?
- excel - 设置右页脚
- makefile - Makefile 中没有先决条件的隐式规则
- python - session.query 中的 Sqlalchemy 传递参数
- java - 为什么我的 twitter4j maven 依赖项不包括 TwitterStreamFactory?