微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Django在多边形中实现点搜索

如何解决使用Django在多边形中实现点搜索

在Django中实现我的应用时遇到了一些困难。该应用程序应该做什么:

  • 接受并将交付区域保存为一组坐标;
  • 接受有关送货地区的快递数据;
  • 接受交货地点的坐标,并返回Courier数据和交货区域ID。

解决了两点,但是最后一点有问题。我需要知道送货地点是否在送货区域中。我发现如何在Python Shell中解决此问题:

from django.contrib.gis.geos import GEOSGeometry

p = GEOSGeometry(location,srid=4326)
DeliveryZone.objects.filter(coordinates__contains=p)

但是我不知道如何在我的应用程序中实现它。

models.py

from django.contrib.gis.db import models


class DeliveryZone(models.Model):
    coordinates = models.MultipolygonField(srid=4326)

    def __str__(self):
        return f"#{self.id}"


class Courier(models.Model):
    delivery_zone = models.ForeignKey(DeliveryZone,on_delete=models.PROTECT) 
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def __str__(self):
        return f"#{self.id} {self.last_name}"


class Delivery(models.Model):
    location = models.PointField(srid=4326)

    def __str__(self):
        return f"#{self.id}"

views.py

from django.contrib.gis.geos import GEOSGeometry
from rest_framework import viewsets

from .serializers import DeliveryZoneserializer,CourierSerializer,DeliverySerializer
from .models import DeliveryZone,Courier,Delivery


class DeliveryZoneViewSet(viewsets.ModelViewSet):
    queryset = DeliveryZone.objects.all()
    serializer_class = DeliveryZoneserializer


class CourierViewSet(viewsets.ModelViewSet):
    queryset = Courier.objects.all()
    serializer_class = CourierSerializer


class DeliveryViewSet(viewsets.ModelViewSet):
    queryset = Delivery.objects.all()
    serializer_class = DeliverySerializer

如有必要,我可以提供更多信息。

解决方法

最佳做法是为此使用a manager。然后,在django rest框架中,您将进入#include <iostream> #include <string> int main() { std::string example = "Hello world!"; char arr[example.length()]; strcpy(arr,example.c_str()); for(int i = 0; i < example.length(); i++) std::cout << arr[i]; return 0; } 并删除get_queryset

伪代码。

queryset

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。