J'ai un simple Dataframe GeoPandas:
Je voudrais télécharger ce GeoDataframe dans une table PostGIS. J'ai déjà une configuration de base de données avec l'extension PostGIS mais je n'arrive pas à ajouter ce Dataframe en tant que table.
J'ai essayé ce qui suit:
engine = <>
meta = MetaData(engine)
eld_test = Table('eld_test', meta, Column('id', Integer, primary_key=True), Column('key_comb_drvr', Text),
Column('geometry', Geometry('Point', srid=4326)))
eld_test.create(engine)
conn = engine.connect()
conn.execute(eld_test.insert(), df.to_dict('records'))
Réponses:
En utilisant la méthode to_sql de Panda et SQLAlchemy, vous pouvez stocker une trame de données dans Postgres. Et puisque vous stockez un Geodataframe, GeoAlchemy gérera la colonne geom pour vous. Voici un exemple de code:
Il convient de noter que le paramètre «if_exists» vous permet de gérer la façon dont la trame de données sera ajoutée à votre table postgres:
la source
J'ai également eu la même question que vous avez posée et j'y ai passé de très nombreux jours (plus que je ne veux l'admettre) à la recherche d'une solution. En supposant que la table postgreSQL suivante avec l'extension postGIS,
voici ce que j'ai finalement réussi à faire:
Je ne peux pas dire si ma logique de connexion à la base de données est la meilleure car j'ai essentiellement copié cela à partir d'un autre lien et j'étais simplement heureux d'avoir réussi à mapper automatiquement (ou à refléter) ma table existante avec la définition de la géométrie reconnue. J'écris du python au code spatial sql depuis seulement quelques mois, donc je sais qu'il y a beaucoup à apprendre.
la source
J'ai une solution qui ne nécessite que psycopg2 et galbée (en plus des géopandas bien sûr). Il est généralement mauvais de parcourir les
(Geo)DataFrame
objets car ils sont lents, mais pour les petits ou pour des tâches ponctuelles, le travail sera toujours effectué.Fondamentalement, cela fonctionne en vidant la géométrie au format WKB dans une autre colonne, puis en la réinjectant pour la
GEOMETRY
saisir lors de l'insertion.Notez que vous devrez créer le tableau à l'avance avec les bonnes colonnes.
la source