Dette med rekkefølgen (lon,lat) eller (lat,lon) for koordinatsystemet EPSG:4326 er traurig og fruktesløs diskusjon. Her er kode for å flippe mellom disse to variantene, dvs bytte (X,Y) => (Y,X).
Geometrien her er shapely geometriobjekter.
Denne oppskriften funket tidligere på 3D objekter uavhengig av geometritype, det kan godt hende det funker fint for din shapely-versjon:
from shapely.ops import transform
# mygem er 3D objekt
newGeom = transform(lambda x, y,z=None: (y, x, z), mygeom)
Tidligere fungerte denne oppskriften uavhengig av om geometrien var 2D eller 3D, men det funker ikke lenger. For 2D objekter må vi må fjerne z-koordinaten fra kallet til transform:
from shapely.ops import transform
# mygeom er 2D objekt
newGeom = transform(lambda x, y: (y, x), mygeom)
Shapely-objektet er 3D hvis attributten mygeom.has_z == True
.
from shapely.ops import transform
def swapXY( mygeom):
if mygeom.has_z:
mygeom = transform(lambda x, y,z: (y, x, z), mygeom)
else:
mygeom = transform(lambda x, y: (y, x), mygeom)
return mygeom
from shapely.ops import transform
# myGdf er en GeoDataFrame med 3D geometri
myGdf['geometry'] = myGdf['geometry'].apply(lambda mygeom: transform(lambda x, y,z=None: (y, x, z), mygeom))
Alternativt, med den funksjonen swapXY
vi definerte over
myGdf['geometry'] = myGdf['geometry'].apply( swapXY )