Shapely Cascaded Union - Возвращено слишком много полигонов - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить объединение около 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")

Вот скриншот части вывода

Map

Почему этодело?

Заранее спасибо,

Мэтт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...