将ArcGIS Server的JSON转化为SHP文件

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# JSONToSHP.py
# Created on: 2014-09-01 22:00:00.00000
#   
# Description: 
# ---------------------------------------------------------------------------


import os
import json
import arcpy


jsonFile='E:/New Text Document.txt'
arcpy.env.workspace = "E:/output"
outpath = "E:/output"
outname = os.path.split(jsonFile)[1].split('.')[0] + ".shp"
print outname
fileObject = open(jsonFile, 'r')
jsonText = fileObject.read()
fileObject.close()
featureSet = json.loads(jsonText)
geometryType = featureSet["geometryType"]

#
geometry_type = "POINT"
if geometryType == "esriGeometryPolygon":
    geometry_type = "POLYGON"
elif geometryType == "esriGeometryPolyline":
    geometry_type = "POLYLINE"
elif geometryType == "esriGeometryPoint":
    geometry_type = "POINT"
elif geometryType == "esriGeometryMultiPoint":
    geometry_type = "MULTIPOINT"
    
# Execute CreateFeatureclass
arcpy.CreateFeatureclass_management(outpath, outname, geometry_type)
#
featureShape = outpath + "/" + outname
fields = featureSet["fields"]
fieldValid = [] #原属性名称
fieldValidLayer = ["SHAPE@"]  #新属性名称
for field in fields:
    fieldName = field["name"]
    fieldType = field["type"]
    if fieldName.lower() != 'objectid' and fieldName.lower() != 'shape_length' and fieldName.lower() != 'shape_area' and fieldName.lower() != 'fid':
        fieldValid.append(fieldName)
        if len(fieldName)>10:
            fieldName = fieldName[0:9]
        fieldValidLayer.append(fieldName)
        if fieldType=="esriFieldTypeInteger":
            arcpy.AddField_management(featureShape, fieldName, "LONG")
        elif fieldType=="esriFieldTypeSmallInteger":
            arcpy.AddField_management(featureShape, fieldName, "LONG")
        elif fieldType=="esriFieldTypeDouble":
            arcpy.AddField_management(featureShape, fieldName, "DOUBLE")        
        elif fieldType=="esriFieldTypeSingle":
            arcpy.AddField_management(featureShape, fieldName, "DOUBLE")     
        else:
            arcpy.AddField_management(featureShape, fieldName, "TEXT", 50)
#
features = featureSet["features"]
cur = arcpy.da.InsertCursor(featureShape, fieldValidLayer)
for feature in features:    
    attributes = feature["attributes"]
    geometry = feature["geometry"]
    valueList = []
    geojson = {}
    if geometryType == "esriGeometryPolygon":
        rings = geometry["rings"]
        geojson = {
            "type": "Polygon",
            "coordinates": rings}
    elif geometryType == "esriGeometryPolyline":
        paths = geometry["paths"]
        geojson = {
            "type": "MultiLineString",
            "coordinates": paths}
    elif geometryType == "esriGeometryPoint":
        geojson = {
            "type": "Point", 
            "coordinates": [geometry["x"], geometry["y"]]}
        
    polygon = arcpy.AsShape(geojson)
    valueList.append(polygon)  # (arcpy.Polygon(rings))
        
    for field in fieldValid:
        valueList.append(attributes[field])
    cur.insertRow(valueList)

del cur

print "finish !"

转载于:https://www.cnblogs.com/gispathfinder/p/5783662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值