如何将地图划分为给定半径的圆圈?

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。

【讨论】:

以上是关于如何将地图划分为给定半径的圆圈?的主要内容,如果未能解决你的问题,请参考以下文章

如何用最少 30 英里半径的圆圈覆盖美国地图?

将Google地图圆半径设置为输入框值

使用 google s2 库 - 查找圆圈内某个级别的所有 s2 单元,给定 lat/lng 和以英里/公里为单位的半径

如何在谷歌地图中制作多个圆圈颤动[关闭]

如何在逻辑上划分为段的地图上显示标记(巨大的数字)?

谷歌地图精度半径