$ wget http://download.osgeo.org/geos/geos-3.2.2.tar.bz2 $ tar xjf geos-3.2.2.tar.bz2 $ cd geos-3.2.2 $ ./configure $ make $ sudo make install $ cd ..
$ wget http://download.osgeo.org/proj/proj-4.7.0.tar.gz $ wget http://download.osgeo.org/proj/proj-datumgrid-1.5.zip $ tar xzf proj-4.7.0.tar.gz $ cd proj-4.7.0/nad $ unzip ../../proj-datumgrid-1.5.zip $ cd .. $ ./configure $ make $ sudo make install $ cd ..
$ wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz $ tar xzf postgis-1.5.2.tar.gz $ cd postgis-1.5.2 $ ./configure $ make $ sudo make install $ cd ..
$ sudo su - postgres
$ createdb -T template_postgis <db name>
INSTALLED_APPS = ( #.................... 'django.contrib.gis', #.................... ) #.............................................. GEOIP_PATH = os.path.join(MEDIA_ROOT, 'geoip') GEOIP_COUNTRY = 'GeoIP.dat' GEOIP_CITY = 'GeoLiteCity.dat'
class WorldPart(models.Model): name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('Part of the World') verbose_name_plural = _('Parts of the World') class Country(models.Model): name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) code = models.CharField(max_length=2, verbose_name=_('Code'), null=True, blank=True) worldpart = models.ForeignKey(WorldPart, verbose_name=_('Part of the World'), null=True, blank=True) flag = models.ImageField(upload_to=os.path.join(settings.STATIC_ROOT, 'img', 'flags'), verbose_name=_('Flag'), null=True, blank=True) is_active = models.BooleanField(verbose_name=_('Is active')) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('Country') verbose_name_plural = _('Countries') class City(models.Model): country = models.ForeignKey(Country, verbose_name=_('Country')) name_ru = models.CharField(max_length=255, verbose_name=_('Name RU'), null=True, blank=True) name_en = models.CharField(max_length=255, verbose_name=_('Name EN'), null=True, blank=True) region = models.CharField(max_length=100, verbose_name=_('Region'), null=True, blank=True) postal_code = models.CharField(max_length=10, verbose_name=_('Postal Code'), null=True, blank=True) latitude = models.CharField(max_length=255, verbose_name=_('Lattitude'), null=True, blank=True) longitude = models.CharField(max_length=255, verbose_name=_('Longitude'), null=True, blank=True) is_active = models.BooleanField(verbose_name=_('Is active')) def __unicode__(self): return self.name_ru class Meta: ordering = ['name_ru', 'name_en',] verbose_name = _('City') verbose_name_plural = _('Cities')
# >>> from django.contrib.gis.utils import GeoIP >>> from myapp.models import * >>> g = GeoIP() >>> cn = g.country('google.com') >>> cn {'country_code': 'US', 'country_name': 'United States'} >>> try: >>> cn_db = Country.objects.get(code=cn['country_code']) >>> except Country.DoesNotExist: >>> pass
Source: https://habr.com/ru/post/179643/
All Articles