极海json转shp

Json是网页数据的一类重要格式,对于使用GIS的规划工作者,最常见的两类是EsriJson和GeoJson。然而,这两类Json格式的数据冗余较大,国内的极海提出了新的数据格式,虽然网络传输便捷但不能直接使用arcgis或Qgis进行转换使用。

对付非通用格式的json数据,要花一点功夫,以下是我用python编写的极海Json转换代码,希望能够帮到您。

import os,json,time,requests
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from shapely import geometry

choose = input('转换文件夹内json选1,单个直接输入需要转shp的json名称,不带后缀名:')

def transjsontoshp(name):
    try:
        with open (name+'.json','r',encoding='utf8')as f:
            jasondata = json.load(f)
            f.close()
    except Exception as Argument:
        print (Argument,'\n ......try:gbk')
        with open (name+'.json','r',encoding='gbk')as f:
            jasondata = json.load(f)
            f.close()
    listdata =[]       
    for i in jasondata['data']['features']:        
        if 'geom' in i.keys() and type( i['geom'])==dict:
            listdata .append( {**{'id':i['id']},**i['attrs'],**i['geom']})
        elif 'geom' in i.keys() and type( i['geom'])==list:
            listdata .append({**{'id':i['id']},**i['attrs'],**{'m':[i['geom']]}})

    pddata = pd.DataFrame(listdata)

    if 'Point' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiPoint([geometry.Point(i) for i in j]) for j in pddata['m']]

    elif 'Polyline' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiLineString([geometry.LineString(i) for i in j]) for j in pddata['m']]

    elif 'Polygon' in jasondata['data']['geometryType']:
        pddata['geometry']= [geometry.MultiPolygon([geometry.Polygon(i) for j in k for i in j]) for k in pddata['m']]

    pddata.drop(['m'],axis=1,inplace= True)
    gpddata = gpd.GeoDataFrame(pddata)
    try:
        gpddata.to_file(name+'.shp',driver='ESRI Shapefile',encoding='gbk')
    except:
        gpddata.to_file(name+'geo.json',driver='GeoJSON',encoding='utf-8')
        

if choose == '1':
    files = [i.split('.json')[0] for i in os.listdir() if '.json'in i]
    for f in files:
        transjsontoshp(f)

else:

    name = choose
    transjsontoshp(name)
Adam Zane

网站的制作者,执业规划师,高级工程师。

发表评论