Функции кластера на основе их атрибутов - PullRequest
1 голос
/ 03 марта 2020

У меня есть набор из 5000 точек, каждый из которых имеет атрибут, значение которого установлено в диапазоне от 0 до 5. Я пытаюсь кластеризовать эти данные, чтобы уменьшить количество нарисованных точек, но sh, чтобы создать кластеры, содержащие только объекты, имеющие одинаковое значение атрибута. Обыскав вокруг, я обнаружил этот расширенный пример кластеризации из Openlayers 2.

http://dev.openlayers.org/examples/strategy-cluster-extended.html

Однако я не вижу информации о том, как реализовать это в Openlayers 3 и выше? Есть ли что-то простое, чего мне не хватает для достижения этой цели?

Большое спасибо за помощь в этом вопросе, и любые советы будут высоко оценены!

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вам потребуется кластерный источник и слой для каждого значения. Вы можете использовать функцию геометрии в качестве фильтра

cluster0 = new Cluster({
  source: vectorSource,
  geometryFunction: function(feature) {
    if (feature.get('attribute') == '0') {
      return feature.getGeometry();
    }
    return null;
  }
});

cluster1 = new Cluster({
  source: vectorSource,
  geometryFunction: function(feature) {
    if (feature.get('attribute') == '1') {
      return feature.getGeometry();
    }
    return null;
  }
});
0 голосов
/ 13 марта 2020

Это не похоже на вопрос о кластеризации. Похоже, вам просто нужно сгруппировать по значениям 1, 2, 3, 4 и 5. Если вы действительно хотите сделать кластеризацию, вы можете сделать это следующим образом.

import pandas as pd
import numpy as np
from numpy import vstack,array
from numpy.random import rand
from scipy.cluster.vq import kmeans,vq
from sklearn.cluster import KMeans

df= pd.read_csv("filename.csv") 

#format the data as a numpy array to feed into the K-Means algorithm
data = np.asarray([np.asarray(df['Value1']),np.asarray(df['Value2'])])

X = data
distorsions = []
for k in range(2, 20):
    k_means = KMeans(n_clusters=k)
    k_means.fit(X)
    distorsions.append(k_means.inertia_)

fig = plt.figure(figsize=(15, 5))
plt.plot(range(2, 20), distorsions)
plt.grid(True)
plt.title('Elbow curve')

# computing K-Means with K = 5 (5 clusters)
centroids,_ = kmeans(data,5)
# assign each sample to a cluster
idx,_ = vq(data,centroids)

details = [(name,cluster) for name, cluster in zip(df.index,idx)]

for detail in details:
    print(detail)
...