SlideShare a Scribd company logo
1 of 28
Download to read offline
collective.geo
                  managing georeferenced content with Plone




Giorgio Borelli
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?
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?
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?
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?
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?
collective.geo packages
Installation
                    collective.geo.bundle


                            [buildout]
                            ...
  • Shapely >= 1.0.14
                            extends=
                                http://good-py.appspot.com/
  • libgeos_c >= 3.1        release/plone.app.z3cform/0.5.3?
                            plone=4.0.5
                            ...
  • geopy
                            eggs=
                                collective.geo.bundle
  • BeautifulSoup               BeautifulSoup
                            ...



collective.geo packages
Internal dependencies
               c.geo.openlayers                    c.geo.geographer




                                  c.geo.settings




                               c.geo.mapwidget




             c.geo.contentlocations                   c.geo.kml




collective.geo packages
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
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
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
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
collective.geo.settings




collective.geo packages
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
collective.geo.mapwidget
                             map layers




                             map widget


collective.geo packages
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
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
collective.geo.contentlocations



                  geocoding

                                 edit toolbar




                      WKT data




collective.geo packages
collective.geo.contentlocations
                          custom styles




collective.geo packages
collective.geo.kml


  registers a kml view on
  the georeferenced
  objects and on folderish
  contents such as Folders
  and Collections.




collective.geo packages
other possibilities
collective.geo.mapcontent - Makina Corpus




    http://plone.org/products/collective.geo.mapcontent
other possibilities
collective.geo.flexitopic - Christian Ledermann




                 http://iwlearn.net/iw-projects
other possibilities
further development
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
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
Contributors
          Sean Gillies
    Silvio Tomatis - silviot
    Gerhard Weis - gweis
   David Breitkreutz - rockdj
        Makina corpus
  Christian Ledermann - nan
 Maurizio Delmonte - miziodel
        Alice Narduzzo
          Enrico Barra

More Related Content

Similar to managing georeferenced content with Plone and collective.geo

Geospatial for Java
Geospatial for JavaGeospatial for Java
Geospatial for JavaJody Garnett
 
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...gborelli
 
Gesx chapter01 introduction
Gesx chapter01 introductionGesx chapter01 introduction
Gesx chapter01 introductionJorshAlbert
 
Mapping in Drupal using OpenLayers
Mapping in Drupal using OpenLayersMapping in Drupal using OpenLayers
Mapping in Drupal using OpenLayersPeter Vanhee
 
mDevcon tour 2014 beyondar
mDevcon tour 2014 beyondarmDevcon tour 2014 beyondar
mDevcon tour 2014 beyondarJoan Puig Sanz
 
Getting Started with Geospatial Data in MongoDB
Getting Started with Geospatial Data in MongoDBGetting Started with Geospatial Data in MongoDB
Getting Started with Geospatial Data in MongoDBMongoDB
 
Mapping, GIS and geolocating data in Java
Mapping, GIS and geolocating data in JavaMapping, GIS and geolocating data in Java
Mapping, GIS and geolocating data in JavaJoachim Van der Auwera
 
What I Learned At Drupal Con Dc 2009
What I Learned At Drupal Con Dc 2009What I Learned At Drupal Con Dc 2009
What I Learned At Drupal Con Dc 2009Neil Giarratana
 
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...Beniamino Murgante
 
Mapping, GIS and geolocating data in Java @ JAX London
Mapping, GIS and geolocating data in Java @ JAX LondonMapping, GIS and geolocating data in Java @ JAX London
Mapping, GIS and geolocating data in Java @ JAX LondonJoachim Van der Auwera
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...JAX London
 
Geopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 SeoulGeopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 SeoulHirofumi Hayashi
 
GeoDjango & HTML5 Geolocation
GeoDjango & HTML5 GeolocationGeoDjango & HTML5 Geolocation
GeoDjango & HTML5 GeolocationJohn Paulett
 
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...Thierry Badard
 
GI2012 buono-cnr-geo-platform
GI2012 buono-cnr-geo-platformGI2012 buono-cnr-geo-platform
GI2012 buono-cnr-geo-platformIGN Vorstand
 
Javascript, the GNOME way (JSConf EU 2011)
Javascript, the GNOME way (JSConf EU 2011)Javascript, the GNOME way (JSConf EU 2011)
Javascript, the GNOME way (JSConf EU 2011)Igalia
 
