【问题标题】:Zip Code Boundaries Using Google Maps Api使用 Google Maps Api 的邮政编码边界
【发布时间】:2014-06-11 09:41:45
【问题描述】:

我需要像这样显示带有邮政编码边界的谷歌地图

http://maps.huge.info/zip.htm

也许我忽略了它,但我还没有在 Google Maps API 文档中找到这方面的示例和专门讨论此内容的文档。我正在尝试在上面的网页链接上查看源代码,但对我来说它是如何工作的似乎并不明显。页面上还有其他东西,我不知道它是否是我需要的一部分。

一些简单的代码示例会很有帮助!谢谢!

【问题讨论】:

    标签: google-maps-api-3


    【解决方案1】:

    如果还有人在这里寻找解决方案,那就是我如何设法划定界限。

    1. http://www2.census.gov/geo/tiger/TIGER2014/ZCTA5/tl_2014_us_zcta510.zip 下载 zip 文件(大约 500mb)
    2. 解压,你需要解压后的shp文件
    3. 在 Windows 上,您需要安装 QGIS,才能获得 ogr2ogr 实用程序
    4. 运行命令从shp文件中获取geoJSON文件:

      ogr2ogr -f "GeoJSON" -lco COORDINATE_PRECISION=4 -simplify 0.00010 zipRegions.json tl_2014_us_zcta510.shp

      您可以使用简化来删除多余的点并压缩数据

    5. 在 cartodb 上创建免费帐户
    6. 在那里上传 zipRegions.json 文件
    7. 现在使用 cartodb.js 文件,您可以轻松地在谷歌地图上绘制邮政编码区域

    只需这样的代码

    var mapOptions = {
                zoom: 12,
                center: new google.maps.LatLng(42.1038846,-72.5868353),
                mapTypeId: google.maps.MapTypeId.ROADMAP
              };
              map = new google.maps.Map(document.getElementById('map'),  mapOptions);
    
                cartodb.createLayer(map, {
                   user_name: 'your_user_name',
                    type: 'cartodb',
                  sublayers: [
                    {
                        sql: "SELECT * FROM cartodb1",
                        cartocss: '#cartodb1 {polygon-fill: #7bd490;polygon-opacity: 0.7;line-color: #6da57a;line-width: 0.5;line-opacity: 1;}'
                    }
                ]})
                .addTo(map, 0) // add the layer to our map which already contains 1 sublayer
                .done(function(layer) {
                    console.log('Fine');
                })
                .error(function(e) {
                    console.log(e);
                }); 
    

    【讨论】:

    • 请注意,在该 github 链接中,您指向的是 2010 年人口普查的链接,而上面的是 2014 年人口普查的链接。
    【解决方案2】:

    Google Maps API 不会向您提供这些数据。你需要一个外部资源。 Fusion Table 可能会有所帮助。您可以查看this one

    然后,您需要根据表中的 KML 数据创建自己的图层。有documentation关于它。

    您可以直接从 Fusion Table 渲染数据或将其导入到您自己的数据库中,这通常更适合性能。

    希望这有助于您入门。尝试找到自己的方式,如果遇到困难,请提出另一个问题,并按照第一条评论的建议向我们展示您的代码。

    【讨论】:

    • 绘制边界后,我们可以在该边界上绘制多边形和标记
    • 当我说 从 KML 创建您自己的图层 时,它正在为给定的边界创建多边形。您对标记有什么疑问?
    • 哦,这意味着我们使用多边形显示边界,我们不能在另一个多边形中绘制一个多边形??
    • 我不知道你想要达到什么目的。是的,您可以使用多边形绘制边界。现在为什么你需要另一个多边形?不知道。但如果你需要,你可以。
    • 是的,您可以,但请记住:如果您需要在地图上添加标记点击多边形,您将需要禁用多边形点击事件。你不能同时拥有两者。不过,在多边形上动态添加标记不是问题。
    【解决方案3】:

    做同样的事情,发现边界 io 对我们的用例来说太昂贵了。

    查看https://www.maptechnica.com/

    • 更大的数据集
    • 更实惠

    【讨论】:

    • 不幸关闭了
    【解决方案4】:

    我将 2016 年人口普查 kml 文件(超过 150MB)解析为超过 32,000 个单独的 kml 文件,您可以将其用作地图的 kml 图层。 我在这里放了一个 zip 文件: https://github.com/tomeralmog/zipcode-kml 希望这会有所帮助

    【讨论】:

      【解决方案5】:

      此查询存在一个非常简单的 API,按邮政编码、城市等...返回 geoJson

      http://www.boundaries-io.com

      GooleMap 中的结果图片:

      【讨论】:

      【解决方案6】:

      我知道这是一个相对古老的问题,@tomer-almog 在制作 KML 文件方面做了一些出色的工作,但我偶然发现了这个免费资源(没有关系,只是使用数据),它包含各种地理格式的邮政编码数据(GeoJSON、KML 等)

      https://public.opendatasoft.com/explore/dataset/us-zip-code-latitude-and-longitude/table/

      可能对某人有用....

      【讨论】:

        猜你喜欢
        • 2018-01-03
        • 2011-11-28
        • 2022-12-01
        • 2012-07-13
        • 2012-09-28
        • 2017-02-15
        • 2011-05-19
        • 2011-07-31
        • 2013-04-08
        相关资源
        最近更新 更多