[英]Geo Django get cities from latitude and longitude
我正在學習如何使用Geo Django。 當用戶注冊時,我保存緯度和經度信息,如下所示:
from django.contrib.gis.db import models
from django.contrib.gis.geos import Point
class GeoModel(models.Model):
"""
Abstract model to provide GEO fields.
"""
latitude = models.FloatField(blank=True, null=True, verbose_name='Latitude')
longitude = models.FloatField(blank=True, null=True, verbose_name='Longitude')
location = models.PointField(blank=True, null=True)
class Meta:
abstract = True
def save(self, *args, **kwargs):
if self.latitude and self.longitude:
self.location = Point(float(self.latitude), float(self.longitude))
super(GeoModel, self).save(*args, **kwargs)
接下來我想添加一個名為city
的新字段,其中**我想存儲城市“名稱”,即倫敦基於給出的long和lat詳細信息。
我已經看過django-cities
,它們從Geo Name中保存了一個城市數據庫,但是這看起來有些過分而且不兼容Python 3,所以對我來說不行。 我見過一個名為geopy的軟件包,但這似乎完全取代了Geo Django並使用了帶有限制的Google API。
我想堅持使用Geo Django並以某種方式進行查找以找出基於long和lat的城市名稱,那么我的選擇是什么? 即。
接近這個是正確的方法嗎? 如果是這樣,我如何將數據存入我的數據庫,然后使用Geo Django查找城市名稱?
你有幾個解決方案來做到這一點:
創建另一個模型城市
from django.contrib.gis.db import models class City(models.Model): name = models.CharField(max_lenght=255) geometry = models.MultiPolygonField() objects = models.GeoManager()
然后,您可以找到包含您所在位置的城市名稱:
geomodel = GeoModel(...)
city = City.objects.get(geometry__contains=geomodel.location)
city_name = city.name
根據您感興趣的國家/地區,您可以找到城市幾何圖形以填充OpenData中的City表格(例如http://www.gadm.org/country (未經測試但似乎建議打開shapefile))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.