SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Ähnlich wie managing georeferenced content with Plone and collective.geo

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 introduction
JorshAlbert
 
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
Joachim Van der Auwera
 
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
 
Geopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 SeoulGeopaparazzi workshop on FOSS4G2015 Seoul
Geopaparazzi workshop on FOSS4G2015 Seoul
Hirofumi Hayashi
 

Ähnlich wie 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...
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
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
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

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