Fiona简介及Shapefile数据读取

作者:阿振

修改时间:2018-06-06

声明:本文为博主原创文章,转载请注明原文出处

Fiona简介

用GDAL的Python绑定API书写程序有没有一种仍然在写C/C++的感觉,Fiona基于GDAL提供了更加Pythonic的读取空间矢量数据的API,参见:http://toblerity.org/fiona/index.html

这里主要说一下Fiona中对数据的描述模型和GDAL中的不同:

GDAL中对于矢量数据采用数据源(DataSource)- 图层(Layer)- 要素(Feature)- 属性和几何体(Attributes and Geometry)

Fiona采用Python中内置的数据结构表示矢量数据,一个要素以GeoJSON表示,使用Python内置的字典(dict)结构组织;一个图层包含在一个集合中(Collection)。可以对该集合进行迭代遍历,得到其中的要素。

要素是以GeoJSON表示的,结构如下:

{'type': 'Feature', 'id': '0', 'geometry': {'type': 'Polygon', 'coordinates': [[(96.416, 42.7588), (96.416, 42.7148), (95.9766, 42.4951), (96.0645, 42.3193), (96.2402, 42.2314), (95.9766, 41.9238), (95.2734, 41.6162), (95.1855, 41.792), (94.5703, 41.4844), (94.043, 41.0889), (93.8672, 40.6934), (93.0762, 40.6494), (92.6367, 39.6387), (92.373, 39.3311), (92.373, 39.1113), (92.373, 39.0234), (90.1758, 38.4961), (90.3516, 38.2324), (90.6152, 38.3203), (90.5273, 37.8369), (91.0547, 37.4414), (91.3184, 37.0898), (90.7031, 36.7822), (90.791, 36.6064), (91.0547, 36.5186), (91.0547, 36.0791), (90.8789, 36.0352), (90.0, 36.2549), (89.9121, 36.0791), (89.7363, 36.0791), (89.209, 36.2988), (88.7695, 36.3428), (88.5938, 36.4746), (87.3633, 36.4307), (86.2207, 36.167), (86.1328, 35.8594), (85.6055, 35.6836), (85.0781, 35.7275), (84.1992, 35.376), (83.1445, 35.4199), (82.8809, 35.6836), (82.4414, 35.7275), (82.002, 35.332), (81.6504, 35.2441), (80.4199, 35.4199), (80.2441, 35.2881), (80.332, 35.1563), (80.2441, 35.2002), (79.8926, 34.8047), (79.8047, 34.4971), (79.1016, 34.4531), (79.0137, 34.3213), (78.2227, 34.7168), (78.0469, 35.2441), (78.0469, 35.5078), (77.4316, 35.4639), (76.8164, 35.6396), (76.5527, 35.8594), (76.2012, 35.8154), (75.9375, 36.0352), (76.0254, 36.4746), (75.8496, 36.6943), (75.498, 36.7383), (75.4102, 36.958), (75.0586, 37.002), (74.8828, 36.9141), (74.7949, 37.0459), (74.5313, 37.0898), (74.5313, 37.2217), (74.8828, 37.2217), (75.1465, 37.4414), (74.8828, 37.5732), (74.9707, 37.749), (74.8828, 38.4521), (74.3555, 38.6719), (74.1797, 38.6719), (74.0918, 38.54), (73.8281, 38.584), (73.7402, 38.8477), (73.8281, 38.9795), (73.4766, 39.375), (73.916, 39.5068), (73.916, 39.6826), (73.8281, 39.7705), (74.0039, 40.0342), (74.8828, 40.3418), (74.7949, 40.5176), (75.2344, 40.4297), (75.5859, 40.6494), (75.7617, 40.2979), (76.377, 40.3857), (76.9043, 41.001), (77.6074, 41.001), (78.1348, 41.2207), (78.1348, 41.3965), (80.1563, 42.0557), (80.2441, 42.2754), (80.1563, 42.627), (80.2441, 42.8467), (80.5078, 42.8906), (80.4199, 43.0664), (80.7715, 43.1982), (80.4199, 44.165), (80.4199, 44.6045), (79.9805, 44.8242), (79.9805, 44.9561), (81.7383, 45.3955), (82.0898, 45.2197), (82.5293, 45.2197), (82.2656, 45.6592), (83.0566, 47.2412), (83.6719, 47.0215), (84.7266, 47.0215), (84.9023, 46.8896), (85.5176, 47.0654), (85.6934, 47.2852), (85.5176, 48.1201), (85.7813, 48.4277), (86.5723, 48.5596), (86.8359, 48.8232), (86.748, 48.9551), (86.8359, 49.1309), (87.8027, 49.1748), (87.8906, 48.999), (87.7148, 48.9111), (88.0664, 48.7354), (87.9785, 48.6035), (88.5059, 48.3838), (88.6816, 48.1641), (89.1211, 47.9883), (89.5605, 48.0322), (89.7363, 47.8564), (90.0879, 47.8564), (90.3516, 47.6807), (90.5273, 47.2412), (90.8789, 46.9775), (91.0547, 46.582), (90.8789, 46.3184), (91.0547, 46.0107), (90.7031, 45.7471), (90.7031, 45.5273), (90.8789, 45.2197), (91.582, 45.0879), (93.5156, 44.9561), (94.7461, 44.3408), (95.3613, 44.2969), (95.3613, 44.0332), (95.5371, 43.9014), (95.8887, 43.2422), (96.3281, 42.9346), (96.416, 42.7588)]]}, 'properties': OrderedDict([('Name', '新疆维吾尔自治区'), ('CenterX', 84.9023), ('CenterY', 42.148)])}

