Python、シェイプリーライブラリ:シェイプポリゴンに対してアフィン演算を実行することは可能ですか?


回答:


10

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)の回転は、アフィン変換では実行されません。データを投影して、投影された座標を回転するか、球体回転を実行する必要があります。
whuber

1
そうそう、私は質問の(lat、lon)の部分を逃しました。地理的入力用に構築されたアフィン変換関数を見たことがないので、提供したヒントは不可欠です。
マイクT

v1.2.17以降、Shapelyにはアフィン変換がありましたが、まだ文書化されていません-github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L

著者のブログも参照してください:sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
@AlexLタイプhelp(shapely.affinity)。実際、モジュールの手動アップデートの準備はほぼ完了です。
Mike T

2

Sextanteには機能するツールがあります。これは「Tools for Vectorレイヤー」の下でTransformと呼ばれます。コマンドを実行するには、角度、アンカーポイント、スケール係数、移動を定義します。Sextanteは、gvsig、openjump、udigなどの拡張機能です。コマンドラインからも実行できます。


2

PythonやShapelyにはそうする機能はありませんが、JTS(Java Topology Suite)http://tsusiatsoftware.net/jts/main.html(GEOS、Shapelyで使用されるライブラリはポートです) JTSのですが、JTSはより多くの機能を持っています)

ソフトはこちらhttp://sourceforge.net/projects/jts-topo-suite/からダウンロードでき、OSに応じてtestbuilder.shまたはtestbuilder.batを起動して、発見のために再生できます。理解した後は、GUIを使用せずにJavaプログラミングのみを使用して、同じことを行う必要があります。

http://geoscript.org/は、PythonコードとJavaを接着するのに役立ちます(1つの実装がJythonを使用しているため)。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.