搞GIS的兄弟都知道,光看地图没意思,得拿到底层的矢量数据才能干活。这篇文不整虚的,直接告诉你怎么从OpenStreetMap这种地方把原数据扒下来,解决你找不到干净、完整GeoJSON或Shapefile的痛点。
咱们做这行十年了,见过太多新手在那儿对着官网发呆,或者花大价钱买那些过时的数据。其实,开源世界里最好的资源就在眼皮子底下,只是很多人没找对路子。今天就把压箱底的几个方法掏出来,让你以后下载数据不再求人。
先说最主流的OpenStreetMap,也就是OSM。很多人以为去官网点点就能下载,结果发现只能导个很小的区域,或者格式乱七八糟。其实,官方有个专门的下载器叫Overpass Turbo,这才是神器。你打开那个网页,别急着点那个大大的下载按钮。在左侧的查询框里,你得写点简单的代码。比如你想下载某个城市的道路数据,就输入out:json];way["highway";out; 这一行代码就能把北京所有的高等级道路都抓出来。点运行,右边地图就亮了,这时候再点导出,选JSON格式。这招特别适合需要特定筛选条件的场景,比直接下整个国家的数据包要灵活得多,而且速度飞快。
要是你嫌写代码麻烦,或者想要现成的Shapefile文件,那得去找那些第三方聚合平台。比如Geofabrik,这地方简直是地理数据界的仓库。它把全球数据按大洲、国家、甚至州省都切好了。你进去找到你需要的地区,直接点那个绿色的下载按钮,通常会有.osm.pbf这种压缩格式。别怕,这种格式虽然小,但用QGIS或者GDAL工具一转换,就能变成标准的Shapefile或者GeoJSON。这里有个小窍门,别总盯着最新的数据看,有时候官方源更新慢,第三方站点反而会有缓存好的稳定版本,适合做项目底图。
还有一种情况,你需要的是特定类型的POI,比如所有的学校、医院或者咖啡馆。这时候别去大平台大海捞针,直接用Overpass API的查询语句。虽然听起来高大上,其实逻辑很简单。你就告诉服务器,我要什么类型的节点,在什么范围内。比如我想拿上海市所有的星巴克,代码大概长这样:node"amenity"="cafe"]["name"~"Starbucks";out; 跑完这一句,你就能得到一堆精确的坐标点。这比去下载整个上海市的OSM数据再自己筛选要快上百倍,而且文件体积小,处理起来不卡顿。
最后提醒一句,下载回来的数据,千万别直接扔进生产环境。OSM的数据质量参差不齐,有些坐标可能偏移,有些属性是空的。下载后,一定要用QGIS打开检查一下拓扑关系,顺便做一下坐标系的转换。很多新手就是栽在这一步,以为下载完就万事大吉,结果画图的时候发现数据对不上,那才叫崩溃。
总之,geo数据库如何下载原数据,核心就在于别死磕官网首页,学会用API查询和第三方聚合站。掌握Overpass Turbo和Geofabrik这两个工具,基本能覆盖你90%的需求。数据是地理信息的血液,源头活水找对了,后面的分析建模才能顺风顺水。别在那儿干着急了,打开浏览器,按我说的步骤试一次,你会发现新世界。记住,数据不求人,自己动手丰衣足食。这行当,拼的就是谁手里的数据更准、更新、更全。希望这些干货能帮你省下不少找数据的时间,把精力花在真正的分析上。