У меня есть кластеризованные геоданные, геометрия которых состоит из нескольких точек. Я могу создавать выпуклые оболочки, используя метод geopanda convex_hull. Но почему-то мне не удалось найти подобную команду для создания альфа-формы. Или что-то, что даст мне четкую границу вокруг всех точек в данном кластере.
Для демонстративных целей я приведу здесь код. Код загружает образцы данных из Open Street Map, использует метод HDBSCAN для кластеризации точек, а затем создает выпуклую оболочку для каждого кластера.
Код: Выделить всё
# Import all necessary packages
import pandas as pd
import geopandas as gpd
import osmnx as ox
from hdbscan import HDBSCAN
import numpy as np
# Get the sample data from OSM
tags={"amenity": 'restaurant'}
place_name = 'San Diego'
sample = ox.geometries_from_place(
place_name, tags={"amenity": ['restaurant', 'bar']}
)[["name", "geometry"]]
# Change crs to calculate centroids
sample_albers = sample.to_crs(epsg=3311) # This is only the sample data. CRS might be wrong, but it is not the main focus here
sample_albers['point'] = sample_albers.centroid
sample_albers.set_geometry('point', inplace = True)
# Create lat and lon to cluster the data
lon_lat = np.column_stack((sample_albers['point'].x, sample_albers['point'].y))
# Apply HDBSCAN, get labels directly and dissolve the sample data by labels
labels = HDBSCAN(min_cluster_size=10).fit(lon_lat).labels_
clusters = sample_albers[['point']].dissolve(by=labels)
# Creating Convex Hulls
clusters['convex_hull'] = clusters.convex_hull
Есть предложения?
Подробнее здесь: https://stackoverflow.com/questions/691 ... int-geomet