目录

一、Python读取PostgreSQL的geometry字段

◼ 查询geometry字段

◼ 插入geometry字段

二、解决报错:parse error - invalid geometry

三、解决错误:类型 "geometry" 不存在


一、Python读取PostgreSQL的geometry字段

geometry字段类型可以存储坐标点信息并进行一系列的关系计算(包含/相交),可以满足某个坐标点是否在某个区域内的条件筛选需求。

python hdf 数据读取 python读取grd数据_mysql

◼ 查询geometry字段

在PostgreSQL中直接查询, 没有问题,不会报错,

select id, city, gcj02 from metro_info

但是在Python中查询,如果导出的geom还是一长串的geometry 格式的话, POINT数据会显示为二进制或者字符串,。

如果想要达到MySQL中的查询效果,需要对POINT数据加上ST_ASTEXT:将几何数据转换成可读的文本类型。得到的是有多个经纬度的,是POLYGON。正确的查询语句

select id, city, ST_ASTEXT(gcj02) from metro_info

python hdf 数据读取 python读取grd数据_python hdf 数据读取_02

这样就可以正常显示,显示的是 LINESTRING ZM格式的数据了。

LineString线串是两个或者多个点生成的有序数组,用来描述地图元素的形状。线串可以通过高度离散化实现,来描述任何一维形式,并应用于地图上的任何可物理观察到的部分。与样条曲线相比,线串可以高效计算,并且可以描述任何不规则形状。线串必须至少包含两个点才能有效,并且不能自相交。它们不能重复包含点(即,不允许p1-> p2-> p2-> p3)。线串可选type属性,以便可以确定其用途。

◼ 插入geometry字段

insert into database.metro_info (city,district,name,gcj02)
values
("成都市","成华区","成渝立交地铁站C口",ST_POINTFROMTEXT("POINT(104.147775 30.625014)"))

想要把ST_ASTEXT读出来的数据又存回到数据库表的geometry数据类型的字段时,我们需要使用ST_GeomFromText,:根据字符串构建几何。

sql = """INSERT INTO lane(lane_id, link_id, phase_id, width, length, max_speed, geom) VALUES (%s, %s, %s, %s, %s, %s, ST_GeomFromText(%s))"""
        my_pg.sql_insert(sql, lane)

python hdf 数据读取 python读取grd数据_字段_03

二、解决报错:parse error - invalid geometry

问题:当我想要插入一条数据,下面是我的sql语句,

sql = "select l_id, k_id, pid, wi, leth, mpeed, ST_GeomFromText(geom) from lane where l_id IN %s" \
          % repr(a.li_lane_dict).replace('[', '(').replace(']', ')')

但是报错,操作失败: parse error - invalid geometry

python hdf 数据读取 python读取grd数据_数据库_04

解决方法: 解决方法看下一个问题的解决方法。

三、解决错误:类型 "geometry" 不存在

问题:当我尝试添加类型为public.geometry的列时,它始终会给出一条错误消息,指出

geometry type doesn't exist

python hdf 数据读取 python读取grd数据_sql_05

解决方法: 为postgresql安装postgis扩展模块,

(1)安装postgis

参考博客

(2)>打开pgAdmin>选择(单击)您的数据库>单击条上的“sql”图标>运行,在指定数据库下执行下面语句

CREATE EXTENSION postgis

(3)或者打开PostgresSQL 客户端pgAdmin,在需要导入shp数据的数据库下面右击"Extensions" 选择"Create"来添加PostGIS扩展,

python hdf 数据读取 python读取grd数据_python hdf 数据读取_06

选择PostGIS扩展,

python hdf 数据读取 python读取grd数据_字段_07

选择扩展版本,点击"Sava"来添加扩展,

python hdf 数据读取 python读取grd数据_sql_08

 添加完成之后,"Extensions" 下就有这个扩展了。

python hdf 数据读取 python读取grd数据_数据库_09

(4)验证:执行下面语句不报错即可,

SELECT ST_SetSRID(ST_Point(-87.71,43.741),4326),ST_GeomFromText('POINT(-87.71 43.741)',4326)

(5)我们就可以在表中创建geometry数据类型的字段了。

python hdf 数据读取 python读取grd数据_sql_10