(七)arcpy开发&&利用arcpy解析json生成shp数据

最近项目有这样的需求,采集的是在android平台上开发的平板app的上获取的图形数据。我们采集了点(point),线(polyline),面(polygon)数据,然后利用arcgis for android的api接口将这些图形数据转为json以string类型数据存储到splite数据库中。外业采集完后,再转为相应的shapefile数据,那么现在遇到的问题是如何将json格式的数据转为shapefile数据。我们来看一下测试采集的json格式数据,如下图所示。是两个polygon类的数据。

现在利用arcpy将这些数据解析出来,我们利用了python的json类,将数据转为map类型,然后由关键字(key)一一获取我们需要的信息。在这其中我们注意到其实polygon无法就是很多点集组成,只需要遍历这些点集,拼成polygon需要的格式即可。然后,至于创建polygon还需要借助arcpy相应的api,在这里我们就不一一说明了。具体的实现可以参考一下代码。

import json


import arcpy
json_filename = 'C:/Users/qrb_PC/Desktop/fast/tb_fixRadioPolygon.json'


def readJson(fileName):
    path="C:\\Users\\qrb_PC\\Desktop\\fast"
    outputname="polygontest.shp"
    spatRef = arcpy.SpatialReference(4326)
    createFC=arcpy.CreateFeatureclass_management(path, outputname, "POLYGON","","","",spatRef)
    arcpy.AddField_management(createFC, "name", "TEXT", 50)

    cur = arcpy.InsertCursor(createFC)

    with open(json_filename, "r") as f:
        polygonGeometryList = []
        s = json.load(f)
        for key in s.keys():
            if key == 'RECORDS':
                for item in s[key]:
                    for field in item:

                        if field == "JsonObj":
                            value = item[field]
                            rings = json.loads(value)

                            for ringKey in rings:
                                if ringKey == "rings":

                                    array = arcpy.Array()
                                    points=[]

                                    tmpRingValue = rings[ringKey]

                                    for ringItems in tmpRingValue:
                                        for ringItem in ringItems:

                                           X = ringItem[0]
                                           Y = ringItem[1]
                                           pointitem=[]
                                           point = arcpy.Point()
                                           point.X = X
                                           point.Y = Y
                                           pointitem.append(X)
                                           pointitem.append(Y)

                                           array.add(point)
                                           points.append(pointitem)
                                    row = cur.newRow()
                                    row.shape = array

                                    #polygon = arcpy.Polygon(array)
                                    #polygonGeometryList.append(polygon)


                                    cur.insertRow(row)
                                    array.removeAll()



readJson(json_filename)

 

最后的实现生成的polygon类型数据,将该数据加载到arcdeskop中,如下图所示。


                                                                      更多内容,请关注公众号

                                                             

转载自:https://blog.csdn.net/u010608964/article/details/84979982

You may also like...