找回密码
 会员注册
查看: 35|回复: 0

Shp与GeoJSON数据相互转换(2024.7.15)

[复制链接]

8

主题

0

回帖

25

积分

新手上路

积分
25
发表于 2024-9-10 09:59:21 | 显示全部楼层 |阅读模式
Shp与GeoJSON数据转换学习2024.7.15引言1、简介1.1Shp1.1.1示例数据1.2GeoJSON1.2.1示例数据2、转换原理3、具体实现3.1在线转换(联网方便但不推荐使用)3.1.1mapshaper(Shp与GeoJSON互转)3.1.2MapJS(Shp与GeoJSON互转)3.1.3geojson.io(GeoJSON转Shp——暂不可用)3.2本地转换(安全灵活自主定制可控)3.2.1离线版mapshaper(Shp与GeoJSON互转)3.2.2Python(Shp转GeoJSON)3.2.3本地GeoServer(Shp转GeoJSON)4、小结引言        在实际的科研、工作和学习中,大家可能会面临数据转换的问题,之所以存在这样一个问题,是因为不同的数据格式在应对不同场景和需求时具有它自身的独特性及优势,比如有的数据格式占用空间少,利于网络传输;有的数据进行了二进制加密,定义自己的特殊格式,将结果封装为产品为客户提供,安全性较高;有的数据便于解析、分析和查看,方便调试和学习研究;有的数据则兼顾不同平台使用,考虑软件使用生态,拥抱开源,促进人类交流进步。        正所谓,学问有远近,术业有专攻,很多时候人们往往更加关注结果,并不特别在意中间的实现过程,总是觉得许多东西的产生或者由来是理所当然的,殊不知前人花费了多少时间和精力,苦苦思索,总结凝练,重复实验,才有了如今的一系列理论、科学和技术成果,其中充满了智慧的结晶,彰显了真理的光芒,并非后人一言一语、不假思索所能评价和质疑。1、简介        在空间信息领域,海量的点、线、面数据经由外业人员利用高精设备采集、传输、内业处理、入库、质检和成果交付,最终得以保存,这些数据大多带有空间参考(地理位置),可以反映特定时空条件下某些区域所处的真实状态,如位置数据、地物要素数据、地表形变沉降数据、重力场监测数据等等。这些数据往往会以特定的数据格式(.dat、.csv、.txt、.xyz等)进行保存,其中地理信息领域较为知名且极具代表性的的数据格式当属ShapeFile和GeoJSON,这两类数据在表达属性数据和几何数据方面十分灵活,备受行业和用户青睐,用途极为广泛。当然,这里主要介绍两类数据的转换方法及具体实现过程。1.1Shp        Shp全称为ShapeFile,顾名思义与形状有关,它是一种矢量数据文件标准格式,在GIS中应用广泛,由ESRI(环境科学研究协会)设计的用于存储点、线、面等多种几何类型数据,可包含地理实体要素的几何和属性信息,比如表达一条道路、一条河流、一个房屋、一座建筑、地形点高度、室内平面结构等等。值得注意的是,shp文件并非单个文件,而是由多个文件组成,包含主文件.shp、索引文件.shx、dBASE表文件.dbf、投影文件.prj、.cpg、.sbn、.sbx。shp数据文件结构(样例)1.1.1示例数据        人们通常利用ArcGIS、QGIS、GoogleEarth、GlobalMapper等专业软件打开shp文件进行查看,当然互联网上存在许多在线网站可供下载shp数据,如geoBoundaries、NaturalEarth、OpenStreetMap、bbbike、国家基础地理信息中心等等。geoBoundaries官网NaturalEarth官网OpenStreetMap官网bbbikegeoBoundaries-BEL-ADM3-all(源自geoBoundaries)1.2GeoJSON        作为一种地理空间数据结构编码和交换的文件标准格式,GEOJSON由于采用JSON(JavaScriptObjectNotation)类型的树形存储方式,十分便于网络传输和在线解析。它支持Point、LineString、Polygon、MultiPoint、MultiLineString、和MultiPolygon等几何类型,最小单元以Feature为代表(含有属性properties和几何geometry),众多Feature组成了FeatureCollection集合。为了促进GeoJSON标准化工作,2015年IETF联合起草规范的作者们一起成立了GeoJSON工作组,在2016年8月发布了新版标准规范GeoJSONSpecification——RFC7946以替换2008版本的GeoJSON规范,也可查看草稿版本。当然,GeoJSON数据通常默认推荐以WGS84参考椭球经纬度坐标系为空间参考系统,因为其具有全球统一性且世界各国公认,其他的参考系统使用场景较少。1.2.1示例数据高德JS开放平台        GeoJSON数据一般可以通过WebGIS引擎来加载查看,如MapBox、Cesium、OpenLayers、LeafLet、ArcGISAPIforJavaScript等。在线高德JSAPI中的GeoJSON提供了重庆的实例数据;MapBox官方示例中也提供了地震相关的点位数据;OpenLayers官网示例中包含加载GeoJSON的样例数据;L7Editor是蚂蚁提供的一款支持GeoJSON、WKT等GIS格式的地理数据可视编辑工具,可以在线绘制范围并生成对应数据以下载测试,同时阿里云数据可视化平台中提供的DataVAtlas可在线虚选择行政区界并支持下载对应的JSON数据;此外,LeafLet官方示例提供了加载GeoJSON的例子,同时提供了点、线、面GeoJSON数据,这些数据可供大家练习使用。蚂蚁的L7Editor阿里云的DataVAtlas2、转换原理        参考ShapeFile和ESRIShapefileTechnicalDescription学习ShapeFile的内部文件组织方式、数据存储结构、文件头读写方法等知识,同时参考geojsonWG了解GeoJSON数据的内部类型和组织方式,它们的本质均为矢量要素集合的表达,掌握全部的几何类型对象及要素属性存储结构,利用Python、Java、C#、C++等高级编程语言读写文件进行转换即可,或者借助第三方依赖、开源类库和转换引擎,具体还可参考网上资料及Github进行最后的功能及效果实现。由于矢量GIS数据会涉及到空间参考(坐标系统),考虑到统一性及兼容性等原因,通常采用公认的WGS84经纬度地理坐标系记性坐标的存储及转换,便于数据转换后的交换、重用及共享。3、具体实现        下面主要介绍在线转换和本地转换两类方法,这两类方法尽管各有优劣,但可能最大的区别在于是否连接网络以及是否自主可控。顾名思义,在线转换就是利用网络上的在线工具进行数据的转换,需要自己寻找正规可靠的官网并谨慎使用,有条件的可以开通会员使用在线服务调用;本地转换则是将功能迁移至本地,在离线的计算机上使用相关软件或者编写程序代码实现自定义功能。3.1在线转换(联网方便但不推荐使用)        这里主要介绍三个在线转换工具mapshaper、MapJS和geojson.io,其中前两个均可以进行GeoJSON与ShapeFile的相互转换;而另一个在线工具仅能实现GeoJSON向ShapeFile的转换。3.1.1mapshaper(Shp与GeoJSON互转)        mapshaper是用JavaScript编写的用于编辑Shapefile、GeoJSON、TopoJSON、CSV和其他几种数据格式的软件,它支持基本的地图制作任务,如简化形状、编辑属性数据、剪切、擦除、合并、过滤等处理操作,提供了交互式的web接口。同时作为一个开源项目,其在Github平台已经收获3.7K的Star,好评如潮。Github上的mapshapermapshaper在线转换步骤演示3.1.2MapJS(Shp与GeoJSON互转)        MapJS是一款由BimAnt推出的GIS地图数据在线查看与编辑工具应用,支持ShapeFile、GeoJSON、TopoJSON、KML、CSV、gzip以及zip压缩文件的在线查看。总体尔言,MapJS应该是参考mapshaper开源项目重新修改后封装而成,因为样式UI与功能布局基本是完全相同。MapJS在线转换步骤演示3.1.3geojson.io(GeoJSON转Shp——暂不可用)        geojson.io是一个快速、简单的工具,用于创建、查看和共享地图。geojson.io以开源空间数据格式geojson命名,它以各种方式支持geojson,但也接受KML、GPX、CSV、GTFS、TopoJSON和其他格式,支持输出保存为ShapeFile格式。geojson.io在线GeoJSON转Shp步骤演示3.2本地转换(安全灵活自主定制可控)        本地转换的原则在于不联网、单机本地离线处理,下面主要介绍三种方式进行转换实现:      (1)将mapshaper离线化使用以实现GeoJSON与ShapeFile的数据互转;      (2)Python编程实现ShapeFile向GeoJSON的数据转换;      (3)本地GeoJSON引擎实现ShapeFile向GeoJSON的数据转换。3.2.1离线版mapshaper(Shp与GeoJSON互转)        断网使用mapshaper离线版,数据转换操作方法与在线版相同,利用nginx发布离线版mapshaper即可使用。离线版mapshaper打开shp离线版mapshaper将shp转geojson离线版mapshaper打开geojson离线版mapshaper将geojson转shp3.2.2Python(Shp转GeoJSON)        这里使用Python编译器,需要利用pip安装依赖库gdal和fiona。importcodecsimportjsonimportfiona#输入的Shapefile文件路径shapefile_path='test/input.shp'#使用fiona读取Shapefilewithfiona.open(shapefile_path,'r')asshapefile:#将每个要素转换为GeoJSON字典geojson_features=[{"type":"Feature","properties":{key:valueforkey,valueinfeature["properties"].items()},"geometry":feature["geometry"]}forfeatureinshapefile]#创建GeoJSON字典geojson={"type":"FeatureCollection","features":geojson_features}n=len(geojson_features)#输出GeoJSON文件路径geojson_output_path='test/output.json'foriinrange(0,n):geomI=geojson_features[i]['geometry']geometry_json=json.dumps(geomI.__geo_interface__)geojson_features[i]['geometry']=json.loads(geometry_json)#将GeoJSON字典写入文件#withopen(geojson_output_path,'w')asf:#json.dump(geojson,f)print(geojson)#ws=codecs.open(geojson_output_path,"w",encoding='utf-8')ws.write(json.dumps(geojson,ensure_ascii=False,indent=4)+'\n')ws.close()print('转换成功!')123456789101112131415161718192021222324252627282930313233343536373839404142433.2.3本地GeoServer(Shp转GeoJSON)        在一台已安装好GeoServer的机器上,访问部署页面,登录管理员默认账号后新建工作空间,之后新建仓库,在仓库中上传ShapeFile文件发布图层,设置坐标系为WGS84(EPSG:4326),设置视图的经纬度范围从数据中自动获取,发布成功后点击图层预览,找到发布的图层,在对应行的下拉栏中选择GeoJSON后则可查看转换后的结果,当然默认是带分页的URL,在URL的Get请求的键值对当中删除分页参数即可范湖完整结果,最终浏览器访问不带分页的URL即可获得ShapeFile转换后的GeoJSON结果,可下载至本地使用。发布图层后查看GeoJSON数据的Url默认是会带分页的,为了获取所有的要素数据,可以去除maxFeatures参数可得到最终包含完整GeoJSON数据的Url。本地GeoServer新建工作区工作区命名并保存添加数据存储新建数据源->ShapeFile矢量数据源命名并设置参数保存并发布图层查看发布图层OpenLayers预览选择输出为GeoJSON浏览器查看转换后的GeoJSON保存GeoJSON至本地geojson.io在线查看转换后的GeoJSON4、小结        矢量数据文件转换用途较为广泛,许多地理信息平台、空间大数据可视化平台、实景三维数据展示平台、城市基础信息模型平台、数字孪生平台都离不开矢量空间数据的加载与展示,不同的平台接入不同的数据后台服务提供商,有时往往需要进行格式转换来兼容现有的引擎平台。真金不怕火炼,百炼方可成钢。面对实际的学习、生活和工作,有的事物看似简单实则一点也不简单,有的现象看似合理实则困难与疑点重重。我们需要迎难而上,克服眼前困难,纵使心有羁绊,也应全力以赴、一往无前、付诸行动。        从一点一滴做起,战胜拖延、摆脱恐惧的唯一有效方法就是要迎难而上,开始行动。了解自己首先要了解周围的世界,观察万事万物后清楚自身的状态,理解运行的规律,时刻怀揣赤诚之心、谦虚向上之心,向优秀的前辈们学习其精神、品质、毅力与格局,不断攀登一座又一座山峰,跨越重重障碍,纵使前方迷雾重重,顿时不知所往,仍需耐心谨慎,敬畏自然生命,积极探索发现,寻求科学真理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-5 09:33 , Processed in 0.498087 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表