Shapely: MultiPoint.difference(Point) не сохраняет первоначальный порядок

Созданный на 1 апр. 2019  ·  3Комментарии  ·  Источник: Toblerity/Shapely

Простой пример:

>>> from shapely.geometry import MultiPoint, Point
>>> points = MultiPoint([Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)])
>>> points.wkt
'MULTIPOINT (0 0, 1 0, 1 1, 0 1)'
>>> bad_point = Point(1, 0)
>>> points.difference(bad_point).wkt
'MULTIPOINT (0 0, 0 1, 1 1)'

Как видите, удаление Point из MultiPoint с помощью difference нарушает первоначальный порядок. Ожидаемый результат:

'MULTIPOINT (0 0, 1 1, 0 1)'

Это ошибка или так задумано? Документы ничего не говорят об этом поведении.

Версия Shapely: 1.6.4.post1, установлена ​​из conda.

documentation geos wontfix

Самый полезный комментарий

См. OGC 06-103r4 для простого доступа к функциям , §6.1.5 для MultiPoint:

Точки не связаны и не упорядочены каким-либо семантически важным образом (см. обсуждение в GeometryCollection).

Таким образом, это указывает на то, что поведение предусмотрено дизайном. Это также то же самое поведение в JTS .

Похожий объект, который сохраняет порядок, — это [Multi]LineString , но этот пример нужно будет обрабатывать по-другому.

Все 3 Комментарий

Это поведение унаследовано от GEOS, библиотеки, над которой работает Shapely.

Я не думаю, что это ошибка как таковая . Это просто не то, как работает алгоритм, вычисляющий разницу. Два выхода геометрически эквивалентны. Я не думаю, что простая модель признаков придает какое-либо значение порядку частей в коллекции.

Кое-что, объясняющее это, может быть добавлено в документацию. Я не уверен, где лучше всего было бы добавить его, поскольку это не что-то конкретное для метода разницы.

См. OGC 06-103r4 для простого доступа к функциям , §6.1.5 для MultiPoint:

Точки не связаны и не упорядочены каким-либо семантически важным образом (см. обсуждение в GeometryCollection).

Таким образом, это указывает на то, что поведение предусмотрено дизайном. Это также то же самое поведение в JTS .

Похожий объект, который сохраняет порядок, — это [Multi]LineString , но этот пример нужно будет обрабатывать по-другому.

Да я вижу. Я думаю, в конце раздела _Коллекции_ можно было бы добавить предупреждение о том, что не следует полагаться на сохранение порядка.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

FuriousRococo picture FuriousRococo  ·  5Комментарии

dopplershift picture dopplershift  ·  3Комментарии

mromanie picture mromanie  ·  3Комментарии

mikedh picture mikedh  ·  6Комментарии

romainfontaine picture romainfontaine  ·  5Комментарии