在谷歌地图API中设置邮政编码边界
Make Zip code boundaries in Google Map API
我看到了对类似问题的所有回答,但它们要么都是旧的,要么没有人回答。
我的任务是获得邮政编码,并在谷歌地图上向用户显示相应的边界,就像本例中一样。
我用Javascript编写这段代码,并使用Google Maps API。我希望用户输入一个邮政编码,并在他们的目的地上放置一个标记,该标记带有代表该邮政编码区域的边框。我看到谷歌地图目前的地图代码中有一些东西,如果有人在Maps.Google.com上输入邮政编码,就可以看到边界。我使用过多边形,但这无助于在某个邮政编码周围创建边界。
关于如何获得这个有什么建议吗?
提前感谢!
据我所知,这个问题没有一个简单的答案。但这里有一个如何做到这一点的高级设计
所有邮政编码的形状文件都可以在人口普查网站上找到,也可以从这个ftp服务器下载。然而,这是大量的数据,所以你需要一个地方来存储它。我建议使用带有PostGIS插件的PostgreSQL数据库。它是免费的、开源的,总体上很棒。它有一个实用程序,可以将.shp文件(人口普查形状文件中的类型)转换为PostGIS几何图形。PostGIS可以让您以KML的形式检索形状。
您可以a)在需要时从数据库中以KML的形式检索形状并将其显示在地图上,或者b)提前为每个邮政编码预生成一个KML文件并在需要时检索文件(这将占用相当大的空间)。
您需要熟悉GeoJSON格式的FeatureCollections。您可以使用OpenLayers(或者可能还有Google API)在任何一组地图瓦片上渲染它们
这可能看起来很难,但完全可以接近。
如果你四处搜索,你可以为Zipcode组购买GeoJSON文件。
D从这里下载形状文件https://catalog.data.gov/dataset/tiger-line-shapefile-2019-2010-nation-u-s-2010-census-5-digit-zip-code-tabulation-area-zcta5-na
使用GDAL简化
我们可以使用GDAL库中的ogr2ogr命令将shapefile转换为geojson,但即使只有一个字段和简单的坐标,输出文件也超过1GB。
ogr2ogr -f GeoJSON -select ZCTA5CE10 -lco COORDINATE_PRECISION=6 zcta.geojson /vsizip/tl_2017_us_zcta510.zip
我试图将其简化为topojson,但即使在功能强大的2017款MacBook Pro上,topojson库也无法实现。
npx topojson -q 1e4 -o zcta_topo.json zcta.geojson
>gt;JavaScript头内存不足
我尝试过的另一种方法是在ogr2ogr中使用-simplicate选项。simple自变量是基于shapefile的空间参考系统的度量单位。由于ZCTA的srs是WGS84,因此单位是lat/lon度量。
ogr2ogr -f "GeoJSON" -lco COORDINATE_PRECISION=6 -select ZCTA5CE10 -simplify 0.006 zcta.geojson /vsizip/tl_2017_us_zcta510.zip
这创建了一个小得多的GeoJSON文件(30MB),TopoJSON可以轻松处理,最终我们得到了一个更易于管理(但仍然太大)的13MB TopoJSON文件。此外,数据集的拓扑结构在中大型范围内非常差。
npx topojson -q 1e5 -o zcta_topo.json zcta.geojson
使用Postgis简化
创建一个用于持久性的docker卷docker卷创建postgresql
运行postgis docker
docker run --name postgis -p 25432:5432 -it --mount source=postgresql,target=/var/lib/postgresql kartoza/postgis
将zcta形状文件加载到postgis 中
ogr2ogr -f "PostgreSQL" -progress -select "ZCTA5CE10" -overwrite -lco OVERWRITE=yes -nln zcta -nlt PROMOTE_TO_MULTI -t_srs "EPSG:4326" PG:"dbname='gis' host='localhost' port='25432' user='docker' password='docker'" ~/Downloads/tl_2017_us_zcta510/tl_2017_us_zcta510.shp
带有strongimplifypreservetology的示例查询(新英格兰)。这对整个国家来说需要很长时间,我们仍然失去了很多拓扑结构。
select st_simplifypreservetopology(wkb_geometry, 0.025) as thegeom, zcta5ce10 from zcta where zcta5ce10 like '0%' OR zcta5ce10 like '1%'
使用Mapshaper简化(最佳解决方案)
Mapshaper库可以直接从shapefile输出TopoJSON,而不会出现JavaScript内存堆错误。这个命令创建了一个大约6MB的topojson文件,我们可以使用它。它还通过假设非常接近的垂直线和边应该重合来很好地保持拓扑。
npx -p mapshaper mapshaper-xl tl_2017_us_zcta510.shp snap -simplify 0.1% -filter-fields ZCTA5CE10 -rename-fields zip=ZCTA5CE10 -o format=topojson zcta_mapshaper.json
来源:https://github.com/elastic/ems-file-service/issues/6
- 上传带有XMLHttprequest的文件-多部分/表单数据中缺少边界
- 对于如何在没有modernizr的情况下用边界半径的功能检测检查来替换我的旧浏览器检查
- 仅在边界内时替换特定字符
- 将谷歌地图中的平移边界设置为图像覆盖
- 将边界设置为overlayImage谷歌地图
- 在谷歌api v3中使用地理自动完成功能获取邮政编码
- 为什么不是't这=>边界“;这个“;到周围的范围
- 获取以屏幕像素为单位的旋转SVG元素的边界
- RegEx:在单词边界添加加号
- 我如何才能获得Facebook在边界内的位置列表
- 精灵从pixi到p2的边界多边形
- 根据客户的地理位置、邮政编码和位置切换图像
- CSS 溢出边界半径鼠标事件
- 使用地图框 API 将邮政编码转换为纬度和经度
- jQuery根据鼠标位置计算DIV偏移量和边界
- 如何通过邮政编码确定美国县
- 世界的最大纬度和长边界 - 谷歌地图API LatLngBounds().
- 在谷歌地图API中设置邮政编码边界
- 有没有办法将 2 个或多个邮政编码边界添加在一起以形成领土
- Google Maps API:添加邮政编码边界