Arcpy神器之NumPyArrayToFeatureClass

Arcpy神器之NumPyArrayToFeatureClass

之前在“ofo数据获取&坐标转换&生成shp数据”一文中涉及到用Arcpy创建点要素数据,最近再次使用时发现怎么那么麻烦
在这里插入图片描述
于是有另辟新路,翻阅Arcpy接口文档,终于找到了一个神器NumPyArrayToFeatureClass。
我们先看看原来的写法

#创建shp点数据
    def CreateFeaturclass(self, savepath, featurename, spatial):
        if arcpy.Exists(savepath + '\\' + featurename + '.shp') == False:
            arcpy.CreateFeatureclass_management(savepath, featurename, 'POINT', '', '', '', spatial)
        else:
            pass

    #添加字段
    def AddField(self, savepath, featurename):
        arcpy.AddField_management(savepath + '\\' + featurename + '.shp', 'bikeid', 'TEXT')
        arcpy.AddField_management(savepath + '\\' + featurename + '.shp', 'lon', 'TEXT')
        arcpy.AddField_management(savepath + '\\' + featurename + '.shp', 'lat', 'TEXT')

    #遍历点并添加字段值
    def InsertRow(self, savepath, featurename, data):
        Insercur = arcpy.InsertCursor(savepath + '\\' + featurename + '.shp')

        for value in range(1,len(data)+1):
            point = arcpy.Point()
            newrow = Insercur.newRow()
            point.X = float(data.head(value)['lng'][value-1])
            point.Y = float(data.head(value)['lat'][value-1])
            newrow.setValue('Id', value)
            newrow.setValue('bikeid',data.head(value)['bikeId'][value-1])
            newrow.setValue('lon',data.head(value)['lng'][value-1])
            newrow.setValue('lat',data.head(value)['lat'][value-1])
            pointGeo = arcpy.PointGeometry(point)
            newrow.shape = pointGeo
            Insercur.insertRow(newrow)

emmm…
这么多,于是,我将上面三个函数改一下,看看神器NumPyArrayToFeatureClass

#数组转featureclass
def InsertRow(savepath, featurename, data):
	bikeid = []
	lng = []
	lat = []
	for value in range(1,len(data)+1):
		bikeid.append(float(data.head(value)['bikeid'][value-1]))
		lng.append(float(data.head(value)['lng'][value-1]))
		lat.append(float(data.head(value)['lat'][value-1]))
	
	numpy_arr = np.rec.fromarrays([bikeid, lng, lat],
	                           formats=['U8','f8','f8'],
	                           names=["单车编号","经度","纬度"])
	                      
	#NumPyArrayToFeatureClass
	out_path = savepath
	feat_name = featurename + ".shp"
	out_feat = os.path.join(out_path, feat_name)
	sr = arcpy.SpatialReference(4326)
	arcpy.da.NumPyArrayToFeatureClass(numpy_arr, out_feat, ['经度', '纬度'], sr)

是不是被Arcpy所迷倒
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AnywalkerGISer

加个鸡腿

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

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

打赏作者

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

抵扣说明:

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

余额充值