Python,匀称库:是否可以对形状多边形执行仿射操作?


Answers:


11

Shapely的affinity模块支持在任何几何图形上的仿射变换,例如:

from shapely import affinity
from shapely.geometry import LineString

# Example geometry
line = LineString([(1, 3), (1, 1), (4, 1)])

# Rotate 30 degrees CCW from origin at the center of bbox
line_rot_center = affinity.rotate(line, 30, 'center')

# Rotate from origin at (1, 1)
line_rot_11 = affinity.rotate(line, 30, (1, 1))

不幸的是,(lat,lon)的旋转不能通过仿射变换来执行。您要么必须投影数据并旋转投影的坐标,要么执行球形旋转。
ub

1
哦,对了,我错过了问题的(最后)。我从未见过为地理输入构建仿射变换功能,因此您提供的技巧至关重要。
Mike T

自v1.2.17起,Shapely进行了仿射变换,尽管尚未记录在案-github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex

另请参见作者的博客:sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
@AlexL类型help(shapely.affinity)。实际上,我几乎准备完成该模块的手动更新。
Mike T

2

Sextante具有可能有效的工具。在“矢量层工具”下,它称为“变换”。要运行该命令,请定义角度,锚点,比例因子和平移。Sextante是gvsig,openjump,udig等的扩展。它还从命令行运行。


2

我没有看到Python或Shapely的任何功能,但是您可以使用JTS(Java拓扑套件)实现此功能http://tsusiatsoftware.net/jts/main.html(GEOS,Shapely使用的lib是端口JTS,但JTS具有更多功能)

您可以在此处下载软件http://sourceforge.net/projects/jts-topo-suite/并根据您的操作系统启动testbuilder.sh或testbuilder.bat进行发现。了解了这些基本知识之后,您将不得不在没有GUI的情况下执行相同的操作,而仅使用Java编程。

http://geoscript.org/可能会帮助您在python代码和java之间进行融合(因为一个实现使用Jython)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.