如果我正在做“靠近我”选项,我应该在数据库中存储经度/纬度吗?

Posted

技术标签:

【中文标题】如果我正在做“靠近我”选项,我应该在数据库中存储经度/纬度吗?【英文标题】:Should I store longitude/latitude in database if I'm doing a "find close to me" option? 【发布时间】:2012-04-16 20:28:45 【问题描述】:

我正在建立一个目录,让您可以根据您当前的位置查看您周围的业务。目前,这些业务在数据库中存储为address1,address2,city,province,postal_code。

如果我想计算距离,我是否也应该存储纬度/经度?解决这个问题的最佳方法是什么?

我正在使用 phphtml5 地理定位和谷歌地图。

【问题讨论】:

【参考方案1】:

除非您有其他方法来缩小您的数据库搜索范围,否则您可能确实希望保持纬度/经度,因为它可以帮助您过滤数据库搜索以查找附近的地址。使用 lat/long 准确计算两点之间的精确距离很复杂,但它至少是缩小地址数量以更详细地查看的起点。

此外,如果您希望在没有数据连接的情况下也能运行,则需要使用一些数据来代替网络查找。可以从 lat-long 获得相当准确的距离,而不必过多担心经度线的收敛,至少对于我周围的精度而言。

【讨论】:

【参考方案2】:

如果您查看谷歌地图中的距离服务,您不必“必须”,您可以传递地址或纬度、经度:

https://developers.google.com/maps/documentation/javascript/distancematrix

【讨论】:

但是,如果我有一个表格,上面写着“在此处输入关键字”并且他们检查了“显示离我最近的企业”,那么我是否必须遍历数据库中的每一个企业,获取地址,找出哪个更接近,然后按最接近排序?好像很贵我在这里错过了什么? 是的,您必须为每个条目都这样做。你在使用 mysql 吗?您可以搜索此站点以进行空间搜索或其他几种方法。如果你想要最好的类型,你可以看这里:***.com/questions/159255/… 我对HTML5 Geolocation一点也不熟悉,但如果你有用户的邮政编码,你可以计算一次,并将距离存储在距离表中邮政编码(因为它将被许多人共享)。使用该 PC 进行的后续查找只会调用先前计算的业务。最终,您会在一段时间不使用后摆脱计算。我相信您也可以使用部分 IP 地址,尽管它可能不准确。【参考方案3】:

您不想对数据库中的每个条目进行距离计算,您需要缩小范围。 postal_code 可能就足够了。如果不是,您可以通过将每个纬度/经度限制在该位置周围的范围内来快速缩小搜索范围;这提供了一个几乎是正方形的梯形区域,这可能就足够了。

【讨论】:

以上是关于如果我正在做“靠近我”选项,我应该在数据库中存储经度/纬度吗?的主要内容,如果未能解决你的问题,请参考以下文章

如果内容需要与 iCloud 同步,我应该如何存储图像

如何在数据库中存储选择选项的名称而不是值

当它们彼此靠近时对点进行分组

根据存储在共享首选项中的记住我状态导航到屏幕

arcgis TIN转栅格无法创建输出数据应该怎么做

如何在React库的LocalStorage中存储令牌