簡體   English   中英

如何根據位置坐標過濾Django查詢集?

[英]How to filter a django queryset based on Location coordinates?

假設我有一個照片模型。 在照片模型中,我的照片模型中有經度和緯度字段。

 class Photo(models.Model):
      photographer = models.ForeignKey(Photographer, related_name = 'shot_owner')
      title = models.CharField(max_length=140, blank=True)
      description = models.CharField(max_length, blank=True)
      longitude = models.DecimalField(max_digits=16, decimal_places = 14, null=True, blank=True)
      latitude = models.DecimalField(max_digits=16, decimal_places = 14, null=True, blank=True)

我使用Django Tastypie作為我的其余框架。 假設某個用戶決定要查看10公里半徑內的所有照片。 一個人怎么能做到這一點? 這是我的以下資源:

class PhotosNearMe(ModelResource):
photographer = fields.ForeignKey(PhotographerResource, 'photographer', full=True)
class Meta:
    queryset = Photo.objects.all()
    resource_name = 'photos-near-me'
    fields = ['id', 'title', 'description', 'latitude','longitude','photographer']
    authentication = BasicAuthentication()
    authorization = DjangoAuthorization()
    serializer = Serializer(formats=['json'])
    include_resource_uri = False
    filtering = {
            'photographer' : ALL_WITH_RELATIONS,

}

def get_object_list(self, request):
        return super(PhotosNearMe, self).get_object_list(request).filter(....)

這是我遇到麻煩的地方。 如前所述,用戶可以向我發送他們的坐標,然后我可以保存它們。 就像是:

 lati = bundle.obj.latitude
 longi = bundle.obj.longitude

稍后,我可以使用lat和long來過濾數據庫中半徑10 km以內的所有圖像。 問題是,如何? 我想按某種范圍進行過濾嗎?

編輯**

我找到了可能可以使用的東西, 在給定坐標的一定范圍內查找項目

無論如何,我可以實現嗎?

如果您要處理大量本質上是地理的數據,則可以考慮使用GeoDjango,它支持空間查找 但是,它僅適用於某些后端,因此如果您的堆棧不符合要求,則可能需要進行大量設置。

否則,另一個選擇是做一些幾何圖形,然后計算出您的點周圍的邊界圓,然后對其進行過濾。 這是一個示例 ,看來還有很多其他有關如何執行此操作的文章。

編輯:針對您關於如何執行此操作的問題,我假設您是指第二部分。 我不是TastyPie的專家,但是看來您將不得不這樣做:

  1. 獲取用戶的經度坐標
  2. 計算距離-看起來您可以在SQL中或在此處本地完成此操作,但是我認為這比最初看起來要復雜得多。 進行平方可能會更容易,因為在這里計算最小值和最大值很容易
  3. 根據最小和最大坐標將過濾器應用於get_object_list。

似乎所有這些都屬於ModelResource.build_filters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM