Я пытаюсь получить объединение около 4000 полигонов, используя функцию Shapely cascaded_union.Выходные данные этой функции являются мультиполигоном в моем случае, что является нормальным, поскольку многие входные полигоны не перекрываются.
Тем не менее, когда я рисую выходные данные, я ясно вижу, что некоторые маленькие полигоны включены, тогда как эти полигоныпринадлежат большему многоугольнику (см. скриншот ниже).На мой взгляд, эти маленькие полигоны должны быть исключены из объединения.
Вот пример кода
# Take a union of my list of 4,000 polygons
polygons = [Polygon(p) for p in df["polygon"]]
union = cascaded_union(polygons)
# The returned union has a len of around 700 elements
# I then mapped the output using Folium
# I thus have to create a feature collection with all my polygons
def makeFeature(xs,ys,index):
lps = [p for p in zip(*(xs,ys))]
feature = dict()
feature["type"] = "Feature"
feature["geometry"] = dict()
feature["geometry"]["type"] = "Polygon"
feature["geometry"]["coordinates"] = list()
feature["geometry"]["coordinates"].append(lps)
feature["properties"] = dict()
feature["properties"]["name"] = "{}".format(index)
return feature
def makeFeatureCollection(lfeatures):
collec = dict()
collec["type"] = "FeatureCollection"
collec["features"] = lfeatures
return json.dumps(collec,indent=3)
# Make the feature
lfeatures = list()
for index,el in enumerate(union):
xs, ys = el.exterior.coords.xy
feature = makeFeature(xs,ys,index)
lfeatures.append(feature)
collec = makeFeatureCollection(lfeatures)
# Draw it
m = folium.Map(location=[df["lat_center"][0],df["lon_center"][0]],zoom_start=3)
folium.GeoJson(collec).add_to(m)
m.save(outmap+"test_union.html")
Вот скриншот части вывода
Почему этодело?
Заранее спасибо,
Мэтт