问题标签 [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.

0 投票
3 回答
3162 浏览

python - 无法将几何转换为geojson

我的问题是这个。我正在为一些数据创建一个模型。

现在,我想将这样的路由转换为 GeoJSON。

我尝试过的事情

返回ST_AsGeoJSON(ST_GeomFromEWKB(:ST_GeomFromEWKB_1))

如果我更改退货:

返回TypeError: 'ST_AsGeoJSON' object is not callable

返回0102000020e610000002000000b34fd4d9bca351c032e14d5134c240c0d24f8055e0a351c0dedea9f4dcbf40c0 这将表明我确实有一个几何对象。

返回TypeError: 'WKBElement' object is not callable

如果我打印路线类型,

返回

我认为它应该返回此类的对象,而不是类本身。在这一点上我很困惑,我不知道我现在应该做什么。

有什么建议么?

0 投票
2 回答
1317 浏览

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
0 投票
1 回答
1878 浏览

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——但都没有奏效。相反,错误消息只是颠倒了!

任何帮助将不胜感激。

提前致谢!

0 投票
0 回答
465 浏览

python - SQLALchemy - 没有映射外键的关系,使用自定义primaryjoin和func

我有两个模型,我想将它们关联起来(多对多),但我不想为此使用辅助表,因为位置(geom 属性)会不断变化。我正在使用 ST_Intersects,这是来自 postgis 的函数并返回一个布尔值,当几何与其他几何相交时为真。

使用此配置抛出异常

但是如果我在primaryjoin中添加remote()和foreign(),sqlalchemy会抛出同样的异常

使用纯 SQL,我可以:

0 投票
1 回答
238 浏览

python - 错误空间子集和 PostGIS 数据库

我正在尝试使用sqlalchemygeoalchemy2在 Python 3.5 上进行空间操作。我有一个以点为geom属性的表。我已经阅读了表格并按照文档说明进行操作:

这正确地返回了我的表列的名称。现在,我想创建数据的空间子集,仅选择 POLYGON 对象内的点。我试过ST_ContainsST_Intersection

POLYGON 是一个定义了SRID=4326. 我已经尝试过使用同一个多边形的不同形式,但没有一个奏效。执行查询时,返回以下错误:

我在哪里失败?

0 投票
1 回答
641 浏览

python - 如何使用 Geoalchemy2 更新空间数据(如点)?

我只是写了一个小网站来展示一些使用烧瓶和 Geoalchemy2 的空间数据。现在我可以在我的 postgresql 数据库中插入一些新的空间记录(例如,点),但是当我想更新它们时遇到了一些麻烦。

我的代码如下。

模型.py:

初始化.py:

视图.py:

当我添加新的点记录时,我的代码有效。

当我编辑存在点时,我的更新部分代码返回打印结果(我只想知道如何编写它。):

这看起来不像是一个类,而是一个元组,所以我不能用它来更新它

官方文档中只有将新对象添加到数据库中的示例,所以我真的很困惑。

是否有任何 MAGIC 语句来更新数据,或者是否有任何其他地理 orm 库可供使用?

感谢任何答案。

0 投票
2 回答
1062 浏览

python - 如何使用带有空间列的 SQLalchemy 在 mysql 中创建表?

我正在尝试使用 SQLalchemy 和 geoalchemy2 创建一个表,如下所示:

这是针对 mysql 数据库(实际上是与 AWS mysql 兼容的 Aurora 数据库)。

我得到一个例外如下:

我不确定它是否表达了正确的方言。

我可以这样手动执行此操作:

有任何想法吗?

0 投票
1 回答
1175 浏览

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)。

如果我遗漏了一些重要的细节,请在下面复制有问题的类:

0 投票
0 回答
752 浏览

geoalchemy2 - Geoalchemy2“没有名为 Utils 的模块”

我正在尝试将 GeoAlchemy2 与 Python 3.5 一起使用并收到以下错误:

有一个简单的解决方案吗?

0 投票
1 回答
707 浏览

python-3.x - 在烧瓶棉花糖/棉花糖-sqlalchemy 中将 WKB 序列化为 WKT 或 geojson

我在 flaskSQLAlchemy 中创建的模型中有一堆 GIS 表。这些模型中的每一个都有一个“geom”字段,它是一个 WKB 对象。需要将 JSON 序列化为 WKT 或 geojson,以便 API GET 调用可以工作。

我尝试使用 geoalchemy2 函数,但我被卡住了。我使用烧瓶棉花糖/棉花糖-sqlalchemy 组合,我尝试了类似以下的方法,但没有运气。

如果可以,请提供一个代码示例,如何序列化/反序列化棉花糖炼金术中的字段。或者此时欢迎任何答案。