首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在数据库中有效地存储城镇之间的距离

如何在数据库中有效地存储城镇之间的距离
EN

Stack Overflow用户
提问于 2012-10-02 20:18:37
回答 6查看 3.4K关注 0票数 5

我需要能够显示从用户选择的特定地点到n个城镇的距离。这就像点击一张地图,在100英里内得到所有目的地,只是它不是地图,而是网页上的链接。

我需要选择一个解决方案--从一个州扩大到一个国家,到全球范围--这意味着从上千个地点扩大到十万个地点。

我想将CITY1_ID、CITY2_ID和table存储在关系数据库表中,但我怀疑它是否适合web应用程序(百万行)。

是否可以更有效地使用NoSQL数据库或图形数据库?或者RDBMS对于这个问题是否有足够好的设计呢?

补充说:如果我不存储在DB,那么我将如何得到这样的东西:给我在距圣何塞100英里的所有城市?

EN

回答 6

Stack Overflow用户

发布于 2012-10-02 20:20:09

您应该为每个城市存储一个city_id, latitude, longitude,然后根据运行时输入计算距离。

票数 4
EN

Stack Overflow用户

发布于 2012-10-02 20:54:11

我多次使用的一个简单解决方案(但不是mysql)是创建一个用户定义函数some_distance_function,它包含四个参数latitude1longitude1latitude2longitude2,它返回距离,然后根据该距离函数测试所有内容,查看每个项的距离是否小于或等于给定的值。如果你只有几千个地点,这是相当好和有效的。

如果您需要针对数百万条记录运行此查询,您可能希望看到哪些GIS (地理信息系统)扩展可供您选择的数据库使用,因为有更好的持久数据结构(至少在搜索能力方面)可以通过大量的位置进行搜索。

编辑:要给出微软如何做到这一点的例子,请参阅http://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx

看起来MySQL一般支持空间扩展:

http://dev.mysql.com/doc/refman/5.0/en/gis-introduction.html

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

编辑二:

看来这个问题也可能有帮助。

在MYSQL中找到两点之间的距离。(使用Point数据类型)

票数 1
EN

Stack Overflow用户

发布于 2012-10-06 06:49:26

下面是一个使用RDBMS的解决方案。保留两张桌子

  • 具有聚集索引的CityByLat {纬度,city_id }和
  • 具有聚集索引的CityByLng {逻辑,city_id }

当您需要从给定的纬度和经度找到一定半径内的城市时,您可以对这两个表进行有效的范围查询,从而使城市在一定的纬度和经度范围内。然后,您可以计算出从这样检索到的城市的实际距离。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12697635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档