Creating, Publishing and Reusing a JET Composite Component - nlOUG TechExper...
Creating, Publishing and Reusing a JET Composite Component  - nlOUG TechExper...Creating, Publishing and Reusing a JET Composite Component  - nlOUG TechExper...
Creating, Publishing and Reusing a JET Composite Component - nlOUG TechExper...Lucas Jellema
 

Similar to managing georeferenced content with Plone and collective.geo (20)

Geospatial for Java
Geospatial for JavaGeospatial for Java
Geospatial for Java
 
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...
PLOG2013 - Let's get a better collective.geo and improve Plone for Geo-refere...
 
Gesx chapter01 introduction
Gesx chapter01 introductionGesx chapter01 introduction
Gesx chapter01 introduction
 
GIS_Day_2016
GIS_Day_2016GIS_Day_2016
GIS_Day_2016
 
Mapping in Drupal using OpenLayers
Mapping in Drupal using OpenLayersMapping in Drupal using OpenLayers
Mapping in Drupal using OpenLayers
 
mDevcon tour 2014 beyondar
mDevcon tour 2014 beyondarmDevcon tour 2014 beyondar
mDevcon tour 2014 beyondar
 
Open@EDINA
Open@EDINAOpen@EDINA
Open@EDINA
 
Getting Started with Geospatial Data in MongoDB
Getting Started with Geospatial Data in MongoDBGetting Started with Geospatial Data in MongoDB
Getting Started with Geospatial Data in MongoDB
 
Mapping, GIS and geolocating data in Java
Mapping, GIS and geolocating data in JavaMapping, GIS and geolocating data in Java
Mapping, GIS and geolocating data in Java
 
What I Learned At Drupal Con Dc 2009
What I Learned At Drupal Con Dc 2009What I Learned At Drupal Con Dc 2009
What I Learned At Drupal Con Dc 2009
 
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...
GeoSDI: una piattaforma social di dati geografici basata sui principi di INSP...
 
Mapping, GIS and geolocating data in Java @ JAX London
Mapping, GIS and geolocating data in Java @ JAX LondonMapping, GIS and geolocating data in Java @ JAX London
Mapping, GIS and geolocating data in Java @ JAX London
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
 
Geopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 SeoulGeopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 Seoul
 
GeoDjango & HTML5 Geolocation
GeoDjango & HTML5 GeolocationGeoDjango & HTML5 Geolocation
GeoDjango & HTML5 Geolocation
 
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...
Spatially enabled open source BI (GeoBI) with GeoKettle, GeoMondrian & SOLAPL...
 
GI2012 buono-cnr-geo-platform
GI2012 buono-cnr-geo-platformGI2012 buono-cnr-geo-platform
GI2012 buono-cnr-geo-platform
 
Javascript, the GNOME way (JSConf EU 2011)
Javascript, the GNOME way (JSConf EU 2011)Javascript, the GNOME way (JSConf EU 2011)
Javascript, the GNOME way (JSConf EU 2011)
 
Pyramid Framework
Pyramid FrameworkPyramid Framework
Pyramid Framework
 
Creating, Publishing and Reusing a JET Composite Component - nlOUG TechExper...
Creating, Publishing and Reusing a JET Composite Component  - nlOUG TechExper...Creating, Publishing and Reusing a JET Composite Component  - nlOUG TechExper...
Creating, Publishing and Reusing a JET Composite Component - nlOUG TechExper...
 

Recently uploaded

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Recently uploaded (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

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?
  • 8. Installation collective.geo.bundle [buildout] ... • Shapely >= 1.0.14 extends= http://good-py.appspot.com/ • libgeos_c >= 3.1 release/plone.app.z3cform/0.5.3? plone=4.0.5 ... • geopy eggs= collective.geo.bundle • BeautifulSoup BeautifulSoup ... collective.geo packages
  • 9. Internal dependencies c.geo.openlayers c.geo.geographer c.geo.settings c.geo.mapwidget c.geo.contentlocations c.geo.kml collective.geo packages
  • 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
  • 16. collective.geo.mapwidget map layers map widget 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
  • 19. collective.geo.contentlocations geocoding edit toolbar WKT data collective.geo packages
  • 20. collective.geo.contentlocations custom styles 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
  • 23. collective.geo.mapcontent - Makina Corpus http://plone.org/products/collective.geo.mapcontent other possibilities
  • 24. collective.geo.flexitopic - Christian Ledermann http://iwlearn.net/iw-projects other possibilities
  • 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