Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 15 June 2021 11:56

LePanda
Juste Inscrit !
Date d'inscription: 15 Jun 2021
Messages: 1

Equivalence POSTGIS - GEOPANDAS (SHAPELY)

Bonjour tout le monde,

Je travaille sur des données géospatiales (polygon, multi polygon) avec Postgis sur PostgreSQL.
J'ai besoin de faire des algorithmes trop compliqué à faire en SQL donc je suis passé sur du python.
Mais j'ai du mal avec quelques manipulations des geométries, pourtant basiques.

Voici un exemple que je n'arrive pas à faire avec geopandas : prenons une table avec une colonne contenant les géométries. Je veux juste faire l'union géométrique de toute la colonne.
En postgis je ferai simplement :

Code:

select ST_UNION(geom) from maTable

Mais en geopandas ? : gdf["geom"].union() ? gdf["geom"].sum() ?

Quelqu'un aurait-il une solution assez simple pour faire ça svp ?

Merci par avance

Hors ligne

 

#2 Tue 15 June 2021 17:27

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 948
Site web

Re: Equivalence POSTGIS - GEOPANDAS (SHAPELY)

Salut,

Pompage assumé de https://stackoverflow.com/questions/403 … e-geometry

Code:

import geopandas as gpd
import matplotlib.pyplot as plt
from shapely.ops import cascaded_union

inputfile = '/home/thomasg/ne_10m_admin_0_countries.shp' 
gdf = gpd.read_file(inputfile)

# Solution 1

boundary = gpd.GeoSeries(cascaded_union(gdf.geometry))
print(boundary)
boundary.plot(color = 'red') 
plt.show()

# Solution 2, en trichant avec dissolve en créant un colonne "bidon"

gdf['new_column'] = 0 
gdf_new = gdf.dissolve(by='new_column')

print(gdf_new.geometry)

Cordialement

Thomas

Hors ligne

 

Pied de page des forums

Powered by FluxBB