Python - стройный: итерации с методом «разность» возвращают неожиданный результат - PullRequest
0 голосов
/ 07 ноября 2018

На самом деле я работаю с shapely на python.

Вот такие вещи:

У меня есть один большой многоугольник, скажем,

import matplotlib.pyplot as plt
import shapely
from shapely.geometry import Polygon
LAND = Polygon([(0, 0), (0, 20), (20, 20), (20, 0)])

и у меня есть список случайных полигонов, созданных с помощью

import random
def generate_polygons(box_size=10, amount=15):
    """
    A function that generate an amount of polygon randomly
    in a square of size = box_size
    """
    polygons = []
    for i in range(amount):
        x = random.randint(0, box_size - 2)
        y = random.randint(0, box_size - 2)
        dx = 2
        dy = 2
        polygons.append(Polygon([(x, y), (x, y+dy), (x+dx, y+dy), (x+dx, y)]))
    return polygons

Я хочу провести различие между LAND и списком полигонов

diff = LAND
polygons = generate_polygons(20, 15)

for polygon in polygons:
    diff = diff.difference(polygon)

Давайте нарисуем результат Вот многоугольники:

FIG, AXS = plt.subplots()

if (isinstance(polygons, shapely.geometry.polygon.Polygon)):
    X, Y = polygons.exterior.xy
    AXS.fill(X, Y, 'b')
else:
    for polygon in polygons:
        X, Y = polygon.exterior.xy
        AXS.fill(X, Y, 'b')

plt.show()

Вот разница:

FIG, AXS = plt.subplots()

if (isinstance(diff, shapely.geometry.polygon.Polygon)):
    X, Y = diff.exterior.xy
    AXS.fill(X, Y, 'r', alpha=0.5)
else:
    for polygon in diff:
        X, Y = polygon.exterior.xy
        AXS.fill(X, Y, 'r', alpha=0.5)

plt.show()

многоугольник синего цвета, разность красного цвета

Я не понимаю, почему это дает мне этот результат, у кого-нибудь есть идея?

1 Ответ

0 голосов
/ 07 ноября 2018

Окончательный ответ заключается в том, что Шпили выполняет операцию, но pyplot не может построить ее!

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