簡體   English   中英

Geo Django從緯度和經度獲得城市

[英]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的城市名稱,那么我的選擇是什么? 即。

  1. 找到一種安裝方式http://www.geonames.org/ data django-cities不適用於Python 3和Django 1.8.x.
  2. 不知何故使用Geo Django使用數據進行查找? (不確定要做到這一點)

接近這個是正確的方法嗎? 如果是這樣,我如何將數據存入我的數據庫,然后使用Geo Django查找城市名稱?

你有幾個解決方案來做到這一點:

  1. 創建另一個模型城市

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

  1. 使用反向地理編碼器。 如果符合您的需求,Google可以提供此類服務或查看http://www.geonames.org/export/reverse-geocoding.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM