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

58 篇文章 19 订阅
52 篇文章 79 订阅

最近项目有这样的需求,采集的是在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中,如下图所示。


                                                                      更多内容,请关注公众号

                                                             

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值