【问题标题】:GeoDjango + Postgis missing functionsGeoDjango + Postgis 缺少功能
【发布时间】:2021-06-15 16:04:25
【问题描述】:

所以我一直在使用安装了扩展 Postgis 的 Postgres 数据库,然后使用 Django 设置在 Leaflet OpenStreetMap 上绘制空间数据。每当您与数据库通信时,将我的 sql 查询转换为 Django 正在使用的数据库功能有点困难。通常我似乎缺少 Postgis 函数,例如 ST_LineCrossingDirection 或 ST_FrechetDistance。 如何在 Django 中将这些函数与 .annotate 和 .filter 一起使用,而无需编写自定义 sql 查询并执行它们? 我也尝试从 Django 研究 F() 和 Func() ,但我认为这并不能解决我的问题,因为它似乎使用了内置的聚合函数。我还尝试在注释函数中执行 RawSQL 以执行函数 ST_LineCrossingDirection 但它需要我编写一个 WHERE 子句并且条件是我不知道的,直到我到达我正在使用的 filter() 调用intersects() 在两个几何之间。 无论如何..如果有人知道如何使用我认为缺少的 Postgis 功能,请告诉我。因为我的代码变得非常混乱和无效。

谢谢,感谢所有帮助!

【问题讨论】:

    标签: django postgresql postgis geodjango


    【解决方案1】:

    你应该看看GeoFunc,它是 Django 的 Func 的 GeoDjango 等价物。

    from django.contrib.gis.db.models.functions import GeoFunc
    
    class LineCrossingDirection(GeoFunc):
        function='ST_LineCrossingDirection'
    
    class FrechetDistance(GeoFunc):
        function='ST_FrechetDistance'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2022-01-21
      相关资源
      最近更新 更多