问题标签 [geoalchemy2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 无法将几何转换为geojson
我的问题是这个。我正在为一些数据创建一个模型。
现在,我想将这样的路由转换为 GeoJSON。
我尝试过的事情
返回ST_AsGeoJSON(ST_GeomFromEWKB(:ST_GeomFromEWKB_1))
如果我更改退货:
返回TypeError: 'ST_AsGeoJSON' object is not callable
返回0102000020e610000002000000b34fd4d9bca351c032e14d5134c240c0d24f8055e0a351c0dedea9f4dcbf40c0
这将表明我确实有一个几何对象。
返回TypeError: 'WKBElement' object is not callable
如果我打印路线类型,
返回
我认为它应该返回此类的对象,而不是类本身。在这一点上我很困惑,我不知道我现在应该做什么。
有什么建议么?
python - Geoalchemy2 & ST_Within - 点和多边形之间的类型不匹配?
我想运行一个查询,它返回一个矩形内的每个点,其中的点和矩形基于真实世界的经度和纬度。
这是失败的查询:
它运行时没有任何抱怨,但在调用 results.first() 时,我看到以下错误和警告:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) 函数 st_within(geography, geometry) 不存在第 3 行: WHERE ST_Within(store.location, ST_GeomFromEWKT('SRID=4326;P... ^ 提示:没有函数匹配给定名称和参数类型。您可能需要添加显式类型转换。[SQL: 'SELECT store.id AS store_id \nFROM store \nWHERE ST_Within(store.location, ST_GeomFromEWKT(%(ST_GeomFromEWKT_1)s )) \n LIMIT %(param_1 )s'] [参数:{'ST_GeomFromEWKT_1': 'SRID=4326;POLYGON((150 -33, 152 -33, 152 -31, 150 -31, 150 -33))', 'param_1': 1}]
但是,我可以通过在查询中创建一个虚拟点来使查询工作(这会导致每个商店都匹配):
这表明问题出在我的 Store.location 字段上,但我没有尝试过 [包括 type_coerce(Store.location, Geoography)]。
这是我对位置列的 SQLAlchemy 定义:
这是我运行将经度和纬度转换为位置的代码(我也尝试使用 func.ST_GeomFromEWKT() 来强制类型):
Python 告诉我 Store.location 的类型是“geoalchemy2.elements.WKBElement”,这是我对文档的期望。
请问有人对如何修复查询有任何建议吗?
仅供参考我正在运行:
- PostgreSQL 9.6.1
- psycopg2 2.6.2
- SQLAlchemy 1.1.4 和
- 地球炼金术2 0.4.0
python - PostGIS:将文本 WKT/WKB/WKB 十六进制转换为多边形
我正在使用 Python(GeoPandas、SQLAlchemy、GeoAlchemy2)将多边形形状导入 PostGIS 数据库。我按照这里提到的说明进行操作。
我有一个数据库,其中有一个名为的表maps_region
,其列/字段名为geom
.
我可以将多边形字段(geom
名为.
我尝试使用geom
几种不同格式的字段导入——众所周知的文本 (WKT) 格式、WKB 格式和 WKB 十六进制格式——但无法从这三种格式中的任何一种转换为多边形。
例如,我将形状geom
作为 WKT 格式导入到字段中,然后使用以下命令转换为 WKB Hex 格式,效果很好:
但是,当我尝试将geom
字段从text
格式转换为Polygon
类型时,出现以下错误:
我尝试了两种方法:转换为 Polygon 和转换为 MultiPolygon——但都没有奏效。相反,错误消息只是颠倒了!
任何帮助将不胜感激。
提前致谢!
python - SQLALchemy - 没有映射外键的关系,使用自定义primaryjoin和func
我有两个模型,我想将它们关联起来(多对多),但我不想为此使用辅助表,因为位置(geom 属性)会不断变化。我正在使用 ST_Intersects,这是来自 postgis 的函数并返回一个布尔值,当几何与其他几何相交时为真。
使用此配置抛出异常
但是如果我在primaryjoin中添加remote()和foreign(),sqlalchemy会抛出同样的异常
使用纯 SQL,我可以:
python - 错误空间子集和 PostGIS 数据库
我正在尝试使用sqlalchemy
和geoalchemy2
在 Python 3.5 上进行空间操作。我有一个以点为geom
属性的表。我已经阅读了表格并按照文档说明进行操作:
这正确地返回了我的表列的名称。现在,我想创建数据的空间子集,仅选择 POLYGON 对象内的点。我试过ST_Contains
和ST_Intersection
:
POLYGON 是一个定义了SRID=4326
. 我已经尝试过使用同一个多边形的不同形式,但没有一个奏效。执行查询时,返回以下错误:
我在哪里失败?
python - 如何使用 Geoalchemy2 更新空间数据(如点)?
我只是写了一个小网站来展示一些使用烧瓶和 Geoalchemy2 的空间数据。现在我可以在我的 postgresql 数据库中插入一些新的空间记录(例如,点),但是当我想更新它们时遇到了一些麻烦。
我的代码如下。
模型.py:
初始化.py:
视图.py:
当我添加新的点记录时,我的代码有效。
当我编辑存在点时,我的更新部分代码返回打印结果(我只想知道如何编写它。):
这看起来不像是一个类,而是一个元组,所以我不能用它来更新它
在官方文档中只有将新对象添加到数据库中的示例,所以我真的很困惑。
是否有任何 MAGIC 语句来更新数据,或者是否有任何其他地理 orm 库可供使用?
感谢任何答案。
python - 如何使用带有空间列的 SQLalchemy 在 mysql 中创建表?
我正在尝试使用 SQLalchemy 和 geoalchemy2 创建一个表,如下所示:
这是针对 mysql 数据库(实际上是与 AWS mysql 兼容的 Aurora 数据库)。
我得到一个例外如下:
我不确定它是否表达了正确的方言。
我可以这样手动执行此操作:
有任何想法吗?
python - Geometry('POINT') 列作为 str 对象返回
我有一个 sqlalchemy 模型对象,它具有以下列:
我在模型类中实现了一个 to_dict 函数,为此我需要解构 gps 对象以给我经纬度。这在另一个模型中成功地为我工作。但由于某种原因,在有问题的类中,以下代码导致属性错误('str' object has no attribute 'data'):
我像这样存储gps数据:
这是来自 postgresql 的表描述:
一旦 Pin 对象被创建,我就会调用 as dict 方法,如下所示:
让我发疯的是,某些代码确实适用于其他模型。任何见解将不胜感激。
编辑:在 Ilja 的评论之后,我了解到问题是对象没有被写入磁盘,显然几何列将被视为字符串,直到发生这种情况。但是即使现在我也遇到了同样的错误。基本上,在这一点上,transaction.commit() 函数没有做我认为它应该做的事情......
与此相关的是会话对象的配置。由于所有这些都在 Pyramid Web 框架下,因此我使用默认会话配置,如此处所述(您可以跳过前几段,直到他们开始讨论/models/__init__.py
文件。如果需要,请按 Ctrl + F)。
如果我遗漏了一些重要的细节,请在下面复制有问题的类:
geoalchemy2 - Geoalchemy2“没有名为 Utils 的模块”
我正在尝试将 GeoAlchemy2 与 Python 3.5 一起使用并收到以下错误:
有一个简单的解决方案吗?
python-3.x - 在烧瓶棉花糖/棉花糖-sqlalchemy 中将 WKB 序列化为 WKT 或 geojson
我在 flaskSQLAlchemy 中创建的模型中有一堆 GIS 表。这些模型中的每一个都有一个“geom”字段,它是一个 WKB 对象。需要将 JSON 序列化为 WKT 或 geojson,以便 API GET 调用可以工作。
我尝试使用 geoalchemy2 函数,但我被卡住了。我使用烧瓶棉花糖/棉花糖-sqlalchemy 组合,我尝试了类似以下的方法,但没有运气。
如果可以,请提供一个代码示例,如何序列化/反序列化棉花糖炼金术中的字段。或者此时欢迎任何答案。