前言
不管是GIS空间分析、城市规划,还是地理数据的管理和统计,如何获取统计单元的边界,常常会困扰我们。调研的数据往往需要耗费大量的人力物力,而网上又很难找到公开的数据。其实许多互联网地图已经有了这些数据,本文朕将与爱卿们探讨从互联网地图中获取数据的一种思路。
- 谷歌浏览器中打开互联网地图(这里以百度地图为例),按键盘F12调出调试界面。
- 找到调试面板中的network这一选项,点击clear按钮,先清除所有监控。
- 在搜索框中搜索需要的获取的区域边界,如搜索“深圳大学”,在地图中会显示相应的区域,蓝色虚线边界的区域就是我们要获取的区域。
- 对network中的要素按type排序,找到所有xhr类型的文件。
- 在xhr文件中,有一项格式类似下图所示的文件,点击打开。
- 在右侧的preview栏中找到content底下有一个geo的属性,其中红框内的数据就是我们要获取的区域边界坐标(如果没有找到,尝试查看其他xhr文件)。
- 为了更好地处理这些坐标,先复制下来,观察它的特征,发现这一系列数字是将边界的xy依次列出,用逗号隔开的。为了方便处理,可以将格式整理为如下图所示的csv文件。(文末附有转换的python程序,仅供参考)
- 打开arcmap,添加刚刚生成的csv文件,右键,选择display XY Data。
- 在弹出的对话框中分别选择X与Y的字段与相应的坐标系(当前应选择米制坐标系)。
-
这样,就可以生成地块边界点图层了。下图所示为点图层转换为面图层需要用到的工具。
-
由于我们获取到的坐标采用的是BD09坐标,与常用的GPS坐标有偏差(如上图,深圳大学被偏移到了香港),需要将百度的坐标转换为GPS坐标。但是,百度并不会公开转换的算法,也不会提供相应的接口,这里提供一种转换思路,仅供参考。
百度坐标和GPS坐标转换在很近的距离时偏差非常接近, 通过计算就可以得到GPS的坐标。
假设有百度坐标:x1=116.397428,y1=39.90923,把这个坐标当成GPS坐标,通过坐标转换接口获得其百度坐标: x2=116.41004950566,y2=39.916979519873
通过计算就可以得到GPS的坐标:
x = 2x1-x2,y = 2y1-y2
x=116.38480649434001
y=39.901480480127
- 转换后再将得到的GPS坐标转为点和面,最终得到的shp图层如下图:
熟悉了流程之后,不管是小区、大厦、学校,还是行政区的边界,都可以轻松获取到,再也不会再为统计单元数据获取而愁了。本文仅提供一种思路,如果你有更好的方法,欢迎来骚扰朕。
附-转换格式python代码:
file_r = open('data/xy.txt', 'r')
file_w = open('result/result.csv', 'w')
first_line = file_r.readline()
xy_split = first_line.split(',')
file_w.write('x,y\n')
i=0
for xy in xy_split:
if i%2==0:
file_w.write(xy+',')
else:
file_w.write(xy + '\n')
i=i+1
file_r.close()
file_w.close()
网友评论