Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

Download
ActivePython
INSTALL>
pypm install collective.geo.geographer

How to install collective.geo.geographer

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install collective.geo.geographer
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
1.4
2.0b1Never BuiltWhy not?
1.4 Available View build log
0.1.3 Available View build log
0.1.2 Available View build log
0.1.1 Available View build log
0.1 Available View build log
Windows (64-bit)
1.4
2.0b1Never BuiltWhy not?
1.4 Available View build log
0.1.3 Available View build log
0.1.2 Available View build log
0.1.1 Available View build log
0.1 Available View build log
Mac OS X (10.5+)
2.0b1 Available View build log
1.4 Available View build log
0.1.3 Available View build log
0.1.2 Available View build log
0.1.1 Available View build log
0.1 Available View build log
Linux (32-bit)
2.0b1 Available View build log
1.4 Available View build log
0.1.3 Available View build log
0.1.2 Available View build log
0.1.1 Available View build log
0.1 Available View build log
Linux (64-bit)
2.0b1 Available View build log
1.4 Available View build log
0.1.3 Available View build log
0.1.2 Available View build log
0.1.1 Available View build log
0.1 Available View build log
 
License
GPL
Lastest release
version 2.0b1 on Jun 5th, 2013

Introduction

:mod:`collective.geo.geographer` provides geo annotation for Plone.

System Message: WARNING/2 (<string>, line 2); backlink

raw (and derived) roles disabled

This package is based on Sean Gillies's idea (zgeo.geographer) and integrates its functionalities in collective.geo project.

https://secure.travis-ci.org/collective/collective.geo.geographer.png

Found a bug? Please, use the issue tracker.

Installation

This addon can be installed has any other addons, please follow official documentation.

How it work

Any object that implements :class:`IAttributeAnnotatable <zope.annotation.interfaces.IAttributeAnnotatable>` and :class:`IGeoreferenceable <collective.geo.geographer.interfaces.IGeoreferenceable>` can be adapted and geo-referenced.

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled

The former marker is standard for Zope content objects, and the latter can be easily configured via ZCML.

Let's test with an example placemark, which provides both of the marker interfaces mentioned above.

>>> from zope.interface import implements
>>> from zope.annotation.interfaces import IAttributeAnnotatable
>>> from collective.geo.geographer.interfaces import IGeoreferenceable
>>> class Placemark(object):
...     implements(IGeoreferenceable, IAttributeAnnotatable)
>>> placemark = Placemark()

Adapt it to :class:`IGeoreferenced <collective.geo.geographer.interfaces.IGeoreferenced>`

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled
>>> from collective.geo.geographer.interfaces import IGeoreferenced
>>> geo = IGeoreferenced(placemark)

Its properties should all be None

>>> geo.type is None
True
>>> geo.coordinates is None
True
>>> geo.crs is None
True

Check whether geo referenceable object has coordinates or not

>>> geo.hasCoordinates()
False

Now set the location geometry to type Point and coordinates 105.08 degrees West, 40.59 degrees North using :func:`setGeoInterface <IWritableGeoreference.setGeoInterface>`

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled
>>> geo.setGeoInterface('Point', (-105.08, 40.59))

A georeferenced object has type and coordinates attributes which should give us back what we put in.

>>> geo.type
'Point'
>>> tuple(['%.2f' % x for x in geo.coordinates])
('-105.08', '40.59')
>>> geo.crs is None
True

now hasCoordinates method returns True

>>> geo.hasCoordinates()
True

An event should have been sent

>>> from zope.component.eventtesting import getEvents
>>> from collective.geo.geographer.event import IObjectGeoreferencedEvent
>>> events = getEvents(IObjectGeoreferencedEvent)
>>> events[-1].object is placemark
True

To remove the coordinate from a georeferenced object, we can use :func:`removeGeoInterface <IWritableGeoreference.removeGeoInterface>` method:

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled
>>> geo.removeGeoInterface()
>>> geo.type is None
True
>>> geo.coordinates is None
True
>>> geo.crs is None
True
Plone integration

Add geo-referenced content

