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 !"
  • 相关阅读:
    DevExpress WPF入门指南:加载动画的应用
    DevExpress v17.2—WPF篇(一)
    添加MyEclipse WebSphere Portal Server支持(二)
    DevExpress v17.2—WinForms篇(六)
    MyEclipse 2017 CI 9 发布(附下载)
    DevExpress v17.2新版亮点—WinForms篇(五)
    DevExpress v17.2新版亮点—WinForms篇(四)
    添加MyEclipse WebSphere Portal Server支持(一)
    内嵌iframe页面在IOS下会受内部元素影响自动撑开的问题
    组合 a 标签与 canvas 实现图片资源的安全下载的方法与技巧
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/5783662.html
Copyright © 2011-2022 走看看