Shapefile数据读取

下面我们来体验一下Fiona的简洁之处,主要是使用Python内置的结构表示所有数据,所以使用Fiona操作空间数据就像操作Python内置的数据结构一样简单。

import fiona

with fiona.open('China.shp', encoding='utf-8') as c:

# 输出数据的基本信息

print(f'数据范围:{c.bounds}')

print(f'投影定义:{c.crs}')

print(f'数据格式:{c.driver}')

print(f'数据编码:{c.encoding}')

# 输出文件的属性字段信息

fields = c.schema['properties']

print('文件的属性字段信息:')

for k, v in fields.items():

print(f'{k} -> {v}')

# 遍历集合中的要素

# f是一个tuple,第一个元素是要素编号,第二个是dict格式的要素

for f in c.items():

# 输入要素的详细信息

# 要素是以GeoJSON表示的

print(f[1]['properties']['Name'])

特别需要注意数据的编码问题,要不然默认的编码会引起中文乱码,常见中文编码可能采用GBK或者UTF-8等。

输出结果如下:

数据范围:(73.4766, 18.1055, 135.0879, 53.5693)

投影定义:{'init': 'epsg:4326'}

数据格式:ESRI Shapefile

数据编码:utf-8

文件的属性字段信息:

Name -> str:24

CenterX -> float:24.15

CenterY -> float:24.15

新疆维吾尔自治区

西藏自治区

内蒙古自治区

青海省

四川省

黑龙江省

甘肃省

云南省

广西壮族自治区

湖南省

陕西省

广东省

吉林省

河北省

湖北省

贵州省

山东省

江西省

河南省

辽宁省

山西省

安徽省

福建省

浙江省

江苏省

重庆市

宁夏回族自治区

海南省

台湾省

北京市

天津市

上海市

香港特别行政区

澳门特别行政区

