Je fais un calcul très simple de la longueur d'une polyligne en utilisant galbée:
from shapely.geometry import LineString
...
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)
Mes coordonnées sont en WGS84. Je n'arrive pas à trouver d'informations sur l'attribut de longueur galbée. Quelle est l'unité de l'attribut de longueur? Existe-t-il un moyen facile de convertir en km ou en mètres?
Réponses:
Comme le dit alfaciano dans galbée , la distance est la distance euclidienne ou la distance linéaire entre deux points sur un plan et non la distance du grand cercle entre deux points sur une sphère.
Pour la distance du grand cercle, vous devez utiliser des algorithmes comme loi des cosinus ou la formule Haversine (regardez pourquoi la loi des cosinus est-elle plus préférable que la haversine lors du calcul de la distance entre deux points de latitude-longitude? ) Ou utilisez le module pyproj qui effectue des calculs géodésiques.
Vous pouvez tester le résultat sur le Calculateur de distance de Latitude Latitude
la source
geopy
qui a implémenté un calcul de distance grand cercle et de distance Vincenty.geopy
.Source: http://toblerity.org/shapely/manual.html#coordinate-systems
Étant
shapely
complètement agnostique par rapport à SRS, il est tout à fait évident que l'attribut de longueur est exprimé dans la même unité de coordonnées de votre chaîne de lignes, à savoir les degrés. En réalité:Au lieu de cela, si vous souhaitez exprimer la longueur en mètres, vous devez transformer vos géométries du WGS84 en un SRS projeté en utilisant pyproj (ou, mieux, exécuter le calcul de la distance géodésique, voir la réponse de Gene). En détail, depuis la version 1.2.18 (
shapely.__version__
),shapely
prend en charge les fonctions de transformation de la géométrie ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ) avec lesquelles nous pouvons l'utiliser en conjonctionpyproj
. Voici un petit exemple:la source