文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python shapefile转GeoJson的方法有哪些

2023-07-05 09:56

关注

这篇文章主要介绍“Python shapefile转GeoJson的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python shapefile转GeoJson的方法有哪些”文章能帮助大家解决问题。

GeoJson的简要介绍

GeoJson是用json的语法表达和存储地理数据,可以说是json的子集。

GeoJson以键值对的形式保存原有对象的信息,具有轻量化、易解析等优点。

GeoJson包括的地理要素有Point(点)、 MultiPoint(多点)、 LineString(线)、MultiLineString(多线)、 Polygon(面)、 MultiPolygon(多面)、 GeometryCollection(几何集合)

这些地理要素包括在geometry的type属性中,并且不同的type具有不同的coordinates值。

     {         "type": "MultiPoint",         "coordinates": [             [100.0, 0.0],             [101.0, 1.0]         ]     }       {         "type": "MultiPolygon",         "coordinates": [             [                 [                     [102.0, 2.0],                     [103.0, 2.0],                     [103.0, 3.0],                     [102.0, 3.0],                     [102.0, 2.0]                 ]             ],             [                 [                     [100.0, 0.0],                     [101.0, 0.0],                     [101.0, 1.0],                     [100.0, 1.0],                     [100.0, 0.0]                 ],                 [                     [100.2, 0.2],                     [100.2, 0.8],                     [100.8, 0.8],                     [100.8, 0.2],                     [100.2, 0.2]                 ]             ]         ]     }

两种将shapefile文件转换为GeoJson的方式

1. 使用geopandas

核心代码:geopandas.GeoSeries 和out_data.to_file

import geopandas as gpd def shp2geojson_gpd(shp_file, geojson_file):    """    将shapefile格式的文件转化为geojson    :param shp_file: 需要转换的shapefile文件名,投影信息可以缺失,也可以指定    :param geojson_file: 转换输出的geojson文件名    """     if os.path.exists(geojson_file):        os.remove(geojson_file)     out_data = gpd.read_file(shp_file)    crs = out_data.crs    out_data = gpd.GeoSeries(out_data.geometry, crs=crs)    out_data.to_file(geojson_file, driver='GeoJSON', encoding="utf-8")    print("successfully convert shapefile to geojson")

使用geopandas转换的时候两行核心代码即可搞定,简单粗暴。但是在实践过程中发现,采用geopandas转换后的GeoJson文件并没有保留shapefile中的属性properities信息,如area, name等,如下图所示:

Python shapefile转GeoJson的方法有哪些

2. 使用gdal

import gdal import ogrimport os def shp2geojson_gdal(shp_file, geojson_file):    gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")    gdal.SetConfigOption("SHAPE_ENCODING", "GBK")    src_ds = ogr.Open(shp_file)    src_layer = src_ds.GetLayer(0)     # 创建结果Geojson    baseName = os.path.basename(geojson_file)    dst_driver = ogr.GetDriverByName('GeoJSON')    dst_ds = dst_driver.CreateDataSource(geojson_file)    if dst_ds.GetLayer(baseName):        dst_ds.DeleteLayer(baseName)    dst_layer = dst_ds.CreateLayer(baseName, src_layer.GetSpatialRef())    dst_layer.CreateFields(src_layer.schema)    dst_feat = ogr.Feature(dst_layer.GetLayerDefn())     # 生成结果文件    for feature in src_layer:        dst_feat.SetGeometry(feature.geometry())        for j in range(feature.GetFieldCount()):            dst_feat.SetField(j, feature.GetField(j))        dst_layer.CreateFeature(dst_feat)     del dst_ds    del src_ds    print("successfully convert shapefile to geojson")

结果包含原始shapefile文件中的属性信息:

Python shapefile转GeoJson的方法有哪些

关于“Python shapefile转GeoJson的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