是否可以在 GeoDjango 或 PostGIS 中查询 select 具有最大面积的多边形?

Is it possible to select the polygon with the maximum area with a query in GeoDjango or PostGIS?

我有很多市区多面体,我需要 select 面积最大的多面体。目前我遍历每个对象并计算每个对象的面积,但这是低效的。做这个的最好方式是什么?

使用SQL,这个查询是:

SELECT *, ST_Area(geom) FROM mytable ORDER BY ST_Area(geom) DESC LIMIT 1;

这将计算整个 table 的每个几何图形的面积。

如果经常使用ST_Area(geom),可以对表达式做索引:

CREATE INDEX mytable_geom_area_idx ON mytable (ST_Area(geom))

我不确定您是否可以在 GeoDjango 中直接调用 ST_Area 并结合聚合查询,但您可以使用 raw SQL query。例如,使用正确的 Postgres 查询,如@MikeT 所发布的那样,

top_area = ModelName.objects.raw('SELECT * FROM sometable ORDER BY ST_Area(geom) DESC LIMIT 1')[0]