geodjango距离btw分两种型号

时间:2015-08-01 11:52:11

标签: django postgis geodjango

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

我有两个Django模型:

设施模型。对于code1和code2的组合,可以在不同位置存在少量facilityNames。

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)

主要任务是使用Facility模型中的facilityName匹配和更新Supervision模型中的facilityName作为另一种静态方法。

这应该是对code1,code2和具有较小距离btw设施点和监督点的点进行查找。

任何提示,指示等最受赞赏。

谢谢,

Ĵ

更新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)

1 个答案:

答案 0 :(得分:0)

时间回答:

FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
    String line = sc.nextLine();
    // System.out.println(line);
}
// note that Scanner suppresses exceptions
if (sc.ioException() != null) {
    throw sc.ioException();
}
} finally {
if (inputStream != null) {
    inputStream.close();
}
if (sc != null) {
    sc.close();
}