本文讲讲如何在高德获取地铁数据及后期处理,以北京为例。
打开高德地铁,按下F12打开调试模式,切换到network面板,如下:
点击右键,“Open in new tab”,在新窗口中打开。
将页面另存为json数据格式。
将拿到的数据写代码转换成两个geojson数据,一个是站点数据,一个线路数据。
$.get('data/subway.json', function (res) { var geojson = { 'type': 'FeatureCollection', 'features': [] }; res = res['l']; var stations = {}; for (var i = 0; i < res.length; i++) { const r = res[i]; var kn = r['kn']; var ln = r['ln']; var cl = r['cl']; var ls = r['ls']; var st = r['st']; var lineInfo = { kn: kn, ln: ln, cl: cl, ls: ls }; for (let j = 0; j < st.length; j++) { var s = st[j]; // 站点去重 if(!stations[s['poiid']]) { stations[s['poiid']] = true; var coords= s.sl.split(',').map(Number); var properties = Object.assign(s, lineInfo); geojson.features.push({ type: 'Feature', geometry: { type: 'Point', coordinates: coords }, properties: properties }); } } } console.log(JSON.stringify(geojson)); })
$.get('data/subway.json', function (res) { var geojson = { 'type': 'FeatureCollection', 'features': [] }; res = res['l']; for (var i = 0; i < res.length; i++) { const r = res[i]; var st = r['st']; var coords = []; for (let j = 0; j < st.length; j++) { var s = st[j]; var _coords= s.sl.split(',').map(Number); coords.push(_coords); } geojson.features.push({ type: 'Feature', geometry: { type: 'Point', coordinates: coords }, properties: r }); } console.log(JSON.stringify(geojson)); })
将浏览器console输出的内容拷贝下来,粘贴到一个文本里面,另存为geojson或者json均可。用QGIS打开并做简单的符号化即可得到如下效果。
同时我们将高德的切片地图加进来,将数据的正确性进行验证。从图上来看数据还是比较准确的。
将站点和线路数据导出为shp。根据点连成的线不是很圆滑,我们在arcgis里面做一下平滑处理,在toolbox工具箱中找到Smooth Line工具,Smoothing Algorithm选择BEZIER_INTERPOLATION。
进行平滑处理后的数据,以及原数据的对比如下:
对处理后的线路和站点数据进行简单的配图,一副地铁图就OK了。
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句