【问题标题】:Position zip code label correctly in google maps在谷歌地图中正确定位邮政编码标签
【发布时间】:2013-02-04 15:35:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你在使用 google.maps.LatLngBounds.getCenter() 吗?
  • 嗨,AJC。我刚刚在搜索我的查询时看到了这篇文章。您能否告诉我如何将这些邮政编码数字显示为绘制的邮政编码上的标签。谢谢

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


【解决方案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;
            }
        }

【讨论】:

  • 谢谢!这更像是我正在寻找的东西。只要我对一次计算的邮政编码数量进行限制,我就能构建一个更优雅的解决方案。
【解决方案2】:

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

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

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

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

【讨论】:

  • 谢谢,这看起来是个好主意。但是,如果您想在地图中显示所有邮政编码,这绝对是正确的路线,但是获取和维护该数据可能比一次计算几个邮政编码的位置更复杂。也许我应该澄清一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
相关资源
最近更新 更多