GIS小技术分享(一):python中json数据转geojson或者shp

1.环境需求

  • geopands
  • pandas
  • shapely
  • json
  • python3

2.输入数据(path字段,线条)

[
	{
		"id": "586A685D568311B2A16F33FCD5055F7B",
		"name": "普及江",
		"path": "[[116.35178835446628,23.578775300642008],
		...
		[116.35907935999273,23.568280404942346],[116.35910326492889,23.568280404942346],[116.35912716986502,23.568280404942346]]",
		"level": "4"
	},
	{
		"id": "5836685D568311B28A99F515E230FBDA",
		"name": "合江",
		"path": "[[116.35164957162047,23.579086231394125],
...
[116.38827220661572,23.565004934530894]]
	},
	{
		"id": "5863685D568311B2B93B96948D95EE27",
		"name": "红河",
		"path": "[[116.3668636727083,23.548868772118134],[116.3668636727083,23.548858522164803],[116.3668636727083,23.54884827221066],
		...
		[116.3668636727083,23.54876627254877],[116.3668636727083,23.548735522662366]]
	},

3.转换代码
将数据转给geojson。转shp可以调整to_file方法的驱动参数。

import json
from shapely.geometry import LineString
import geopandas as gpd
import pandas as pd

def main(f):
  geoList = []
  tb = []
  with open(f,mode='r', encoding='utf-8') as ff:
    data = json.load(ff)
    df = pd.DataFrame(data)
    for i in range(0, len(data)):
      row = data[i]
      prop = df.iloc[i, :11]
      tb.append(prop)
      if (row['path']):
        line = LineString(row['path'])
        geoList.append(line)
      else:
        geoList.append(None)
    geoDataFrame = gpd.GeoDataFrame(tb, geometry=geoList)
    fp = 'res1.geojson'
    geoDataFrame.to_file(fp, driver='GeoJSON', encoding='utf-8')

f = r'z_river_1.txt'
main(f)

4.输出
转为geojson,在QGIS中验证。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值