1

我正在谷歌地图中绘制一个邮政编码区域列表,并且我正在尝试在该区域上写一个带有邮政编码的标签。我可以做到这一点,除了我使用区域的质心来定位标签,但有些区域的形状不规则,质心落在区域本身之外。这是我的意思的一个例子:

在此处输入图像描述

观看邮政编码 81151,它如何显示在邮政编码 81123 的区域顶部,而不是显示在他自己的区域顶部。

有谁知道更好的算法将邮政编码正确定位在不规则区域的顶部,而不是使用该区域的质心?

4

2 回答 2

1

您可以使用 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;
            }
        }
于 2013-02-06T15:18:44.100 回答
0

几周前我遇到了类似的问题,但没有找到任何算法(也许没有)。

最后我找到了一个包含所需数据的 fusionTable(我也使用了 fusionTable 来存储边界,因此很容易合并表)。

也许您也可以这样做,快速搜索得到以下结果:https ://www.google.com/fusiontables/DataSource?docid=1VwApbjvZ--YKE6fRT_StuJ7jd2o0r2jLUmGwQnI

例如,对于 zip 81151,坐标位于更靠西的位置,也许这​​张桌子适合您的需要

于 2013-02-04T23:22:43.380 回答