>>> from plone.app.testing import setRoles
>>> from plone.app.testing import TEST_USER_ID
>>> portal = layer['portal']
>>> setRoles(portal, TEST_USER_ID, ['Manager'])
>>> oid = portal.invokeFactory('Document', 'doc')
>>> doc = portal[oid]

If content type doesn't implement :class:`IGeoreferenceable <collective.geo.geographer.interfaces.IGeoreferenceable>` interfaces we need to provide it

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled
>>> from zope.interface import alsoProvides
>>> alsoProvides(doc, IGeoreferenceable)

now we can set the coordinates

>>> from collective.geo.geographer.interfaces import IWriteGeoreferenced
>>> geo = IWriteGeoreferenced(doc)
>>> geo.setGeoInterface('Point', (-100, 40))

and reindex the document.

>>> doc.reindexObject(idxs=['zgeo_geometry'])

We can create a subscriber for :class:`IObjectGeoreferencedEvent <collective.geo.geographer.event.IObjectGeoreferencedEvent>` to do that automatically.

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled

Check the catalog results

>>> from Products.CMFCore.utils import getToolByName
>>> catalog = getToolByName(portal, 'portal_catalog')
>>> brain = [b for b in catalog({'getId': 'doc'})][0]
>>> brain.zgeo_geometry['type']
'Point'
>>> brain.zgeo_geometry['coordinates']
(-100, 40)

A simple view - :class:`geoview <collective.geo.geographer.interfaces.IGeoView>` - notify us if a context is geo referenceable

System Message: WARNING/2 (<string>, line 38); backlink

raw (and derived) roles disabled
>>> view = doc.restrictedTraverse('@@geoview')
>>> view.isGeoreferenceable()
True

and return its coordinates

>>> view.getCoordinates()
('Point', (-100, 40))

When we remove the coordinates, corresponding index will return None

>>> geo.removeGeoInterface()
>>> doc.reindexObject(idxs=['zgeo_geometry'])
>>> brain = [b for b in catalog({'getId': 'doc'})][0]
>>> brain.zgeo_geometry
Missing.Value

Contributors

  • Sean Gillies
  • Giorgio Borelli
  • Christian Ledermann
  • Mirco Angelini

Changelog

2.0b1 (2013-06-02)
  • remove style key from zgeo_geometry metadata [gborelli]
  • move IGeoCoder utility to c.geo.mapwidget [gborelli]
  • remove IGeoCoder adapter [gborelli]
1.7 (2013-04-11)
  • Fixed permission on GeoreferencingAnnotator. See #3 [gborelli]
  • Moved showCoordinatesTab to c.geo.contentlocations [gborelli]
  • Added hasCoordinates method to GeoreferencingAnnotator to check whether an object has been georeferenced or not [gborelli]
  • Added a method in order to hidden Coordinates tab for dexterity content types [valentinaB]
  • Changed Version of Geopy (moved from 0.94.2 to 0.95) to support Google api v3 in geocoder [cippino]
1.6 (2013-01-28)
  • Fixed MANIFEST.in [gborelli]
1.5 (2013-01-28)
  • Added Sphinx documentation [gborelli]
  • Added travis-ci configurations [gborelli]
  • Moved reindexDocSubscriber to collective.geo.contentlocations [gborelli]
  • Refactored test and removed dependency from old Topic content type [gborelli]
1.4 (2012-02-11)
  • changed tests using plone.app.testing [gborelli]
  • Added IGeoCoder utility [gborelli]
  • Marked as deprecated IGeoCoder adapter [gborelli]
  • Added removeGeoInterface to remove coordinates from an object [mircoangelini]
0.1.3 (2011-09-05)
  • plone 4.1 fixes [gborelli]
  • include Products.CMFCore to make plone 4.1 happy [nan010]
  • changed Browser import from Testing.testbrowser [gborelli]
  • added z3c.autoinclude entry point [gborelli]
0.1.2 (2010-12-28)
  • Moved IGeoView from c.geo.contentlocations
0.1.1 (2010-11-13)
  • moved geocoderview to portal root
0.1 (2010-10-31)
  • removed zgeo.geographer dependency
  • zgeo.plone.geographer code refactoring
  • moved from zgeo.plone.geographer

Subscribe to package updates

Last updated Jun 5th, 2013

Download Stats

Last month:2

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.