Существует ли простой способ преобразования объектов Shapely (а именно, Polygons и MultiPolygons) из одной проекции в другую без необходимости копаться и извлекать координаты вручную?
На самом деле, мне даже не важно, являются ли они объектами Shapely, я просто хочу передать объекты и проекцию и вернуть перепроектированный набор объектов обратно.
Существует ли такая функциональность или она должна быть закодирована вручную?
python
coordinate-system
shapely
pyproj
Крис Фоннесбек
источник
источник
fiona.transform
выглядит, чтобы иметь то, что вам нужно.Ответы:
Хотя shapely изначально не понимает системы координат, он
shapely.ops.transform()
может делать это вместе сpyproj
. Если выpyproj.Proj
можете понять обе ваши системы координат, то это можно превратить в функцию, с помощью которой вы сможете преобразовать форму.Из красивых документов :
источник
itertools
модуль, вы можете сделать,project = lambda x, y: pyproj.transform(pyproj.Proj(init='epsg:4326'), pyproj.Proj(init='epsg:26913'), x, y)
а затемg2 = transform(project, g1)
.Transformer
. Смотрите здесь: pyproj4.github.io/pyproj/stable/gotchas.htmlХотя это и не решение Shapely, использование GeoPandas обеспечивает относительно простую проекцию. Например, если мы хотим преобразовать шейп-файл в ESPG 4326:
источник
Если вы используете pyproj2, гораздо проще использовать Transformer. Вот пример:
Это также намного быстрее, потому что pyproj не нужно воссоздавать проекцию для каждой точки.
источник