summaryrefslogtreecommitdiff
path: root/apps/locations
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
have at it
Diffstat (limited to 'apps/locations')
-rw-r--r--apps/locations/__init__.py0
-rw-r--r--apps/locations/admin.py241
-rw-r--r--apps/locations/models.py170
-rw-r--r--apps/locations/urls.py6
-rw-r--r--apps/locations/views.py11
5 files changed, 428 insertions, 0 deletions
diff --git a/apps/locations/__init__.py b/apps/locations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/apps/locations/__init__.py
diff --git a/apps/locations/admin.py b/apps/locations/admin.py
new file mode 100644
index 0000000..7fcfee5
--- /dev/null
+++ b/apps/locations/admin.py
@@ -0,0 +1,241 @@
+from django.contrib import admin
+from django.contrib.gis.admin import OSMGeoAdmin
+from locations.models import Region,Country,Location,State
+from django.contrib import databrowse
+from django.contrib.gis.maps.google import GoogleMap
+from django.conf import settings
+
+GMAP = GoogleMap(key=settings.GOOGLE_MAPS_API_KEY)
+databrowse.site.register(Region)
+
+class RegionAdmin(OSMGeoAdmin):
+ # Standard Django Admin Options
+ list_display = ('name','slug')
+ prepopulated_fields = {'slug': ('name',)}
+ search_fields = ('name',)
+ ordering = ('name',)
+ save_as = True
+ search_fields = ['name',]
+ list_select_related = True
+ fieldsets = (
+ ('Region', {'fields': ('name','slug','pub_date'), 'classes': ('show','extrapretty')}),
+ ('Editable Map View', {'fields': ('geometry',), 'classes': ('show', 'wide')}),
+ )
+ extra_js = [GMAP.api_url + GMAP.key]
+ map_template = 'gis/admin/google.html'
+ # Default GeoDjango OpenLayers map options
+ # Uncomment and modify as desired
+ # To learn more about this jargon visit:
+ # www.openlayers.org
+
+ #default_lon = 0
+ #default_lat = 0
+ #default_zoom = 4
+ #display_wkt = False
+ #display_srid = False
+ #extra_js = []
+ #num_zoom = 18
+ #max_zoom = False
+ #min_zoom = False
+ #units = False
+ #max_resolution = False
+ #max_extent = False
+ #modifiable = True
+ #mouse_position = True
+ #scale_text = True
+ #layerswitcher = True
+ scrollable = False
+ #admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
+ map_width = 700
+ map_height = 325
+ #map_srid = 4326
+ #map_template = 'gis/admin/openlayers.html'
+ #openlayers_url = 'http://openlayers.org/api/2.6/OpenLayers.js'
+ #wms_url = 'http://labs.metacarta.com/wms/vmap0'
+ #wms_layer = 'basic'
+ #wms_name = 'OpenLayers WMS'
+ #debug = False
+ #widget = OpenLayersWidget
+
+# Finally, with these options set now register the model
+# associating the Options with the actual model
+admin.site.register(Region,RegionAdmin)
+
+class CountryAdmin(OSMGeoAdmin):
+ """
+ # Standard Django Admin Options
+ list_display = ('name','slug','region')
+ prepopulated_fields = {'slug': ('name',)}
+ search_fields = ('name',)
+ ordering = ('name',)
+ save_as = True
+ search_fields = ['name',]
+ list_select_related = True
+ fieldsets = (
+ ('Country', {'fields': ('name','slug','abbr','region','pub_date'), 'classes': ('show','extrapretty')}),
+ ('Editable Map View', {'fields': ('geometry',), 'classes': ('show', 'wide')}),
+ )
+ """
+
+ # Standard Django Admin Options
+ list_display = ('name','pop2005','region','subregion',)
+ search_fields = ('name',)
+ ordering = ('name',)
+ list_filter = ('visited','region','subregion',)
+ save_as = True
+ search_fields = ['name','iso2','iso3','subregion','region']
+ list_select_related = True
+ fieldsets = (
+ ('Country Attributes', {'fields': (('name','pop2005','slug','zoom_level','visited')), 'classes': ('show','extrapretty')}),
+ ('Country Codes', {'fields': ('region','subregion','iso2','iso3','un',), 'classes': ('collapse',)}),
+ ('Area and Coordinates', {'fields': ('area','lat','lon',), 'classes': ('collapse', 'wide')}),
+ ('Editable Map View', {'fields': ('geometry',), 'classes': ('show', 'wide')}),
+ )
+
+ extra_js = [GMAP.api_url + GMAP.key]
+ map_template = 'gis/admin/google.html'
+ # Default GeoDjango OpenLayers map options
+ # Uncomment and modify as desired
+ # To learn more about this jargon visit:
+ # www.openlayers.org
+
+ #default_lon = 0
+ #default_lat = 0
+ #default_zoom = 4
+ #display_wkt = False
+ #display_srid = False
+ #extra_js = []
+ #num_zoom = 18
+ #max_zoom = False
+ #min_zoom = False
+ #units = False
+ #max_resolution = False
+ #max_extent = False
+ #modifiable = True
+ #mouse_position = True
+ #scale_text = True
+ #layerswitcher = True
+ scrollable = False
+ #admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
+ map_width = 700
+ map_height = 325
+ #map_srid = 4326
+ #map_template = 'gis/admin/openlayers.html'
+ #openlayers_url = 'http://openlayers.org/api/2.6/OpenLayers.js'
+ #wms_url = 'http://labs.metacarta.com/wms/vmap0'
+ #wms_layer = 'basic'
+ #wms_name = 'OpenLayers WMS'
+ #debug = False
+ #widget = OpenLayersWidget
+
+# Finally, with these options set now register the model
+# associating the Options with the actual model
+admin.site.register(Country,CountryAdmin)
+
+
+
+class StateAdmin(OSMGeoAdmin):
+ # Standard Django Admin Options
+ list_display = ('name','slug','country')
+ prepopulated_fields = {'slug': ('name',)}
+ search_fields = ('name','country')
+ ordering = ('name',)
+ save_as = True
+ search_fields = ['name',]
+ list_select_related = True
+ fieldsets = (
+ ('Location', {'fields': ('name','slug','pub_date','country'), 'classes': ('show','extrapretty')}),
+ ('Editable Map View', {'fields': ('geometry',), 'classes': ('show', 'wide')}),
+ )
+ extra_js = [GMAP.api_url + GMAP.key]
+ map_template = 'gis/admin/google.html'
+ # Default GeoDjango OpenLayers map options
+ # Uncomment and modify as desired
+ # To learn more about this jargon visit:
+ # www.openlayers.org
+
+ #default_lon = 0
+ #default_lat = 0
+ #default_zoom = 4
+ #display_wkt = False
+ #display_srid = False
+ #extra_js = []
+ #num_zoom = 18
+ #max_zoom = False
+ #min_zoom = False
+ #units = False
+ #max_resolution = False
+ #max_extent = False
+ #modifiable = True
+ #mouse_position = True
+ #scale_text = True
+ #layerswitcher = True
+ scrollable = False
+ #admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
+ map_width = 700
+ map_height = 325
+ #map_srid = 4326
+ #map_template = 'gis/admin/openlayers.html'
+ #openlayers_url = 'http://openlayers.org/api/2.6/OpenLayers.js'
+ #wms_url = 'http://labs.metacarta.com/wms/vmap0'
+ #wms_layer = 'basic'
+ #wms_name = 'OpenLayers WMS'
+ #debug = False
+ #widget = OpenLayersWidget
+
+# Finally, with these options set now register the model
+# associating the Options with the actual model
+admin.site.register(State,StateAdmin)
+
+class LocationAdmin(OSMGeoAdmin):
+ # Standard Django Admin Options
+ list_display = ('name','slug','state')
+ prepopulated_fields = {'slug': ('name',)}
+ search_fields = ('name','state')
+ ordering = ('name',)
+ save_as = True
+ search_fields = ['name',]
+ list_select_related = True
+ fieldsets = (
+ ('Location', {'fields': ('name','slug','pub_date','state'), 'classes': ('show','extrapretty')}),
+ ('Editable Map View', {'fields': ('geometry',), 'classes': ('show', 'wide')}),
+ )
+ extra_js = [GMAP.api_url + GMAP.key]
+ map_template = 'gis/admin/google.html'
+ # Default GeoDjango OpenLayers map options
+ # Uncomment and modify as desired
+ # To learn more about this jargon visit:
+ # www.openlayers.org
+
+ #default_lon = 0
+ #default_lat = 0
+ #default_zoom = 4
+ #display_wkt = False
+ #display_srid = False
+ #extra_js = []
+ #num_zoom = 18
+ #max_zoom = False
+ #min_zoom = False
+ #units = False
+ #max_resolution = False
+ #max_extent = False
+ #modifiable = True
+ #mouse_position = True
+ #scale_text = True
+ #layerswitcher = True
+ scrollable = False
+ #admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
+ map_width = 700
+ map_height = 325
+ #map_srid = 4326
+ #map_template = 'gis/admin/openlayers.html'
+ #openlayers_url = 'http://openlayers.org/api/2.6/OpenLayers.js'
+ #wms_url = 'http://labs.metacarta.com/wms/vmap0'
+ #wms_layer = 'basic'
+ #wms_name = 'OpenLayers WMS'
+ #debug = False
+ #widget = OpenLayersWidget
+
+# Finally, with these options set now register the model
+# associating the Options with the actual model
+admin.site.register(Location,LocationAdmin) \ No newline at end of file
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()
+
diff --git a/apps/locations/urls.py b/apps/locations/urls.py
new file mode 100644
index 0000000..669b828
--- /dev/null
+++ b/apps/locations/urls.py
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+ #(r'(?P<slug>[0-9a-zA-Z_.-]+)/$', 'locations.views.list_view_region'),
+ (r'^$', 'locations.views.list_view'),
+)
diff --git a/apps/locations/views.py b/apps/locations/views.py
new file mode 100644
index 0000000..a59a2e5
--- /dev/null
+++ b/apps/locations/views.py
@@ -0,0 +1,11 @@
+from django.shortcuts import render_to_response,get_object_or_404
+from django.template import RequestContext
+
+from blog.models import Entry
+from locations.models import Location, Country, Region
+
+def list_view(request):
+ qs = Entry.objects.filter(status__exact=1)
+ cl = Country.objects.filter(visited=True).exclude(name='default')
+ rl = Region.objects.all()
+ return render_to_response('archives/map.html', {'object_list': qs,'country_list':cl,'region_list':rl}, context_instance=RequestContext(request)) \ No newline at end of file