php解析shapefile,Fiona简介及Shapefile数据读取相关推荐

  1. 使用Fiddler解析WCF RIA Service传输的数据

    使用Fiddler 2 解析WCF RIA Service传输的数据,您需要安装一个PlugIn.下载解压后,放在Inspectors文件中.重新启动Fiddler,你就会看到WCF Binary的选 ...

  2. 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题

    文章标题:使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题 上下文:参考这篇文章:不使用任何框架,手写纯 JavaScript 实现上传本地文件到 A ...

  3. Beanshell解析json-解析简单复杂json数据

    Beanshell解析json-解析简单&复杂json数据 1.概述 如果在beanshell中解析json数据,那么这篇文章你get到了重点.不仅给出了解决方案,同时还理清了解决的思路. 2 ...

  4. 调用API接口 获取和解析 京东按关键字搜索商品数据

    这篇文章主要介绍了如何调用API接口 获取和解析京东按关键字搜索商品数据,帮助大家更好的理解和使用API接口. 点击测试 请求示例 <?php// 请求示例 url 默认请求参数已经URL编码处 ...

  5. btcd源码解析——peer节点之间的区块数据同步 (3) —— 非headersFirstMode模式

    文章目录 1. 写在前面 2. 非headersFirstMode模式下的数据同步过程 2.1 peer A 发送"获取区块哈希"的请求 2.2 peer B 响应"获取 ...

  6. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

    超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版 前言 1.基础环境和所需要的软件包 1.1服务器配置(仅供参考) 1.2 ...

  7. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

  8. swift:使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据

    在我的博客(下面)两个实验的基础上,使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据,参照视频实现的"天气信息"小实验 1 创 ...

  9. 德国海曼HTPA 32x32d热成像传感器代替MLX90640之EEPROM数据读取和解析

    EEPROM数据读取和解析 上一篇我们简单介绍了热成像传感器德国海曼的HTPA 32x32d,本文主要进一步介绍内部EEPROM数据读取和解析. 存储结构一览 首先,很简单的IIC总线协议写好,调试好 ...

  10. 手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现)

    手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现) 1. K-MEANS的基本原理 2. 数据预处理 2.1 数据读取:from Excel 2.2 数据预处理:标准化Z ...

最新文章

  1. 2021年6月程序员平均工资 15052,你给行业拖后腿了吗?
  2. Codeforces Round #272 (Div. 2)
  3. 动态生成CheckBox(Winform程序)
  4. [VS2005]一个简单的CodeSnippet —— 生成类的构造函数。
  5. VSCode 更新后打不开之解决办法
  6. 华为epg-sms 多cp_Linux桌面上的SMS,Linux 25岁生日以及更多开源新闻
  7. Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001
  8. Git系列一之安装管理
  9. extern 的使用方法介绍
  10. 颜色名称及色样表(HTML版)
  11. matlab进行预测误差过大,神经网络预测误差太大怎么办,如何看预测结果
  12. 如何建立个人网站?先分享一下
  13. python读取配置文件列表失败_从配置文件python中读取列表
  14. 【讲座】清华刘知远:自然语言理解难在哪儿?
  15. Win7 共享打印机脱机解决
  16. 为什么计算机屏幕出现黄色,电脑为什么会出现显示器屏幕发黄
  17. SystemUI之NavigationBar导航栏
  18. axios 美[æk‘sioʊz]
  19. C语言程序设计#成绩查询系统
  20. ae打开模板显示不出来_为什么套用的AE模板打开之后没有错误提示却还是有問題?...

热门文章

  1. Xshell7安装教程
  2. imei服务器清除id_苹果绕过ID解锁
  3. python机器人仿真软件_【RoboDK官方版下载】RoboDK(机器人仿真软件) v4.2.3 官方版-开心电玩...
  4. c语言实现万年历程序
  5. fxp连接失败_用FlashFXP时总是连接失败(连接丢失)是什么原因
  6. 汇编语言程序vs. 汇编程序
  7. 书评:我看《软件开发沉思录ThoughtWorks文集》
  8. 吊炸天!74款APP完整源码!
  9. Avalondock 第四步 边缘停靠
  10. ITIL规范(持续更新)