如何将地图划分为给定半径的圆圈?
Posted
技术标签:
【中文标题】如何将地图划分为给定半径的圆圈?【英文标题】:How to divide a map into circles of a given radius? 【发布时间】:2014-06-30 16:45:48 【问题描述】:伙计们,
如何将一个州划分为半径为 50 英里的区域?
也许有更好的方法来解决我的问题:我有一个包含 700 个位置的列表,其中包含唯一的城市名称。有些城市相距不到 50 英里。我需要将该列表减少到距离不超过 50 英里且基本上涵盖列表中附近城市的最少位置。这样我可以在缩减列表中找到每个位置的中心半径邮政编码,然后搜索“50 英里内的商店”,这应该返回所有 700 个位置。
更新:我在不同城市有 5000 种产品和 700 家商店。我需要检查所有产品的库存。我检查它的网站只显示给定城市 50 英里范围内的商店的库存。这意味着我需要发出 3,500,000 个请求。因此,我正在寻找一种方法将 700 家商店减少到更小的数量。
【问题讨论】:
您不能将一个区域划分为没有重叠或间隙的圆圈。 因此您需要一组覆盖所有 700 个位置的圆圈。您可以使用规则的点数组,例如蜂窝状排列中的圆圈。 @Salixalba 每个圆圈/任何形状都应该有 1 分。这个想法是尽可能少地使用这些点来查询半径 50 英里内的所有点,我会得到所有 700 点。重叠很好。 @geocodezip 一些重叠很好。 是否需要严格的最小值或近似解决方案? 【参考方案1】:一个简单的算法,它可以工作,但远非最优。首先是候选城镇列表
-
随机选择一个城镇,围绕该点画一个圆圈
移除圆圈内的所有城镇
重复直到没有城镇为止
您可以运行几次,看看某些运行产生的结果圈数是否明显减少。
【讨论】:
【参考方案2】:您可以连接来自 x 和 y 坐标的二进制值。它不是一条直线,而是沿 z 曲线对点进行排序。然后你可以计算出最高位的上限。 z曲线常用于制图应用:http://msdn.microsoft.com/en-us/library/bb259689.aspx。
【讨论】:
以上是关于如何将地图划分为给定半径的圆圈?的主要内容,如果未能解决你的问题,请参考以下文章
使用 google s2 库 - 查找圆圈内某个级别的所有 s2 单元,给定 lat/lng 和以英里/公里为单位的半径