Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
managing georeferenced content with Plone and collective.geo
1. collective.geo
managing georeferenced content with Plone
Giorgio Borelli
2. What is collective.geo?
http://plone.org/products/collective.geo
collective.geo is a package bundle for Plone that
allows to georeference contents and to display
them on a map
what is collective.geo?
3. Existing solutions for Plone?
• they are specific for
Archetypes
• Products.Maps
• they can only georeference
points
• Products.ATGoogleMaps
• they can only use Google
Maps
• raptus.article.maps
• it is developed for a specific
project (Raptus Article)
what is collective.geo?
4. I need a new product
• that takes advantage of ZCA
• that is Plone3/4 specific
• that takes advantage of other projects that are developed by
people that know GIS well
• that is modular, so that some of its parts could be used
separately
• that gives the possibility to use maps that are not Google
• that can be easily extended in the future
what is collective.geo?
5. 2009 the first release
collective.geo - step 1
• it provides a simple user interface to zgeo packages
(from the gispython project)
1. zgeo.geographer (zgeo.plone.geographer)
2. zgeo.kml (zgeo.plone.kml)
• it uses openlayers (Google, Yahoo, Bing,
Openstreetmap)
what is collective.geo?
6. collective.geo step 2
first stable release
• code refactoring
• project on coactivate
http://www.coactivate.org/projects/collectivegeo
• more contributors (rockdj, gweis)
• a nice logo
what is collective.geo?
10. collective.geo.openlayers
includes the javascript library Openlayers in
Plone and some other javascripts that are
useful for managing maps in collective.geo
collective.geo packages
11. collective.geo.geographer
• based on zgeo.geographer and zgeo.plone.geographer
• provides the basic mechanism to enter geographic data into
georeferenceable contents.
• any object can be georeferenced if it implements
IGeoreferenceable and IAttributeAnnotatable
collective.geo packages
12. collective.geo.geographer
Example
>>> class Placemark(object):
... implements(IGeoreferenceable,
... IAttributeAnnotatable)
>>> placemark = Placemark()
>>> from collective.geo.geographer.interfaces import IGeoreferenced
>>> geo = IGeoreferenced(placemark)
Now set the location geometry to type "Point" and coordinates 105.08 degrees West,
40.59 degrees North
>>> geo.setGeoInterface('Point',
... (-105.08, 40.59))
A georeferenced object has "type" and "coordinates" attributes which should return
the correct coordinates
>>> geo.type
'Point'
>>> geo.coordinates
(-105.08, 40.59)
collective.geo packages
13. collective.geo.settings
• based on plone.app.registry
• store default settings for
collective.geo
• map center
• zoom level
• which layers have to be shown
on the map
• which contents can be
georeferenced
• default styles for all features
collective.geo packages
15. collective.geo.mapwidget
• manages the mechanism that handles Openlayers maps in
Plone
• each map widget is a Zope component which contains a series
of layers
• each map layer is an Openlayers layer and a series of page
templates that take care of registering some Metal macro in
order to include maps into pages.
collective.geo packages
17. collective.geo.mapwidget
Example
>>> from collective.geo.mapwidget.maplayers import MapLayer
>>> class BingStreetMapLayer(MapLayer):
...
... name = u"bing_map"
... Title = _(u"Bing Streets")
... type = 'bing'
...
... jsfactory = """
... function() { return new OpenLayers.Layer.VirtualEarth('%s',
... { 'type': VEMapStyle.Shaded,
... 'sphericalMercator': true });}""" % Title
<metal:use use-macro="context/@@collectivegeo-macros/map-widget" />
collective.geo packages
18. collective.geo.contentlocations
• user interface for georeferencing Archetypes content types
• data is inserted in WKT format, then processed by the Shapely
library and passed to collective.geo.geographer
• coordinates can also be specified through the Google
geocoding service (geopy)
• for each georeferenced object it is possible to set customized
styles that will make it different from others.
collective.geo packages
21. collective.geo.kml
registers a kml view on
the georeferenced
objects and on folderish
contents such as Folders
and Collections.
collective.geo packages
26. collective.z3cform.mapwidget
http://svn.plone.org/svn/collective/collective.z3cform.mapwidget
a specific widget for z3c.form that allows to manage the
geographic data in a easy way
from z3c.form import field, form
from collective.z3cform.mapwidget ... import MapWidget
class MyForm(form.Form):
fields = field.Fields(IMyInterface)
fields['geodata'].widgetFactory = MapWidget
further development
27. collective.geo.behaviour
http://svn.plone.org/svn/collective/collective.geo.behaviour
a behaviour for Dexterity that allows to georeference
contents and uses the annotations mechanism of
collective.geo.geographer for registering data
further development
28. Contributors
Sean Gillies
Silvio Tomatis - silviot
Gerhard Weis - gweis
David Breitkreutz - rockdj
Makina corpus
Christian Ledermann - nan
Maurizio Delmonte - miziodel
Alice Narduzzo
Enrico Barra