代码之家  ›  专栏  ›  技术社区  ›  Manish Shegokar

在python中,我们如何在更短的时间内从PostGIS中获取大型数据集的几何数据类型?

  •  0
  • Manish Shegokar  · 技术社区  · 2 年前

    我在PostGIS中有一个表,它有大约400万条记录。现在,我正试图在python脚本中获取所有这些记录。为此,我使用了以下代码片段:

    代码段

    import pandas.io.sql as psql
    import psycopg2
    from shapely import wkt
    import geopandas
    
    query = "SELECT id, ST_AsText(geom) as geometry FROM <table>"
    
    def postgresql_conn(user, postgres_password, host, port, database):
        connection = psycopg2.connect(user=user, password=postgres_password, host=host, port=port, database=database)
        return connection
    
    conn = postgresql_conn(user, postgres_password, host, port, postgresql_database)
    df = psql.read_sql(query, conn)
    print(df.dtypes)
    

    当我看到输出时 几何柱 是一个 对象数据类型 而不是 几何数据类型 。这是因为它是字符串格式的。但是,我该怎么进去 几何数据类型 在从数据库本身获取数据时? 我试着把它转换成 几何数据类型 从数据库中提取后使用以下命令:

    代码段

    df['geometry'] = geopandas.GeoSeries.from_wkt(df['geometry'])
    df= geopandas.GeoDataFrame(df, geometry='geometry')
    

    它正在采取 一个多小时 只是将400万条记录转换为 几何数据类型 使用上面的代码行。

    是否有一种方法可以在查询自身时以几何数据类型获取它,从而花费更少的时间?如果没有,那么在我从数据库中提取400万条记录后,有没有一种方法可以在很短的时间内转换它?

    任何帮助都将不胜感激!

    谢谢!

    0 回复  |  直到 2 年前
        1
  •  0
  •   Ori Yarden PhD    2 年前

    它只被问过一次吗?也许这会更快:

    df = geopandas.GeoDataFrame(geopandas.GeoSeries.from_wkt(psql.read_sql(psycopg2.connect(user=user, password=postgres_password, host=host, port=port, database=database), conn)['geometry']), geometry='geometry')