PostGIS查询报错ValueError: Query missing geometry column 'geom'求助
问题原因与解决办法
错误根源
你用gpd.read_postgis时指定了geom_col='geom',但你的SQL查询只返回了计算出的area数值,根本没有包含名为geom的几何列。而read_postgis是用来创建GeoDataFrame的,必须依赖几何列才能工作,所以触发ValueError。PgAdmin能正常运行是因为它只需要返回查询结果,不需要构建GeoDataFrame,对几何列没有强制要求。
两种解决方式
只需要面积数值:直接用数据库连接工具(比如psycopg2)执行查询获取数值,不用
read_postgis:import psycopg2 # 假设你的con是已配置好的数据库连接参数 with psycopg2.connect(**con) as conn: with conn.cursor() as cur: sql = """SELECT ST_area(St_buffer(st_ShortestLine(factory.geom, station.geom), 500)) AS area FROM factory, station WHERE station.names='B' AND factory.name='A';""" cur.execute(sql) area = cur.fetchone()[0]需要同时获取几何对象和面积:修改SQL,同时返回缓冲后的几何列,再用
read_postgis读取后提取面积:
修改后的SQL:SELECT ST_buffer(st_ShortestLine(factory.geom, station.geom), 500) AS geom, ST_area(ST_buffer(st_ShortestLine(factory.geom, station.geom), 500)) AS area FROM factory, station WHERE station.names='B' AND factory.name='A';执行代码:
gdf = gpd.read_postgis(sql=sql, con=con, geom_col='geom') area = gdf['area'].iloc[0]
内容的提问来源于stack exchange,提问作者kris1994
相关产品推荐
相关产品推荐

