如何获取arcgis中矢量图层的每个多边形质心具体方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取arcgis中矢量图层的每个多边形质心具体方法相关的知识,希望对你有一定的参考价值。
就是为了添加一个多边形的名称,将质心作为添加名称的标志。
那样有的点,好像在多边形边界。不过还行。再问一下,怎么在Arcgis中绘制一个饼状图。我用于显示一个地区的土地利用类型。
绘制饼状结构图:
菜单Tools-Graphs-Create 饼图类型选Pie本回答被提问者采纳 参考技术B 应该提取每个多边形的重心点坐标
如何在 DBSCAN sklearn 中获取质心?
【中文标题】如何在 DBSCAN sklearn 中获取质心?【英文标题】:How to get the centorids in DBSCAN sklearn? 【发布时间】:2020-09-24 16:39:09 【问题描述】:我正在使用 DBSCAN 进行聚类。但是,现在我想从代表它的每个集群中选择一个点,但我意识到 DBSCAN 没有 kmeans 中的质心。
但是,我发现 DBSCAN 有一个名为 core points
的东西。我正在考虑是否可以使用这些核心点或任何其他替代方法从每个集群中获取代表点。
我已经在下面提到了我使用的代码。
import numpy as np
from math import pi
from sklearn.cluster import DBSCAN
#points containing time value in minutes
points = [100, 200, 600, 659, 700]
def convert_to_radian(x):
return((x / (24 * 60)) * 2 * pi)
rad_function = np.vectorize(convert_to_radian)
points_rad = rad_function(points)
#generate distance matrix from each point
dist = points_rad[None,:] - points_rad[:, None]
#Assign shortest distances from each point
dist[((dist > pi) & (dist <= (2*pi)))] = dist[((dist > pi) & (dist <= (2*pi)))] -(2*pi)
dist[((dist > (-2*pi)) & (dist <= (-1*pi)))] = dist[((dist > (-2*pi)) & (dist <= (-1*pi)))] + (2*pi)
dist = abs(dist)
#check dist
print(dist)
#using default values, set metric to 'precomputed'
db = DBSCAN(eps=((100 / (24*60)) * 2 * pi ), min_samples = 2, metric='precomputed')
#check db
print(db)
db.fit(dist)
#get labels
labels = db.labels_
#get number of clusters
no_clusters = len(set(labels)) - (1 if -1 in labels else 0)
print('No of clusters:', no_clusters)
print('Cluster 0 : ', np.nonzero(labels == 0)[0])
print('Cluster 1 : ', np.nonzero(labels == 1)[0])
print(db.core_sample_indices_)
如果需要,我很乐意提供更多详细信息。
【问题讨论】:
以防万一您不知道:Kmeans 是一种基于质心的方法(每个聚类只是一个质心,所有点都属于最近的质心)。 DBSCAN 是基于密度的,因此生成的簇可以具有任何形状,只要点之间的距离足够近。因此,DBSCAN 也可能会在中心产生一个“球”簇,周围有一个“圆”簇。在这种情况下,两个集群将具有相同的“质心”,这就是为什么计算 DBSCAN 结果的质心可能具有高度误导性的原因。所以在使用这些质心时要小心(或使用基于质心的方法)。 【参考方案1】:你为什么不估计得到的估计聚类的质心?
points_of_cluster_0 = dist[labels==0,:]
centroid_of_cluster_0 = np.mean(points_of_cluster_0, axis=0)
print(centroid_of_cluster_0)
points_of_cluster_1 = dist[labels==1,:]
centroid_of_cluster_1 = np.mean(points_of_cluster_1, axis=0)
print(centroid_of_cluster_1)
【讨论】:
它对纬度和经度值产生错误的结果。 什么意思?在哪个数据集/问题中? 考虑两点:0.0, -179.0 和 0.0, 179.0。它们的质心是0.0,0.0,离它们很远。 哦,是的。我的答案是关于欧几里得坐标。您需要找到另一种获取 GPS 坐标的方法。将它们转换为其他系统。最好的以上是关于如何获取arcgis中矢量图层的每个多边形质心具体方法的主要内容,如果未能解决你的问题,请参考以下文章
arcgis如何进行权重的叠加分析?我的是多图层的叠加分析!
arcgis 计算几何,给每个要素添加坐标字段并自动计算出每个色块的质心xy