cela ressemble à une question idiote, mais je ne trouve pas de réponse claire à cela: quelles unités géopandas / galbées utilisent le calcul de la distance / surface entre les objets?
Shapely utilise un système plan cartésien pour calculer les géométries (distance = distance euclidienne)
Shapely ne prend pas en charge les transformations du système de coordonnées. Toutes les opérations sur deux ou plusieurs entités supposent que les entités existent dans le même plan cartésien.
GeoPandas utilise Fiona pour lire les fichiers de formes (et autres) et Pyproj pour les transformations cartographiques.
Le système de référence de coordonnées (CRS) des données vectorielles de la collection est accessible via un attribut crs en lecture seule.
import fiona
c = fiona.open("test.shp")
print c.crs['units']
m
L'unité de calcul de la distance / surface entre les objets avec Shapely est le mètre dans ce cas.
C'est la même chose avec GeoPandas
import geopandas as gp
df = gp.GeoDataFrame.from_file('test.shp')
print df.crs['units']
m
Cela signifie que si vous travaillez avec un crs.unit = degré (WGS84 par exemple) tous les calculs sont wrong.You doit d' abord vous reprojeter couche ( Comment convertir la projection à Ordonnées et abscisses WSG84 dans geopandas? )
read_postgis
du bloc de données résultant n'a qu'un attributcrs
, qui est une chaîne. Il n'a pas d'attributcrs['units']
; tentative de demande qui aboutit à une TypeError.Quelles que soient les unités représentées par les coordonnées dans vos géométries.
Les géométries galbées sont cartésiennes et ne font aucune hypothèse sur le fait d'être Lon / Lat ou quoi que ce soit d'autre.
la source
Pour les géopandas, cela dépend du système de référence de coordonnées affecté au GeoDataFrame.
Pour galbée dans les mêmes unités du plan cartésien, galbée ne prend pas en charge la source CRS .
la source