是否可以在 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]
我有很多市区多面体,我需要 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]