summaryrefslogtreecommitdiff
path: root/apps/locations/models.py
diff options
context:
space:
mode:
authorluxagraf@c63593aa-01b0-44d9-8516-4b9c7e931d7f <luxagraf@c63593aa-01b0-44d9-8516-4b9c7e931d7f>2009-01-05 04:07:10 +0000
committerluxagraf@c63593aa-01b0-44d9-8516-4b9c7e931d7f <luxagraf@c63593aa-01b0-44d9-8516-4b9c7e931d7f>2009-01-05 04:07:10 +0000
commit637d71d2c3a7c1c65a931e1eb094052a095cdf05 (patch)
treeca34a2fead939b133143ec7647a9437d52c89075 /apps/locations/models.py
have at it
Diffstat (limited to 'apps/locations/models.py')
-rw-r--r--apps/locations/models.py170
1 files changed, 170 insertions, 0 deletions
diff --git a/apps/locations/models.py b/apps/locations/models.py
new file mode 100644
index 0000000..57806a2
--- /dev/null
+++ b/apps/locations/models.py
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+# models.py
+
+# All standard Django fields as well as GeoDjango geometry fields and the GeoManager() can be
+# imported from django.contrib.gis.db after adding django.contrib.gis to INSTALLED_APPS
+from django.contrib.gis.db import models
+from django.contrib.sitemaps import Sitemap
+# Used to display html 'help text' links within Admin App
+from django.utils.safestring import mark_safe
+
+class Region(models.Model):
+ name = models.CharField(max_length=50, )
+ slug = models.SlugField()
+ pub_date = models.DateTimeField('Date published',null=True)
+ # GeoDjango specific Polygon Field and GeoManager
+ geometry = models.MultiPolygonField(srid=4326, null=True)
+ lon = models.FloatField('Longitude',help_text="Longitude of centerpoint",null=True)
+ lat = models.FloatField('Latitude',help_text="Latitude of centerpoint",null=True)
+ zoom_level = models.CharField(max_length=2,null=True)
+ # GeoManager, a subclass that adds a rich set of geospatial queryset methods
+ objects = models.GeoManager()
+
+ def get_absolute_url(self):
+ return "/locations/region/%s/" % (self.slug)
+
+ def __unicode__(self): return self.name
+
+
+# imported from django.contrib.gis.db
+from django.contrib.gis.db import models
+
+# Used to display html 'help text' links within Admin App
+from django.utils.safestring import mark_safe
+
+class Country(models.Model):
+ """
+
+ A geographic model based on the v3 of the simplified world borders multipolygon shapefile
+ from http://thematicmapping.org/downloads/world_borders.php.
+
+ Field names, Django types, and max_lengths were autogenerated using the ogrinspect utility with hand
+ edits to add alternative field names and help_text.
+
+ Imported using LayerMapping (requires GDAL) called within the load_data.py script provided
+ within this sample project.
+
+ All fields match the source dataset, an ESRI format shapefile made up of several related files:
+ .shp - holds the vector data that is to be stored in the MultiPolygonField field named'geometry'.
+ .shx - spatial index file for geometries stored in the .shp.
+ .dbf - database file for holding attribute data (can be opened in excel and open office).
+ .prj - contains the spatial reference information for the geometries stored in the .shp
+
+
+ """
+
+ # Regular Django fields corresponding to the attributes in the
+ # world borders shapefile
+ name = models.CharField(max_length=50)
+ area = models.IntegerField(help_text="Area of Country in SQ meters")
+ pop2005 = models.IntegerField('Population 2005')
+ fips = models.CharField('FIPS Code', max_length=2, help_text=mark_safe('<a href="http://www.census.gov/geo/www/fips/fips.html">Federal Information Processing Standard Code</a>'))
+ iso2 = models.CharField('2 Digit ISO', max_length=2, help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>' ))
+ iso3 = models.CharField('3 Digit ISO', max_length=3,help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>' ))
+ un = models.IntegerField('United Nations Code')
+ REGION_CODES = (
+ (0, 'MISC'),
+ (2, 'Africa'),
+ (9, 'Oceania'),
+ (19, 'Americas'),
+ (142, 'Asia'),
+ (150, 'Europe'),
+ )
+ SUBREGION_CODES = (
+ (0, 'MISC'),
+ (5, 'South America'),
+ (11, 'Western Africa'),
+ (13, 'Central America'),
+ (14, 'Eastern Africa'),
+ (15, 'Northern Africa'),
+ (17, 'Middle Africa'),
+ (18, 'Southern Africa'),
+ (21, 'North America'),
+ (29, 'Caribbean'),
+ (30, 'Eastern Asia'),
+ (34, 'Southern Asia'),
+ (35, 'Southeast Asia'),
+ (39, 'Southern Europe'),
+ (53, 'Australia and New Zealand'),
+ (54, 'Melanesia'),
+ (57, 'Micronesia'),
+ (61, 'Polynesia'),
+ (143, 'Central Asia'),
+ (145, 'Western Asia'),
+ (151, 'Eastern Europe'),
+ (154, 'Northern Europe'),
+ (155, 'Western Europe'),
+ )
+ region = models.IntegerField('Region Code',choices=REGION_CODES)
+ subregion = models.IntegerField('Sub-Region Code',choices=SUBREGION_CODES)
+ lon = models.FloatField('Longitude',help_text="Longitude of centerpoint")
+ lat = models.FloatField('Latitude',help_text="Latitude of centerpoint")
+ zoom_level = models.CharField(max_length=2,null=True)
+ slug = models.SlugField(null=True)
+ visited = models.BooleanField(default=False)
+ lux_region = models.ForeignKey(Region, null=True)
+ pub_date = models.DateTimeField('Date published',null=True)
+ # GeoDjango-specific: a geometry field (MultiPolygonField), and
+ # overriding the default manager with a GeoManager instance.
+ geometry = models.MultiPolygonField('Country Border',srid=4326)
+ objects = models.GeoManager()
+
+
+ # Returns the string representation of the model.
+ def __unicode__(self):
+ return self.name
+
+ class Meta:
+ ordering = ['name']
+ verbose_name_plural = 'Countries'
+
+ def get_absolute_url(self):
+ return "/locations/%s/" % (self.slug)
+
+
+class State(models.Model):
+ name = models.CharField(max_length=250, blank=True, null=True,)
+ country = models.ForeignKey(Country)
+ slug = models.SlugField()
+ pub_date = models.DateTimeField('Date published',null=True)
+ geometry = models.MultiPolygonField(srid=4326,null=True)
+ objects = models.GeoManager()
+
+ class Meta:
+ ordering = ['name']
+
+ class Admin:
+ pass
+
+ def __unicode__(self):
+ return "%s" %(self.name)
+
+ def get_absolute_url(self):
+ return "/locations/%s/%s/" % (self.country.slug, self.slug)
+
+class Location(models.Model):
+ state = models.ForeignKey(State)
+ name = models.CharField(max_length=50, )
+ slug = models.SlugField()
+ pub_date = models.DateTimeField('Date published',null=True)
+ # GeoDjango specific Polygon Field and GeoManager
+ geometry = models.MultiPolygonField(srid=4326)
+ # GeoManager, a subclass that adds a rich set of geospatial queryset methods
+ objects = models.GeoManager()
+
+ def get_absolute_url(self):
+ return "/locations/%s/%s/%s/" % (self.state.country.slug, self.state.slug, self.slug)
+
+
+ def __unicode__(self): return self.name
+
+class WritingbyLocationSitemap(Sitemap):
+ changefreq = "weekly"
+ priority = 0.6
+
+ def location():
+ return '/writing/%s/1/' %(self.slug)
+
+ def items(self):
+ return Location.objects.all()
+