使用Fiona创建Shapefile矢量数据

作者:阿振 邮箱:tanzhenyugis@163.com

博客:https://blog.csdn.net/theonegis/article/details/80089375

修改时间:2018-06-10

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


基本思路

使用Fiona写入Shapefile数据,主要是构建一个Schema,然后将空间对象转为GeoJSON的形式进行写入。

这个Schema是一个字典结构,定义了Geometry的类型,属性字段的名称及其类型。

代码实现

这里我们举两个例子进行说明:第一是将GeoJSON数据转为Shapefile,第二个是新建一个Shapefile,然后再里面写入自定义的空间几何数据。

因为从GeoJSON中读入的数据本身就是JSON格式,所以我们可以直接写入。GeoJSON的格式定义,参见:创建Shapefile文件并写入数据。

import fiona
import jsonwith open('China.json') as f:data = json.load(f)# schema是一个字典结构,指定了geometry及其它属性结构
schema = {'geometry': 'Polygon','properties': {'id': 'int', 'name': 'str'}}# 使用fiona.open方法打开文件,写入数据
with fiona.open('Provinces.shp', mode='w', driver='ESRI Shapefile',schema=schema, crs='EPSG:4326', encoding='utf-8') as layer:# 依次遍历GeoJSON中的空间对象for feature in data['features']:# 从GeoJSON中读取JSON格式的geometry和properties的记录element = {'geometry': feature['geometry'],'properties': {'id': feature['properties']['id'],'name': feature['properties']['name']}}# 写入文件layer.write(element)

第二种方法使用shapely包创建Geometry对象,然后利用mapping方法将创建的对象转为GeoJSON格式进行写入。

Shapely包提供了对空间几何体的定义,操作等功能。

import fiona
from shapely.geometry import Polygon, mapping# schema是一个字典结构,指定了geometry及其它属性结构
schema = {'geometry': 'Polygon','properties': {'id': 'int', 'name': 'str'}}# 使用fiona.open方法打开文件,写入数据
with fiona.open('Beijing.shp', mode='w', driver='ESRI Shapefile',schema=schema, crs='EPSG:4326', encoding='utf-8') as layer:# 使用shapely创建空间几何对象coordinates = [[117.4219, 40.21], [117.334, 40.1221], [117.2461, 40.0781], [116.8066, 39.9902], [116.8945, 39.8145],[116.8945, 39.6826], [116.8066, 39.5947], [116.543, 39.5947], [116.3672, 39.4629],[116.1914, 39.5947], [115.752, 39.5068], [115.4883, 39.6387], [115.4004, 39.9463],[115.9277, 40.2539], [115.752, 40.5615], [116.1035, 40.6055], [116.1914, 40.7813],[116.4551, 40.7813], [116.3672, 40.9131], [116.6309, 41.0449], [116.9824, 40.6934],[117.4219, 40.6494], [117.2461, 40.5176], [117.4219, 40.21]]polygon = Polygon(coordinates)  # 使用地理坐标定义Polygon对象polygon = mapping(polygon)  # 将Polygon对象转为GeoJSON格式feature = {'geometry': polygon,'properties': {'id': 1, 'name': '北京市'}}# 写入文件layer.write(feature)

