巧用python 高德API mapinfo制作相对更精确的行政村图层

我们经常遇到这样的需求,就是需要统计各自行政区内行政村的基站覆盖情况,采用的方式主要是人工审核,找到行政村所在地后,查看附近的基站覆盖情况,得到覆盖基站信息。该方式优点为:获得的信息非常准确,但缺点也很明显,首先就是效率问题,当行政村数量急剧增加的时候,人工方式的效率就急剧下降。因此我们提出一种方法,在提升该项工作的效率,又能尽可能的确保准确性。

我们首先需要有一份行政村的信息的excel文件,只要有村名就可以了。

然后,我们去看看高德的API的接口信息:

uri:http://restapi.amap.com/v3/place/text?

参数信息:'key':'aac43f8467440a31e0838efb6d06a2a8',#高德API的KEY,

'keywords':village_name,#村名'city':'临安',#城市名称'citylimit':'true',#只查询本城市'offset':'50',#每页显示数量

'page':'1',#页数,如果POI信息多的话,后面还有2、3页,这里用于演示,只填写了1

简单解释下,其实可以输的参数很多,我这就简单的提取这些,这里特别说明的是:

keyword,这个参数的信息就来源于我们刚刚的那张网格清单表格

page,我这只填了1,offset我填了50,这样的话,实际上一个村最多的经纬度信息点,最多只有50个。实际操作时,应该做一个for循环,把page1后面的数据也循环获得。

我们可以用python,去构建一个POST的代码,POST的参数,村名去提取2015网格清单中的村名,其他参数可以就采用我刚刚写的这些内容。最终获得一个json格式的内容,我们用pandas去提取出,然后保存到excel。

defpost(self,village_name):

parameters = urllib.urlencode({'key':'aac43f8467440a31e0838efb6d06a2a8',

'keywords':village_name,

'city':'临安',

'citylimit':'true',

'offset':'50',

'page':'1',

})

postUrl =' http://restapi.amap.com/v3/place/text?'#POST地址result = urllib2.urlopen(postUrl,parameters)#模拟登录,并把cookie保存到变量

data = json.load(result)

df2 = pd.DataFrame(data['pois'],columns=['name','location'])

df2.insert(,'villagename',village_name)

returndf2

然后把POST获得的信息,通过pandas导出到excel。

defread_excel(self):

dat =map(self.post,self.df[u'村名'])

df = pd.concat(dat)

df.to_excel('ddd.xls')

最终我们获得了一份excel表格

其实这份表格,我们只需要村名和经纬度信息就足够了。到这里,尽可能多的经纬度点的事情,我们已经办到了。我们把这份表格稍微整理下,整理成这样的格式即可。

然后,我们把这份文件,导入到MAPINFO中去。

然后创建点,创建一个TAB图层,一个大致的图层就出现了。这步操作,熟悉mapinfo的人,应该都没有问题,具体操作过程就不再赘述。

接下来,我们利用mapinfo的泰森多边形功能,在table目录下面voronoi。这样我们就创建了一个泰森多边形,具体形态如下:其中我们要把这个村名信息存入这个多边形内,否则一会无法合并。

我们具体找其中一个地方再仔细看看

我们发现,有很多个块,其中标签是绍鲁村,每个点的中间划分了边界。

接下来我们要做的,就是把标签一样的多边形,合并成一个多边形。

这样我们就把村名一样的多边形合并成了一个多边形。

行政村的边界也就大致制作完成了。

通过这样的方法,我们知道:

1、首先,点越多,边界越准确。因此在获得经纬度信息时,我们要尽可能多的去POST高德API 2、对于市区,因为POI信息非常的多,因此在市区获得的行政村图层应该是比较准确的。3、图层可以用于快速的检索各行政村内的基站信息。

这个方法,我们巧妙的把图层准确性和POI信息做了结合,在POI信息足够多的情况下,可以有效的提升图层的准确性。通过高德API接口,解决了POI信息的获取问题。通过mapinfo的泰森多边形和图层合并的功能,解决了图层获得的问题。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181203G1GB0200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券