summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py')
-rw-r--r--lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py233
1 files changed, 0 insertions, 233 deletions
diff --git a/lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py b/lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py
deleted file mode 100644
index ff65626..0000000
--- a/lib/python2.7/site-packages/django/contrib/gis/maps/google/gmap.py
+++ /dev/null
@@ -1,233 +0,0 @@
-from django.conf import settings
-from django.template.loader import render_to_string
-from django.utils.html import format_html
-from django.utils.safestring import mark_safe
-from django.utils.six.moves import xrange
-
-from django.contrib.gis.maps.google.overlays import GPolygon, GPolyline, GMarker
-
-class GoogleMapException(Exception):
- pass
-
-
-# The default Google Maps URL (for the API javascript)
-# TODO: Internationalize for Japan, UK, etc.
-GOOGLE_MAPS_URL='http://maps.google.com/maps?file=api&v=%s&key='
-
-
-class GoogleMap(object):
- "A class for generating Google Maps JavaScript."
-
- # String constants
- onunload = mark_safe('onunload="GUnload()"') # Cleans up after Google Maps
- vml_css = mark_safe('v\:* {behavior:url(#default#VML);}') # CSS for IE VML
- xmlns = mark_safe('xmlns:v="urn:schemas-microsoft-com:vml"') # XML Namespace (for IE VML).
-
- def __init__(self, key=None, api_url=None, version=None,
- center=None, zoom=None, dom_id='map',
- kml_urls=[], polylines=None, polygons=None, markers=None,
- template='gis/google/google-map.js',
- js_module='geodjango',
- extra_context={}):
-
- # The Google Maps API Key defined in the settings will be used
- # if not passed in as a parameter. The use of an API key is
- # _required_.
- if not key:
- try:
- self.key = settings.GOOGLE_MAPS_API_KEY
- except AttributeError:
- raise GoogleMapException('Google Maps API Key not found (try adding GOOGLE_MAPS_API_KEY to your settings).')
- else:
- self.key = key
-
- # Getting the Google Maps API version, defaults to using the latest ("2.x"),
- # this is not necessarily the most stable.
- if not version:
- self.version = getattr(settings, 'GOOGLE_MAPS_API_VERSION', '2.x')
- else:
- self.version = version
-
- # Can specify the API URL in the `api_url` keyword.
- if not api_url:
- self.api_url = getattr(settings, 'GOOGLE_MAPS_URL', GOOGLE_MAPS_URL) % self.version
- else:
- self.api_url = api_url
-
- # Setting the DOM id of the map, the load function, the JavaScript
- # template, and the KML URLs array.
- self.dom_id = dom_id
- self.extra_context = extra_context
- self.js_module = js_module
- self.template = template
- self.kml_urls = kml_urls
-
- # Does the user want any GMarker, GPolygon, and/or GPolyline overlays?
- overlay_info = [[GMarker, markers, 'markers'],
- [GPolygon, polygons, 'polygons'],
- [GPolyline, polylines, 'polylines']]
-
- for overlay_class, overlay_list, varname in overlay_info:
- setattr(self, varname, [])
- if overlay_list:
- for overlay in overlay_list:
- if isinstance(overlay, overlay_class):
- getattr(self, varname).append(overlay)
- else:
- getattr(self, varname).append(overlay_class(overlay))
-
- # If GMarker, GPolygons, and/or GPolylines are used the zoom will be
- # automatically calculated via the Google Maps API. If both a zoom
- # level and a center coordinate are provided with polygons/polylines,
- # no automatic determination will occur.
- self.calc_zoom = False
- if self.polygons or self.polylines or self.markers:
- if center is None or zoom is None:
- self.calc_zoom = True
-
- # Defaults for the zoom level and center coordinates if the zoom
- # is not automatically calculated.
- if zoom is None: zoom = 4
- self.zoom = zoom
- if center is None: center = (0, 0)
- self.center = center
-
- def render(self):
- """
- Generates the JavaScript necessary for displaying this Google Map.
- """
- params = {'calc_zoom' : self.calc_zoom,
- 'center' : self.center,
- 'dom_id' : self.dom_id,
- 'js_module' : self.js_module,
- 'kml_urls' : self.kml_urls,
- 'zoom' : self.zoom,
- 'polygons' : self.polygons,
- 'polylines' : self.polylines,
- 'icons': self.icons,
- 'markers' : self.markers,
- }
- params.update(self.extra_context)
- return render_to_string(self.template, params)
-
- @property
- def body(self):
- "Returns HTML body tag for loading and unloading Google Maps javascript."
- return format_html('<body {0} {1}>', self.onload, self.onunload)
-
- @property
- def onload(self):
- "Returns the `onload` HTML <body> attribute."
- return format_html('onload="{0}.{1}_load()"', self.js_module, self.dom_id)
-
- @property
- def api_script(self):
- "Returns the <script> tag for the Google Maps API javascript."
- return format_html('<script src="{0}{1}" type="text/javascript"></script>',
- self.api_url, self.key)
-
- @property
- def js(self):
- "Returns only the generated Google Maps JavaScript (no <script> tags)."
- return self.render()
-
- @property
- def scripts(self):
- "Returns all <script></script> tags required with Google Maps JavaScript."
- return format_html('{0}\n <script type="text/javascript">\n//<![CDATA[\n{1}//]]>\n </script>',
- self.api_script, mark_safe(self.js))
-
- @property
- def style(self):
- "Returns additional CSS styling needed for Google Maps on IE."
- return format_html('<style type="text/css">{0}</style>', self.vml_css)
-
- @property
- def xhtml(self):
- "Returns XHTML information needed for IE VML overlays."
- return format_html('<html xmlns="http://www.w3.org/1999/xhtml" {0}>', self.xmlns)
-
- @property
- def icons(self):
- "Returns a sequence of GIcon objects in this map."
- return set([marker.icon for marker in self.markers if marker.icon])
-
-class GoogleMapSet(GoogleMap):
-
- def __init__(self, *args, **kwargs):
- """
- A class for generating sets of Google Maps that will be shown on the
- same page together.
-
- Example:
- gmapset = GoogleMapSet( GoogleMap( ... ), GoogleMap( ... ) )
- gmapset = GoogleMapSet( [ gmap1, gmap2] )
- """
- # The `google-multi.js` template is used instead of `google-single.js`
- # by default.
- template = kwargs.pop('template', 'gis/google/google-multi.js')
-
- # This is the template used to generate the GMap load JavaScript for
- # each map in the set.
- self.map_template = kwargs.pop('map_template', 'gis/google/google-single.js')
-
- # Running GoogleMap.__init__(), and resetting the template
- # value with default obtained above.
- super(GoogleMapSet, self).__init__(**kwargs)
- self.template = template
-
- # If a tuple/list passed in as first element of args, then assume
- if isinstance(args[0], (tuple, list)):
- self.maps = args[0]
- else:
- self.maps = args
-
- # Generating DOM ids for each of the maps in the set.
- self.dom_ids = ['map%d' % i for i in xrange(len(self.maps))]
-
- def load_map_js(self):
- """
- Returns JavaScript containing all of the loading routines for each
- map in this set.
- """
- result = []
- for dom_id, gmap in zip(self.dom_ids, self.maps):
- # Backup copies the GoogleMap DOM id and template attributes.
- # They are overridden on each GoogleMap instance in the set so
- # that only the loading JavaScript (and not the header variables)
- # is used with the generated DOM ids.
- tmp = (gmap.template, gmap.dom_id)
- gmap.template = self.map_template
- gmap.dom_id = dom_id
- result.append(gmap.js)
- # Restoring the backup values.
- gmap.template, gmap.dom_id = tmp
- return mark_safe(''.join(result))
-
- def render(self):
- """
- Generates the JavaScript for the collection of Google Maps in
- this set.
- """
- params = {'js_module' : self.js_module,
- 'dom_ids' : self.dom_ids,
- 'load_map_js' : self.load_map_js(),
- 'icons' : self.icons,
- }
- params.update(self.extra_context)
- return render_to_string(self.template, params)
-
- @property
- def onload(self):
- "Returns the `onload` HTML <body> attribute."
- # Overloaded to use the `load` function defined in the
- # `google-multi.js`, which calls the load routines for
- # each one of the individual maps in the set.
- return mark_safe('onload="%s.load()"' % self.js_module)
-
- @property
- def icons(self):
- "Returns a sequence of all icons in each map of the set."
- icons = set()
- for map in self.maps: icons |= map.icons
- return icons