postgresql 选择几何数组

hjzp0vay  于 2023-01-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(154)

我已经创建了不规则的几何表,其中包含点阵列作为几何类型列,我试图检索每个测量点的ID点。
但我有一个错误:
编程错误:(psycopg2.errors.CannotCoerce)无法将类型geometry []强制转换为几何体行1:选择ST_X(铸造(数据库、不规则、轴作为几何体(几何体...
这是它在数据库中的方式:

column_name      | data_type | numeric_scale || udt_schema | udt_name  | 
----------------------+-----------+---------------+-------------+------------+
 id                   | integer   |             0 | | pg_catalog | int4      |
 measurement_point_id | integer   |             0 | | pg_catalog | int4      |
 axises               | ARRAY     |               | | public     | _geometry |

这是我的不规则表类:

#%% Irregular Class
class Irregular (object):
    measurement_point_id = relationship("measurement_points", back_populates="id")

    def __init__(self,measurement_point_id,axises=None,id= None):
        self.id = id
        self.measurement_point_id = measurement_point_id
        self.axises = axises
        #self.is_xy = xy

#Irregular Object
__tablename__ = 'irregular'
irregular = Table(
    __tablename__,meta,
    Column ('id', Integer, primary_key = True), 
    Column ( 'measurement_point_id',Integer,ForeignKey('measurement_points.id')),
    Column ( 'axises', ARRAY(Geometry('POINT'))),
    #Column ( 'is_xy', Boolean),
)
mapper(Irregular, irregular)

这就是我试图获取数据的方式:

session.query(fns.ST_X(cast(tb.Irregular.axises, geoalchemy2.types.Geometry)),\
                             fns.ST_Y(cast(tb.Irregular.axises, geoalchemy2.types.Geometry)).filter(tb.measurement_point_id == id).all()

我取下石膏:编程错误:(psycopg2.errors.UndefinedFunction)函数st_x(几何[])不存在第1行:选择ST_X(数据库不规则轴)作为"ST_X_1",ST_Y(数据库...
我想我需要检索元组数组,但我找不到如何从python端转换,我应该使用哪个函数。

gz5pxeao

gz5pxeao1#

我已经用

session.query(fns.ST_AsGeoJSON(fns.ST_Collect(tb.Irregular.axises)))
.filter(tb.Irregular.measurement_point_id == mpoint_id)
.first()[0]

相关问题