将GeoDataFrame写入SQL数据库

强尼

我希望我的问题不会很荒谬,因为令人惊讶的是,据我所知,这个问题显然尚未真正被流行的网站问到。

情况是我有几个csv文件,总共包含1个以上的Mio观测值。每个观察结果都包含一个邮政地址。我打算将所有文件读入单个GeoDataFrame中,对地址进行地址编码,在给定shapefile的情况下执行空间连接,并为每行保存来自多边形的一些信息。我想是相当标准的。这是一次性数据清理过程的一部分。

我的目标是使用此最终数据集建立数据库。这是因为它使我可以非常轻松地共享和搜索数据,以及在网站上绘制一些观察结果。同样,它使得基于某些标准选择观察值然后进行一些分析变得非常容易。

我的问题是,尚未将GeoDataFrame插入数据库的功能-显然是因为GeoPandas应该是数据库的替代品(“ GeoPandas使您能够轻松地在python中执行操作,而该操作否则将需要空间数据库,例如作为PostGIS”)。

当然,我可以遍历每一行并“手动”插入每个数据点,但是我正在这里寻找最佳解决方案。对于任何解决方法,我还担心数据类型可能与数据库的数据类型冲突。是否有“最好的方法”可以带到这里?

谢谢你的帮助。

卡蒂克

因此,我只是为PostGIS数据库实现了这一点,并且可以在此处粘贴我的方法。对于MySQL,您必须修改代码。

第一步是将经过地理编码的列转换为WKB十六进制字符串,因为我将SQLAlchemy与基于pyscopg的引擎一起使用,而且这两个软件包都不是本地理解地理类型的。下一步是照常将数据写入SQL DB(请注意,所有几何列都应转换为包含WKB十六进制字符串的文本列),最后通过执行查询将列的类型更改为几何。请参考以下伪代码:

# Imports
import sqlalchemy as sal
import geopandas as gpd

# Function to generate WKB hex
def wkb_hexer(line):
    return line.wkb_hex

# Convert `'geom'` column in GeoDataFrame `gdf` to hex
    # Note that following this step, the GeoDataFrame is just a regular DataFrame
    # because it does not have a geometry column anymore. Also note that
    # it is assumed the `'geom'` column is correctly datatyped.
gdf['geom'] = gdf['geom'].apply(wkb_hexer)

# Create SQL connection engine
engine = sal.create_engine('postgresql://username:password@host:socket/database')

# Connect to database using a context manager
with engine.connect() as conn, conn.begin():
    # Note use of regular Pandas `to_sql()` method.
    gdf.to_sql(table_name, con=conn, schema=schema_name,
               if_exists='append', index=False)
    # Convert the `'geom'` column back to Geometry datatype, from text
    sql = """ALTER TABLE schema_name.table_name
               ALTER COLUMN geom TYPE Geometry(LINESTRING, <SRID>)
                 USING ST_SetSRID(geom::Geometry, <SRID>)"""
    conn.execute(sql)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将隐藏字段写入sql数据库php

来自分类Dev

将JSON值写入SQL数据库

来自分类Dev

无法将数据写入数据库

来自分类Dev

从CSV写入SQL数据库

来自分类Dev

将R数据帧写入SQL Server数据库的最佳方法是什么

来自分类Dev

将python(pandas)数据框写入SQL数据库错误

来自分类Dev

将大熊猫数据帧写入SQL Server数据库

来自分类Dev

如何将Azure静态Web表单数据发送/写入Azure SQL数据库

来自分类Dev

使用 df.to_sql() 将数据块写入数据库时出现 Pandas 错误

来自分类Dev

使用python将CSV文件写入SQL Server数据库

来自分类Dev

将数字从C#写入SQL数据库时遇到问题

来自分类Dev

是否可以创建每天将SQL数据库写入MongoDB的管道?

来自分类Dev

如何将单选按钮值写入Sql数据库?

来自分类Dev

将数字从C#写入SQL数据库时遇到问题

来自分类Dev

SQL数据库与将Java序列化对象写入文件?

来自分类Dev

MySQL通过C#将数据写入数据库

来自分类Dev

将xml数据写入oracle数据库

来自分类Dev

使用foreach将数据写入Access数据库

来自分类Dev

无法将数据写入数据库Firebase Firestore

来自分类Dev

将数组中的数据写入数据库

来自分类Dev

将数据写入远程VPS数据库

来自分类Dev

如何将PDF签名写入MySQL数据库

来自分类Dev

使用dialogflow将多个参数写入firestore数据库

来自分类Dev

将列表<>写入数据库asp.net

来自分类Dev

将前导零写入Access数据库

来自分类Dev

将数据库行写入python中的文件

来自分类Dev

将jquery ui滑块值写入数据库

来自分类Dev

将 NSDictionary 数组写入 SQLite3 数据库

来自分类Dev

将txt文件写入mySQL数据库