Python3 fastkml и мультигеометрияPython

Программы на Python
Ответить
Anonymous
 Python3 fastkml и мультигеометрия

Сообщение Anonymous »

Как создать мультигеометрию (например, мультиточку и линию)
с помощью библиотеки fastkml и Python 3.6?
Похоже, никто никогда ничего не публиковал на эту тему, поэтому мне интересно если это вообще возможно.

Моя цель — создать единую метку со сложной геометрией, например:
  • 2 балла
  • один вектор между двумя точками
Затем его следует закодировать как мультигеометрию в окончательном KML.

Я провел дальнейшее расследование. С этого момента я понял, что правильный синтаксис:

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

# create a line geometry using shapely
line = shapely.geometry.LineString([p1, p2])
# combine shapes into a geometrycollection
gc = shapely.geometry.collection.GeometryCollection([line, p1, p2])
# append the collection to the placemark geometry
p.geometry = gc
в любом случае ошибка типа класса все еще существует во время выполнения. Некоторые исследования модуля fastkml Geometry.py показывают очень интересную информацию в разделе импорта:

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

try:
from shapely.geometry import Point, LineString, Polygon
from shapely.geometry import MultiPoint, MultiLineString, MultiPolygon
from shapely.geometry.polygon import LinearRing
#from shapely.geometry import GeometryCollection
# Sean Gillies:
# I deliberately omitted a geometry collection constructor because
# there was almost no support in GEOS for operations on them. You
# couldn't buffer a collection, for example, or find its difference
# to another geometry. I've seen some signs of this changing in GEOS,
# but until it does I don't think there's any point to the class.
# It wouldn't be much more than a list of geometries.
from pygeoif.geometry import GeometryCollection
from shapely.geometry import asShape

except ImportError:
from pygeoif.geometry import Point, LineString, Polygon
from pygeoif.geometry import MultiPoint, MultiLineString, MultiPolygon
from pygeoif.geometry import LinearRing
from pygeoif.geometry import GeometryCollection
from pygeoif.geometry import as_shape as asShape
Насколько я понимаю, библиотека fastkml всегда создает объект GeometryCollection из pygeoif, а не из shapely. Это подтверждается тем фактом, что при изменении импорта:

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

from shapely.geometry import GeometryCollection
# from pygeoif.geometry import GeometryCollection
все идет нормально, и файл kml создается, как и ожидалось.

Удивительно, что такое поведение кажется быть сделано намеренно. На данный момент я до сих пор не понимаю его точного обоснования. Я знаю, что менять исходный код библиотеки — плохая идея. Может быть, появится лучшее решение?

Подробнее здесь: https://stackoverflow.com/questions/480 ... geometries
Ответить

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

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

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

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

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