使用Fiona创建Shapefile矢量数据相关推荐

  1. PostgreSQL:创建空间数据库并导入Shapefile矢量数据

    目录 1.前言 2.创建空间数据库 3.导入Shapefile矢量数据 3.1.从文件夹中导入 3.2.从SQL表中导入 1.前言 注意:不建议将栅格数据导入到空间数据库中.因为相对于矢量数据,栅格数 ...

  2. WKT创建shapefile、shapefile输出WKT

    Python利用WKT创建shapefile.shapefile输出WKT 最近在做一个网格化管理系统时,本准备使用PostgreSQL数据库来存储网格WKT数据(方便直接导出shp文件,定期发布地图 ...

  3. 9_OGR创建Shapefile

    OGR创建Shapefile # -*- coding: utf-8 -*- # 学习时间: 2022/11/7 17:20__author__ = 'He XK'import os from osg ...

  4. Houdini HDK 读取shapefile矢量数据 02

    下一篇 Houdini HDK 读取shapefile矢量数据 03 效果展示 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ openstreetmap的同一城市数据,挤压后效果 ↑↑↑↑↑↑↑↑↑↑ ...

  5. (十)Shapefile文件创建——创建Shapefile和dBASE

    (十) Shapefile文件创建--创建Shapefile和dBASE ArcCatalog 可以创建新的 Shapefile 和 dBASE表,并可进行属性项及索引的操作定义 Shapefile ...

  6. 使用gdal的ogr创建shapefile文件(c++)

    1.ogr 使用ogr库创建点状要素的shapefile文件以及将经纬度坐标转为投影坐标.实例如下: #include "ogrsf_frmts.h" #include " ...

  7. 【ArcGIS遇上Python】ArcGIS Python获取Shapefile矢量数据字段名称

    借助PyCharm环境,在不打开ArcGIS的情况下,编写Python代码,获取矢量数据的所有字段. import arcpyshp = 'C:\data\out\Export_Output.shp' ...

  8. Houdini HDK 读取shapefile矢量数据 02.5

    后续不更了 要做个复杂的东西 汇总更新日志 默认读取 layer 0 ,也就是只读取第0个图层,目前测试的所有shp没有发现明显问题 点.线.面,均能读取属性 只支持读取单个shp,多个shp_imp ...

  9. GeoTools:Shapefile创建

    在上一篇文章<GeoTools:Feature&Shapefile之CRUD操作>中,介绍了基于GeoTools的Shapefile文件CRUD基本操作,那么,能否使用GeoToo ...

  10. Python——使用OGR操作矢量数据

    OGR库是GDAL的一个分支 获取Shapefile信息 >>> from osgeo import ogr >>> datasource=ogr.Open(&qu ...

最新文章

  1. 让vim不要自动添加新的注释行
  2. AI、ML 和数据工程 | InfoQ 趋势报告(2021 年)
  3. 简历英文 计算机水平,计算机英文 简历
  4. [转载]通过Arcgis Server向MXD中添加图层
  5. 常用Smarty变量操作符
  6. 不常见正则表达式总结
  7. hbase1.1.1 连接集群_hbase1.2.3集群搭建
  8. ZOJ4104 Sequence in the Pocket
  9. 【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?
  10. 2008年国外最佳Web设计/开发技巧、脚本及资源总结
  11. 扫描软件(to be followed)
  12. ML--HMM(隐马尔可夫模型及python的实现1)
  13. 通过51单片机开发板USB转TTL模块烧录ESP8266-01固件
  14. linux访问mdio接口函数,MII 接口解析(三)GPIO 模拟 MDIO 接口使用代码
  15. 自然语言处理,计算机与人类“谈心”的关键
  16. 玻璃盖板丝印质量及尺寸在线检测方案
  17. RAID技术分类介绍
  18. matlab生成s加减速曲线,一种基于移动平均算法的S曲线加减速控制方法与流程
  19. linux数字音频播放器,Moode Audio Player数字音频播放系统的体验
  20. [洛谷]P3374 【模板】树状数组 1 (#树状数组)

热门文章

  1. java区间并集_区间并集求解算法实现
  2. php面试兴趣爱好,简历中的兴趣爱好该怎么写?
  3. Android自定义进度条拖动,Android之ProgressBar(进度条)和SeekBar(拖动条)
  4. 数字逻辑电路设计课程设计
  5. 解决Matplotlib中Times New Roman字体无法改变字体
  6. 1月16日云栖精选夜读 | 阿里P8架构师谈:Zookeeper的原理和架构设计,以及应用场景...
  7. Groupon新变种 LevelUp:折价券
  8. 黑天鹅mobi_破坏我们系统的因素:黑天鹅分类法
  9. faker假数据php,php faker 伪造数据
  10. ebay增强可用性的4个原则