我在一个包含纬度和经度的表中有一组数据。我需要查询这些数据,这些数据在半径 5 公里内有纬度、经度。
我曾尝试将 IBM bluemix 与 BigSQL 和 DashDB 一起使用。请提出一个可能的解决方案。
注意:我不能使用任何 RDBMS 数据库,例如 MySQL/PostGre。限制使用大数据。
我在一个包含纬度和经度的表中有一组数据。我需要查询这些数据,这些数据在半径 5 公里内有纬度、经度。
我曾尝试将 IBM bluemix 与 BigSQL 和 DashDB 一起使用。请提出一个可能的解决方案。
注意:我不能使用任何 RDBMS 数据库,例如 MySQL/PostGre。限制使用大数据。
您应该使用 Cloudant DBaaS 服务。它建立在 CouchDB 之上,特别擅长处理地理空间数据。查看以下站点以获取更多信息:https ://cloudant.com/product/cloudant-features/geospatial/
dashDB 是 Bluemix 中用于分析空间数据的最佳解决方案。它也具有预定义的空间功能。
您说您已经尝试过 dashDB。你有遇到什么问题吗?请让我知道,我可以帮助你。
谢谢,
您确实可以为此使用 dashDB。
它提供了所有符合 OGC 标准的 SQL 扩展。对于您的情况,您将使用ST_Buffer
函数来定义围绕给定点的圆形几何(用于ST_GeomFromText
从给定的经度和纬度构造几何点)。然后,您将使用ST_Within
查找几何图形(我假设您现在只有点)在圆内的所有行。
类似以下谓词的东西应该适合您:
WHERE DB2GSE.ST_WITHIN( your_points_column, DB2GSE.ST_Buffer(
DB2GSE.ST_GeomFromText( 'POINT (<long float value>, <lat float value>)', 1005),
5000, 'METRE') = 1
这是一个应该立即使用 dashDB 示例数据的示例:
with target as (select db2gse.st_buffer(db2gse.st_geomfromtext('POINT
(-80.6233232399 40.0725289742)',1005),10000,'METRE') as buffer
from SYSIBM.SYSDUMMY1) SELECT count(*) FROM SAMPLES.GEO_CUSTOMER C,
TARGET T WHERE DB2GSE.ST_WITHIN(C.SHAPE,T.BUFFER) = 1
相关文档链接:
作为对上面关于 Cloudant 的评论的回应,这里还有一个好处:您可以在 Cloudant.com 门户中非常轻松地为任何给定的 Cloudant 数据库设置一个 dashDB 仓库。架构会自动发现,初始加载以及正在进行的 ETL 也会自动完成。