我正在谷歌地图中绘制一个邮政编码区域列表,并且我正在尝试在该区域上写一个带有邮政编码的标签。我可以做到这一点,除了我使用区域的质心来定位标签,但有些区域的形状不规则,质心落在区域本身之外。这是我的意思的一个例子:
观看邮政编码 81151,它如何显示在邮政编码 81123 的区域顶部,而不是显示在他自己的区域顶部。
有谁知道更好的算法将邮政编码正确定位在不规则区域的顶部,而不是使用该区域的质心?
我正在谷歌地图中绘制一个邮政编码区域列表,并且我正在尝试在该区域上写一个带有邮政编码的标签。我可以做到这一点,除了我使用区域的质心来定位标签,但有些区域的形状不规则,质心落在区域本身之外。这是我的意思的一个例子:
观看邮政编码 81151,它如何显示在邮政编码 81123 的区域顶部,而不是显示在他自己的区域顶部。
有谁知道更好的算法将邮政编码正确定位在不规则区域的顶部,而不是使用该区域的质心?
您可以使用 google.maps.geometry.poly.containsLocation 和 google.maps.geometry.spherical.interpolate 函数。
例如。获取多边形的边界点和中心点并使用函数“ google.maps.geometry.spherical.interpolate ({centerpoint}, {bundaypoint}, {distance}) ”然后验证结果点是否在该区域中具有' google.maps.geometry.poly.containsLocation({resultPoint}, {polygonObject}) '函数的多边形。
GetBounds 函数:
if (!google.maps.Polygon.prototype.getBounds) {
google.maps.Polygon.prototype.getBounds = function (latLng) {
var bounds = new google.maps.LatLngBounds();
var paths = this.getPaths();
var path;
for (var p = 0; p < paths.getLength() ; p++) {
path = paths.getAt(p);
for (var i = 0; i < path.getLength() ; i++) {
bounds.extend(path.getAt(i));
}
}
return bounds;
}
}
几周前我遇到了类似的问题,但没有找到任何算法(也许没有)。
最后我找到了一个包含所需数据的 fusionTable(我也使用了 fusionTable 来存储边界,因此很容易合并表)。
也许您也可以这样做,快速搜索得到以下结果:https ://www.google.com/fusiontables/DataSource?docid=1VwApbjvZ--YKE6fRT_StuJ7jd2o0r2jLUmGwQnI
例如,对于 zip 81151,坐标位于更靠西的位置,也许这张桌子适合您的需要