Python, bibliothèque bien faite: est-il possible de faire une opération affine sur un polygone de forme?

11

J'essaie de créer un rectangle tourné en coordonnées lat / lon.

Fondamentalement, j'ai les coordonnées du centre et l'angle de rotation autour du centre.

Est-il possible de faire en utilisant, galbé ou gdal, ou autre chose?

Oleksandr
la source

Réponses:

11

Le affinitymodule de Shapely prend en charge les transformations affines sur n'importe quelle géométrie, par exemple:

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))
Mike T
la source
Malheureusement, une rotation en (lat, lon) n'est pas effectuée avec une transformation affine. Vous devez soit projeter les données et faire pivoter les coordonnées projetées, soit effectuer une rotation sphérique.
whuber
1
Oh oui, j'ai raté la partie (lat, lon) de la question. Je n'ai jamais vu une fonction de transformation affine construite pour les entrées géographiques, donc les conseils que vous avez fournis sont essentiels.
Mike T
Depuis la v1.2.17, Shapely a subi des transformations affines, bien qu'elles ne soient pas encore documentées - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L
Voir aussi le blog de l'auteur: sgillies.net/blog/1168/shapely-1-2-17
Alex L
1
@AlexL type help(shapely.affinity). En fait, j'ai presque fini de préparer la mise à jour manuelle du module.
Mike T
2

Sextante a un outil qui pourrait fonctionner. Il s'appelle Transformer, sous "Outils pour les calques vectoriels". Pour exécuter la commande, définissez l'angle, le point d'ancrage, le facteur d'échelle et la translation. Sextante est une extension de gvsig, openjump, udig, others. Il s'exécute également à partir de la ligne de commande.

klewis
la source
2

Je ne vois aucune fonctionnalité en Python ou Shapely pour le faire, mais vous pouvez le faire avec JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, la bibliothèque utilisée par Shapely est un port de JTS mais JTS ont plus de fonctions)

Vous pouvez télécharger le logiciel ici http://sourceforge.net/projects/jts-topo-suite/ et lancer testbuilder.sh ou testbuilder.bat en fonction de votre système d'exploitation à jouer pour la découverte. Après avoir compris, les bases, vous devrez faire de même sans interface graphique, mais avec la programmation Java uniquement.

http://geoscript.org/ peut vous aider à faire le lien entre le code python et java (car une implémentation utilise Jython)

ThomasG77
la source
2

Grass peut le faire en utilisant v.transform .

lagerratrobe
la source
2

Vous pouvez utiliser les liaisons gdal python pour effectuer des transformations affines http://www.gdal.org/ogr/osr_tutorial.html

Puisqu'il est construit sur proj / geos / gdal, vous pouvez faire les mêmes choses que dans galbe + plus

Ragi Yaser Burhum
la source