Python地图栅格化实例
Python地图栅格化实例
引言
shapefile是GIS中的一种非常重要的数据类型,由ESRI开发的空间数据开放格式,目前该数据格式已经成为了GIS领域的开放标准。目前绝大多数开源以及收费的GIS软件都支持该数据类型。事实上,shapefile文件指的一种文件存储的方法,实际上该种文件是由多个文件组成的。组成一个shapefile有三种文件必不可少, '.shp','.shx','.dbf'文件。
geopandas对shapefile提供了很好的读取与写出支持。geopandas库允许对几何类型进行空间操作,其中DataFrame结构相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,使得python中操作地理数据更加方便。本实例通过geopandas实现对地理数据的操作。
开发准备
由于geopandas库的安装需要一些前提库,因此需要先安装一些库
pip install pipwin
pipwin install gdal
pipwin install fiona
pip install geopandas
实测以上方法可以成功在windows下安装(注:如果在Anaconda下安装geopandas更为方便)
数据准备
该数据是一段GPS扫描数据,包含经纬度。
代码实例
环境引入
import geopandas as gp
import matplotlib.pyplot as plt
from shapely import geometry
import math
GPS数据处理
lake_original_path = 'data.txt'
lake_original_data = ''
lake_points = []
# 读取文件
with open(lake_original_path) as f:
lake_original_data = f.read()
# 处理经纬度坐标 并以Point的形式添加到list中
for xy in lake_original_data.split(';'):
x, _, y = xy.partition(',')
x = float(x.strip()) / 100
y = float(y.strip()) / 100
lake_points.append(geometry.Point(y, x))
创建要素
# 创建线状要素
lake_line = geometry.LineString(lake_points)
# crs指定坐标系
lake_ = gp.GeoSeries(lake_line, crs='EPSG:4326')
# 保存shp文件
lake_.to_file("boundary.shp", driver='ESRI Shapefile', encoding='utf-8')
# 记录边界条件 用于构建栅格
x_min, y_min, x_max, y_max = lake_line.bounds[:4]
# 绘图
lake_.plot()
plt.show()

构建栅格
# 栅格大小
GRID_WIDTH = 0.009 * 2 / 100
grid_rows_num = int(math.ceil((y_max - y_min) / float(GRID_WIDTH)))
grid_columns_num = int(math.ceil((x_max - x_min) / float(GRID_WIDTH)))
grids = []
for r in range(grid_rows_num):
for c in range(grid_columns_num):
grid_4coords = []
# 左上角
x_lt = x_min + c * GRID_WIDTH
y_lt = y_max - r * GRID_WIDTH
# 右上角
x_rt = x_lt + GRID_WIDTH
y_rt = y_lt
# 左下角
x_lb = x_lt
y_lb = y_lt - GRID_WIDTH
# 右下角
x_rb = x_rt
y_rb = y_lb
# 两个三角形拼接一个栅格
grid_4coords.append(geometry.Point(x_lt,y_lt))
grid_4coords.append(geometry.Point(x_rt,y_rt))
grid_4coords.append(geometry.Point(x_rb,y_rb))
grid_4coords.append(geometry.Point(x_lb,y_lb))
grid_4coords.append(geometry.Point(x_lt,y_lt))
# 创建一个网格
grids.append(geometry.LineString(grid_4coords))
grid_ = gp.GeoSeries(grids)
grid_.to_file('E:\\just\\海韵湖智能技术实验场\\data\\grids.shp',driver='ESRI Shapefile', encoding='utf-8')
grid_.plot()
plt.show()

要素叠加
# 要素叠加
elements = [lake_line]
elements += grids
elements_ = gp.GeoSeries(elements)
elements_.to_file('elements.shp', driver='ESRI Shapefile', encoding='utf-8')
elements_.plot()
plt.show()

参考链接
python-geopandas读取、创建shapefile文件、geopandas学习教程
Python地图栅格化实例的更多相关文章
- android定位和地图开发实例
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便. 首先介绍一下地图包中的主要类: MapController : 主要控制地图移动,伸缩,以某个GPS坐标 ...
- python 类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- Python 解析XML实例(xml.sax)
已知movies.xml <collection shelf="New Arrivals"> <movie title="Enemy Behind&qu ...
- Python操作Mysql实例代码教程在线版(查询手册)_python
实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding ...
- python连接mysql实例分享_python
示例一 #coding=UTF-8 import sys import MySQLdb import time reload(sys) sys.setdefaultencoding('utf-8') ...
- 4. python 修改字符串实例总结
4. python 修改字符串实例总结 我们知道python里面字符串是不可原处直接修改的,为了是原来的字符串修改过来,我们有一下方法: 1.分片和合并 >>> a='abcde' ...
- python类和实例以及__call__/__del__
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- 进程,线程,以及Python的多进程实例
什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...
随机推荐
- 膜 社论(egg drop)
题面 \(n\) 楼 \(m\) 个鸡蛋,从 \(k\) 楼及以上扔下去会碎,不能再测试 . 问至少需要扔几次确定 \(k\) . \(n\le 10^{18}\),\(m\le 64\) . 题解 ...
- NFS 服务器配置(Ubuntu)
# NFS 服务器配置(Ubuntu 20.0) # 1.配置网络环境 # NFS 的客户端和服务端必须在同一局域网 # 2.在服务器上安装nfs sudo apt-get install nfs-c ...
- EPLAN 中的符号、元件、部件与设备之间的区别
符号(Symbol):电气符号是电器设备(Electrical equipment)的一种图形表达,符号存放在符号库中,是广大电气工程师之间的交流语言,用来传递系统控制的设计思维的.将设计思维体现出来 ...
- Java中list集合自定义排序-2022新项目
一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...
- 前端React项目遇到【Uncaught SyntaxError: Unexpected token '<'】错误的解决方式
问题描述 前端部署好项目后,打开相应的页面显示一片空白,打开console显示 问题排查思路 理解问题的本质 出现这个错误的原因是浏览器期望得到js文件,但页面却返回了html文件,如图中的js文件点 ...
- ASP.Net Core异步编程
ASP.Net Core异步编程 概念 什么是异步编程? 异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且在工作单元运行结束后,会通知主应用程序线 ...
- React报错之React hook 'useState' cannot be called in a class component
正文从这开始~ 总览 当我们尝试在类组件中使用useState 钩子时,会产生"React hook 'useState' cannot be called in a class compo ...
- Queue-jumpers - 平衡树
题面 Ponyo and Garfield are waiting outside the box-office for their favorite movie. Because queuing i ...
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...
- Linux的OpenLava配置
OpenLava OpenLava是基于LSF早期的开源版本发展而来,其免费.开源.兼容IBM LSF的工作负载调度器.当你需要执行某项业务时候(比如跑渲染之类的),当有服务器处于空闲状态时候,可以直 ...