【发布时间】:2015-10-24 00:55:50
【问题描述】:
首先我要说这是我的第一个 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)
主要任务是将监督模型中的设施名称与设施模型中的设施名称作为另一个静态方法进行匹配和更新。
这应该是在 code1、code2 和距离较小的点 btw 设施点和监督点上查找。
非常感谢任何提示、方向等。
谢谢,
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:
取得了一些进展,但仍需要与距离结果(浮动 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)
【问题讨论】: