gpt4 book ai didi

django - geodjango 两个模型中点之间的距离

转载 作者:行者123 更新时间:2023-12-02 04:44:59 24 4
gpt4 key购买 nike

首先我需要说这是我的第一个 GeoDjango 任务 - 所以如果有一些“RTF”行请告诉我。

我有两个 Django 模型:

设施模型。对于 code1 和 code2 的组合,不同位置可以存在几个设施名称。

from django.contrib.gis.db.models import PointField, GeoManager, Model

class Facility(models.Model):
facilityName = models.CharField(max_length=255)
code1 = models.CharField(max_length=255)
codeName1 = models.CharField(max_length=255)
code2 = models.CharField(max_length=255)
codeName2 = models.CharField(max_length=255)
point = point = PointField()

监督模型。每个设施可以有许多提交。
使用静态方法,我可以匹配 code1 和 code2 并应用正确的 codeName1 和 codeName2。

class Supervision(models.Model):
name = models.CharField(max_length=255)
facilityName = models.CharField(max_length=255)
code1 = models.CharField(max_length=255)
codeName1 = models.CharField(max_length=255)
code2 = models.CharField(max_length=255)
codeName2 = models.CharField(max_length=255)
point = models.PointFiled()

@staticmethod
def update_codeName1():
for r in Facility.objects.all():
Supervision.objects.filter(code1=r.code1).update(codeName1=r.codeName1)

@staticmethod
def update_codeName2():
for r in Facility.objects.all():
Supervision.objects.filter(code2=r.code2).update(codeName2=r.codeName2)

主要任务是将监督模型中的facilityName与Facility模型中的facilityName作为另一个静态方法进行匹配和更新。

这应该在代码 1、代码 2 以及设施点和监控点之间距离较小的点上查找。

非常感谢任何提示、指导等。

谢谢

J

更新1:我正在尝试类似的事情,但我还不确定结果:

@staticmethod
for r in Supervision.objects.filter(code1Name='Default'):
pnt = r.point
Facility.objects.filter(code1=r.code1, code2=r.code2,point__distance_lte=(pnt,0.2))

更新2:

取得了一些进展,但仍然需要从 distance() 的结果中获取最小距离,即 float ghzzz 或尝试切换到米...

from app.models import Supervision, Facility
from django.contrib.gis.geos import GEOSGeometry
def distance():
for r in Supervision.objects.filter(lganame='Defaul'):
pnt_01 = GEOSGeometry(r.point.wkt, srid=4326)
print str(pnt_01)+' SS in '+r.hf_name
rs = Facility.objects.filter(code1=r.code1, code2=r.code2)
for x in rs:
pnt_02 = GEOSGeometry(x.point.wkt, srid=4326)
print str(pnt_02)+' Facility: '+x.name+' : '+str(pnt_01.distance(pnt_02)*100)

最佳答案

接下来是回答时间:

def text1():
for r in Supervision.objects.all():
try:
x = Facility.objects.filter(code1=r.code1, code2=r.code2).distance(r.point).order_by('distance')[:1].get()

r.facilityName = x.facilityName
r.save()
print x.primary_name
except ObjectDoesNotExist:
print 'Does Not Exist!'
pass

关于django - geodjango 两个模型中点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com