赞
踩
欢迎关注博主的微信公众号:“智能遥感”。
该公众号将为您奉上Python地学分析、爬虫、数据分析、Web开发、机器学习、深度学习等热门源代码。
Python的小伙伴们,你们好!上一节讲的是矢量数据重叠面积的解析应用,本节的应用主要建立缓冲区,来统计缓冲区内的矢量点的个数,希望对大家有所帮助。
本人的GitHub代码资料主页(持续更新中,多给Star,多Fork):
https://github.com/xbr2017
CSDN也在同步更新:
https://blog.csdn.net/XBR_2014
~~~~~~~~~~~~~~~~~~~~~~~~~~
编程环境:
操作系统:windows
Python版本:2.7
IDE版本:PyCharm 2018.2.4专业版
~~~~~~~~~~~~~~~~~~~~~~~~~~
分析地理特征时的另一个常见问题是确定它们彼此之间的距离。例如,住房刚需者在买房前很可能综合考虑多个候选小区到其周边学校、医院、超市、公交站等基础设施的实际距离。此时,本节的知识可能就会有助于购房者先进行空间分析,再作出买房的决定。
OGR包含两个测量工具:一个用于测量几何之间的距离,另一个用于创建缓冲多边形。缓冲区是一个多边形,它与原始几何体之间的距离延伸一定距离。
点、线、多边形缓冲区示意图
这里以美国有多少城市距离火山点15KM以内为例,下图是美国地区城市(灰色点)与火山(红色三角)分布图。
先将火山数据集缓冲15KM,由于整个图层上没有缓冲功能,因此需要单独缓冲每个火山点并将其添加到临时图层。完成后,可以将缓冲层与城市图层相交,以获得落在该15KM半径范围内的城市数量。最后输出符合要求的城市数量,具体实现代码如下:
- # _*_ coding: utf-8 _*_
- __author__ = 'xbr'
- __date__ = '2018/11/6 12:17'
-
- from osgeo import ogr
-
- shp_ds = ogr.Open(r'D:\osgeopy-data\US')
- volcano_lyr = shp_ds.GetLayer('us_volcanos_albers') # 火山矢量数据
- cities_lyr = shp_ds.GetLayer('cities_albers') # 城市矢量数据
- memory_driver = ogr.GetDriverByName('memory')
- memory_ds = memory_driver.CreateDataSource('temp')
- buff_lyr = memory_ds.CreateLayer('buffer') # 创建缓冲区
- buff_feat = ogr.Feature(buff_lyr.GetLayerDefn())
- for volcano_feat in volcano_lyr:
- buff_geom = volcano_feat.geometry().Buffer(15000) # 建立15KM的缓冲区
- tmp = buff_feat.SetGeometry(buff_geom)
- tmp = buff_lyr.CreateFeature(buff_feat)
-
- result_lyr = memory_ds.CreateLayer('result')
- # 将火山点与城市矢量进行重叠
- buff_lyr.Intersection (cities_lyr, result_lyr)
- # 统计15KM内城市的个数
- print('Cities: {}'.format(result_lyr.GetFeatureCount()))
可以分析出有72个城市距离火山点在15KM范围之内:
Cities: 72
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。