arcpy开发实例之POI的DBSCAN聚类
# _*_ encoding: utf-8 _*_
import arcpy
arcpy.env.workspace = "d:/temp/poi_yuelu";
# 1.读取poi的x和y坐标并存入数组X
X = []
with arcpy.da.SearchCursor("poi_yuelu",["SHAPE@XY"]) as cursor:
for row in cursor:
X.append([row[0][0],row[0][1]]);
# 2. 将X转换为numpy数组
import numpy as np
X = np.array(X);
# 3. 使用sklearn.DBSCAN聚类
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps = 50, min_samples = 10);
clustring = dbscan.fit(X);
# 4. 将聚类id写入poi的cid字段
arcpy.management.AddField("poi_yuelu","cid","SHORT");
with arcpy.da.UpdateCursor("poi_yuelu",["fid","cid"]) as cursor:
i = 0;
for row in cursor:
row[1] = clustering.labels_[i];
i +=1;
cursor.updateRow(row);
#5. 为每个类簇生成最小约束多边形
arcpy.management.MinimumBoundingGeometry("poi_yuelu","domain.shp","CONVEX_HULL","LIST","cid");