zoukankan      html  css  js  c++  java
  • 将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 !"
  • 相关阅读:
    保存全局Crash报告&发送邮件
    手机端抓包方法
    apk反编译
    保存全局Crash报告
    一个android控件资源网站
    扩展RBAC用户角色权限设计方案
    剑指offer分块总结----------数组
    剑指offer-----合并两个排序的链表
    剑指offer-----单链表反转
    python实现输入一段英文单词后,倒叙输出
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/5783662.html
Copyright © 2011-2022 走看看