使用Fiona创建Shapefile矢量数据

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 使用Fiona写入Shapefile数据,主要是构建一个Schema,然后将空间对象转为GeoJSON的形式进行写入。这个Schema是一个字典结构,定义了Geometry的类型,属性字段的名称及其类型。

使用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 json

with 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)
目录
相关文章
|
定位技术
【gis】gdal 切分遥感 tif 格式图片
【gis】gdal 切分遥感 tif 格式图片
563 0
【gis】gdal 切分遥感 tif 格式图片
|
5月前
|
编解码
ENVI无缝镶嵌、拼接栅格数据的方法
【8月更文挑战第10天】使用ENVI进行无缝镶嵌的方法包括:准备具有一致空间参考的栅格数据;通过“File”菜单逐个加载数据;启动“Seamless Mosaic”工具;添加待镶嵌图像;调整几何校正、颜色平衡及羽化参数以平滑过渡;设定输出路径与格式;最后执行镶嵌并检查结果质量,必要时微调参数直至满意。
482 1
|
存储
ArcGIS:模型构建器内变量的数据类型中栅格图层和栅格数据集的区别
ArcGIS:模型构建器内变量的数据类型中栅格图层和栅格数据集的区别
125 0
|
8月前
|
定位技术
ArcGIS中ArcMap创建渔网Create Fishnet:生成指定大小的格网矢量文件
ArcGIS中ArcMap创建渔网Create Fishnet:生成指定大小的格网矢量文件
255 1
|
8月前
|
定位技术 Python
ArcGIS批量拼接大量栅格遥感影像:Mosaic工具
ArcGIS批量拼接大量栅格遥感影像:Mosaic工具
276 1
|
8月前
|
定位技术
ArcGIS中ArcMap创建镶嵌数据集、导入栅格图像文件并修改像元数值范围的方法
ArcGIS中ArcMap创建镶嵌数据集、导入栅格图像文件并修改像元数值范围的方法
115 1
|
8月前
|
编解码 数据可视化 定位技术
Python中gdal读取多波段HDF栅格遥感影像数据图层文件并依据像素绘制直方图
Python中gdal读取多波段HDF栅格遥感影像数据图层文件并依据像素绘制直方图
155 1
|
8月前
|
存储 定位技术 C++
C++中GDAL批量读取大量栅格遥感影像文件并生成各像元在不同文件中数值的时间序列数组
C++中GDAL批量读取大量栅格遥感影像文件并生成各像元在不同文件中数值的时间序列数组
119 1
|
8月前
|
定位技术 Python
Python中ArcPy基于矢量范围批量裁剪大量栅格遥感影像
Python中ArcPy基于矢量范围批量裁剪大量栅格遥感影像
190 1
|
8月前
|
存储 数据格式 Python
Python中arcpy栅格创建与遥感影像多景数据批量拼接Mosaic
Python中arcpy栅格创建与遥感影像多景数据批量拼接Mosaic
129 1