在谷歌地图中正确定位邮政编码标签

时间:2013-02-04 15:35:11

标签: javascript google-maps google-maps-api-3 zipcode centroid

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

enter image description here

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

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

2 个答案:

答案 0 :(得分: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;
            }
        }

答案 1 :(得分:0)

几周前我遇到了类似的问题,并没有找到任何算法(可能没有任何算法)。

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

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

e.g。对于zip 81151,坐标位于西边,可能此表符合您的需求