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

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разделение многоугольника на линию с использованием пересечения возвращает исходный многоугольник в Shapely

Сообщение Anonymous »

Я свел свою проблему к некоторому MWE, чтобы ее можно было воспроизвести. Я использую Shapely 2.0.
Я хочу разделить многоугольник P на 2 части линией L.

Код: Выделить всё

POLYGON ((292718.0381447676 6638193.414029885, 292694.50537013356 6637994.803334004, 292718.0381447676 6638193.414029885, 292718.9708331647 6638193.303518486, 292722.0992155936 6638192.97038651, 292725.48975053953 6638192.648911643, 292729.16966360115 6638192.34135049, 292733.16283984896 6638192.050457474, 292737.48817684915 6638191.779469689, 292742.1600771896 6638191.532042792, 292747.1894678763 6638191.312155023, 292752.58358723175 6638191.124185786, 292758.34681013395 6638190.973003162, 292753.9574101781 6637991.021175833, 292758.34681013395 6638190.973003162, 292753.9574101781 6637991.021175833, 292694.50537013356 6637994.803334004, 292718.0381447676 6638193.414029885))
Сначала я получаю пересечение между P и L. Результатом является LineString L2, как и ожидалось:

Код: Выделить всё

LINESTRING (292756.2221414001 6638094.18724655, 292743.0611 6638095.284, 292709.9881 6638095.284, 292706.4410368586 6638095.537357549)
Во-вторых, я разделяю P на L2 и ожидаю, что оно вернет два полигона P1 и P2.

Код: Выделить всё

from shapely.ops import split

box = wkt.loads(my_polygon_as_str)
line = wt.loads(my_line_as_str)
result = split(box, line) # should return 2 polygons
Однако метод Split() по какой-то причине возвращает только один многоугольник, который является исходной формой буквы P.

Код: Выделить всё

POLYGON ((292694.50537013356 6637994.803334004, 292718.0381447676 6638193.414029885, 292718.9708331647 6638193.303518486, 292722.0992155936 6638192.97038651, 292725.48975053953 6638192.648911643, 292729.16966360115 6638192.34135049, 292733.16283984896 6638192.050457474, 292737.48817684915 6638191.779469689, 292742.1600771896 6638191.532042792, 292747.1894678763 6638191.312155023, 292752.58358723175 6638191.124185786, 292758.34681013395 6638190.973003162, 292753.9574101781 6637991.021175833, 292694.50537013356 6637994.803334004))
Что здесь происходит? Речь идет о плавающих запятых, когда Shapely учитывает, что границы L2 не пересекаются точно на сторонах P?
Если да, то как я могу добиться такой операции с реальными данными?
P.S: Я хочу добиться этого для сотен полигонов, и случайное разделение работает для некоторых из них (около 10%), что действительно сбивает с толку.

Подробнее здесь: https://stackoverflow.com/questions/760 ... in-shapely
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Выпрямите многоугольник в линию с помощью Geopandas/Shapely
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как получить исходные индексы многоугольника после применения shapely.simplify?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как рассчитать центральную линию или базовую линию многоугольника
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Как рассчитать центральную линию или базовую линию многоугольника
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Как рассчитать центральную линию или базовую линию многоугольника
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»