从具有点列的 Geodjango 查询集中查找最外层坐标
Posted
技术标签:
【中文标题】从具有点列的 Geodjango 查询集中查找最外层坐标【英文标题】:Find outermost cordinates from Geodjango queryset which has point column 【发布时间】:2016-05-27 14:44:47 【问题描述】:我对地理数据和 geodjango 本身还是很陌生。假设我有模型:
class Employee(models.Model):
name = models.CharField(max_length=30)
location = PointField()
我想使用leafletjs
显示地图,例如http://leafletjs.com/examples/quick-start-example.html,并在其位置上标明员工姓名和标记。
现在假设员工遍布德国,但他们中的一些人远程工作,并且位于某个未知的位置。如果它们只位于德国,我可以显示整个德国的地图并根据坐标添加标记。问题是,如果一名员工位于俄罗斯,我需要为所有其他国家/地区/员工显示俄罗斯等信息。
回到代码示例:
如果我的Employee
模型查询集返回位于德国和俄罗斯两个国家的三名员工,我想用标记显示德国到俄罗斯的地图,而不是整个世界的地图。如何从查询集中计算这个最外层坐标?或者还有什么其他方法可以解决上述问题?
【问题讨论】:
俄罗斯是一个巨大的国家,你想完整地展示俄罗斯和德国吗?那会让地图缩小到很大程度?为什么不只使用最好的配件盒? 我确实在寻找最合适的盒子。但看起来我不必担心自己找到它,leafletjs 似乎可以自己处理。我会更新它的进展情况。 【参考方案1】:Leaflet 应该能够根据您希望在地图上显示的点计算地图的边界框。这也可以很容易地完成geodjango
。 extent 是您正在寻找的。
bounds = Employee.objects.filter(some filter).extent()
这在新版本中已弃用,改为使用:
from django.contrib.gis.db.models import Extent
bounds = Employee.objects.filter(some filter).aggregate(Extent('point'))['point__extent']
在 LefletJS 中:
var mymap = L.map('mapid').fitBounds(51.505, 51.507], [51.56, 50.98]], padding: [10, 10]);
【讨论】:
很高兴能帮上忙以上是关于从具有点列的 Geodjango 查询集中查找最外层坐标的主要内容,如果未能解决你的问题,请参考以下文章