geodjango - 在经度和纬度上,如何过滤 geodjango

  显示原文与译文双语对照的内容

我有一个应用程序,现在已经存储经度和纬度,我想将它与geodjango集成在一起。


class Location(models.Model):
 #other fields here
 lat = models.CharField(blank=True, max_length=100)
 lng = models.CharField(blank=True, max_length=100)

现在,我将根据距离筛选所有位置 1km,使用 django.contrib.gis.measure = 1将所有位置和GEOSGeometry重构为点而不是经度。


Location.objects.filter(point__dwithin=(D(km=5)))

任何建议和建议都会。

时间: 作者:

使用 south 。需要 3个迁移才能解决这个问题。 ( 链接:如何安装

1 ) 添加一个名为 pointPointField:


from django.contrib.gis.db import models <-- NEW

#.. .

class Location(models.Model):
 #other fields here
 lat = models.CharField(blank=True, max_length=100)
 lng = models.CharField(blank=True, max_length=100)

 point = models.PointField(null=True) <-- NEW


2 ) 自动执行 schemamigration


patrick@localhost:~$ python manage.py schemamigration my_app_name --auto


3 ) 执行自定义 datamigration,在其中你将从现有的CharField 属性创建每个元素上的点


patrick@localhost:~$ python manage.py datamigration my_app_name latlng_to_point

编辑由 datamigration 管理命令创建的文件:


# my_app_name/migrations/0034__latlng_to_point.py

from django.contrib.gis.geos import Point

#.. .

class Migration(DataMigration):

 def forwards(self, orm):
"Write your forwards methods here."
 # Note: Remember to use orm['appname.ModelName'] rather than"from appname.models..."
 for location in orm['my_app_name.Location'].objects.all():
 location.point = Point(float(location.lng), float(location.lat), srid=4326)
 location.save()

 def backwards(self, orm):
"Write your backwards methods here."
 for location in orm['data.Location'].objects.all():
 location.point = None
 location.save()


4 ) 从模型中删除 CharField,如果需要,请删除 null=True:


class Location(models.Model):
 # other fields here
 # DELETED lat = models.CharField(blank=True, max_length=100)
 # DELETED lng = models.CharField(blank=True, max_length=100)

 point = models.PointField(null=False) <-- NEW: null=False


5 ) 自动创建另一个 schemamigration


patrick@localhost:~$ python manage.py schemamigration my_app_name --auto


6 ) 成功运行迁移 ! 这是将更改写入数据库的时候。


patrick@localhost:~$ python manage.py migrate my_app_name

作者:
...