Skip to content

Instantly share code, notes, and snippets.

@LtGlahn
Last active January 11, 2023 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LtGlahn/28f8462f7d162627c1dfb27170a7276f to your computer and use it in GitHub Desktop.
Save LtGlahn/28f8462f7d162627c1dfb27170a7276f to your computer and use it in GitHub Desktop.
Bytt rekkefølge på X,Y - koordinater (lat, lon) => (lon, lat)

(lat,lon) eller (lon,lat) - slik bytter du rekkefølge i shapely geometriske objekter

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.

Funksjon for å konvertere uavhengig av om det er 2D eller 3D

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 

Geodataframe eksempel

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 )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment