Skip to main content
Introduction
============

PyGeoIf provides a GeoJSON-like protocol for geo-spatial (GIS) vector data.

see https://gist.github.com/2217756

Other Python programs and packages that you may have heard of already
implement this protocol:

* ArcPy http://help.arcgis.com/en/arcgisdesktop/
* descartes https://bitbucket.org/sgillies/descartes/
* geojson http://pypi.python.org/pypi/geojson/
* PySAL http://pysal.geodacenter.org/
* Shapely https://github.com/Toblerity/Shapely
* pyshp https://pypi.python.org/pypi/pyshp

So when you want to write your own geospatilal library with support
for this protocol you may use pygeoif as a starting point and build
your functionality on top of it

You may think of pygeoif as a 'shapely ultralight' which lets you
construct geometries and perform **very** basic operations like
reading and writing geometries from/to WKT, constructing line strings
out of points, polygons from linear rings, multi polygons from
polygons, etc. It was inspired by shapely and implements the
geometries in a way that when you are familiar with shapely
you feel right at home with pygeoif

It was written to provide clean and python only geometries for
fastkml_

.. _fastkml: http://pypi.python.org/pypi/fastkml/

PyGeoIf is continually tested with *Travis CI*

.. image:: https://api.travis-ci.org/cleder/pygeoif.png
:target: https://travis-ci.org/cleder/pygeoif

.. image:: https://coveralls.io/repos/cleder/pygeoif/badge.png?branch=master
:target: https://coveralls.io/r/cleder/pygeoif?branch=master




Example
========


>>> from pygeoif import geometry
>>> p = geometry.Point(1,1)
>>> p.__geo_interface__
{'type': 'Point', 'coordinates': (1.0, 1.0)}
>>> print p
POINT (1.0 1.0)
>>> p1 = geometry.Point(0,0)
>>> l = geometry.LineString([p,p1])
>>> l.bounds
(0.0, 0.0, 1.0, 1.0)
>>> dir(l)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__geo_interface__', '__getattribute__', '__hash__', '__init__',
'__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__weakref__', '_coordinates', '_geoms', '_type', 'bounds', 'coords',
'geom_type', 'geoms', 'to_wkt']
>>> print l
LINESTRING (1.0 1.0, 0.0 0.0)


You find more examples in the
`tests.py <https://github.com/cleder/pygeoif/blob/master/pygeoif/tests.py>`_
file which cover every aspect of pygeoif or in fastkml_.

Classes
========

All classes implement the attributes:

* __geo_interface__: as dicussed above
* geom_type: Returns a string specifying the Geometry Type of the object
* bounds: Returns a (minx, miny, maxx, maxy) tuple (float values) that bounds the object.
* wkt: Returns the 'Well Known Text' representation of the object


and the method:

* to_wkt which also prints the object


Point
-----
A zero dimensional feature

Attributes
~~~~~~~~~~~
x, y, z : float
Coordinate values

Example
~~~~~~~~

>>> p = Point(1.0, -1.0)
>>> print p
POINT (1.0000000000000000 -1.0000000000000000)
>>> p.y
-1.0
>>> p.x
1.0



LineString
-----------

A one-dimensional figure comprising one or more line segments

A LineString has non-zero length and zero area. It may approximate a curve
and need not be straight. Unlike a LinearRing, a LineString is not closed.

Attributes
~~~~~~~~~~~
geoms : sequence
A sequence of Points



LinearRing
-----------

A closed one-dimensional feature comprising one or more line segments

A LinearRing that crosses itself or touches itself at a single point is
invalid and operations on it may fail.

A Linear Ring is self closing



Polygon
--------

A two-dimensional figure bounded by a linear ring

A polygon has a non-zero area. It may have one or more negative-space
"holes" which are also bounded by linear rings. If any rings cross each
other, the feature is invalid and operations on it may fail.

Attributes
~~~~~~~~~~~

exterior : LinearRing
The ring which bounds the positive space of the polygon.
interiors : sequence
A sequence of rings which bound all existing holes.


MultiPoint
----------
A collection of one or more points

Attributes
~~~~~~~~~~~

geoms : sequence
A sequence of Points

MultiLineString
----------------
A collection of one or more line strings

A MultiLineString has non-zero length and zero area.

Attributes
~~~~~~~~~~~

geoms : sequence
A sequence of LineStrings

MultiPolygon
-------------

A collection of one or more polygons

Attributes
~~~~~~~~~~~~~
geoms : sequence
A sequence of `Polygon` instances


GeometryCollection
-------------------
A heterogenous collection of geometries (Points, LineStrings, LinearRings
and Polygons, MultiPoints, MultiLineStrings, MultiPolygons)

Attributes
~~~~~~~~~~~
geoms : sequence
A sequence of geometry instances

Please note:
GEOMETRYCOLLECTION isn't supported by the Shapefile format.
And this sub-class isn't generally supported by ordinary GIS sw (viewers and so on).
So it's very rarely used in the real GIS professional world.

Functions
=========

as_shape
--------

Create a pygeoif feature from an object that provides the __geo_interface__


>>> from shapely.geometry import Point
>>> from pygeoif import geometry
>>> geometry.as_shape(Point(0,0))
<pygeoif.geometry.Point object at 0x...>


from_wkt
---------

Create a geometry from its WKT representation


>>> p = geometry.from_wkt('POINT (0 1)')
>>> print p
POINT (0.0 1.0)


signed_area
------------

Return the signed area enclosed by a ring using the linear time
algorithm at http://www.cgafaq.info/wiki/Polygon_Area. A value >= 0
indicates a counter-clockwise oriented ring.

orient
-------

Returns a copy of the polygon with exterior in counter-clockwise and
interiors in clockwise orientation for sign=1.0 and the other way round
for sign=-1.0


mapping
-------

Returns the __geo_interface__ dictionary


Changelog
=========

0.4.1 (2013/10/25)
------------------

- GeometryCollections return tuples as the __geo_interface__
- A GeometryCollection can contain MultiGeometries


0.4 (2013/10/25)
-----------------

- after a year in production promote it to `Development Status :: 5 - Production/Stable`
- MultiPolygons return tuples as the __geo_interface__

0.3.1 (2012/11/15)
------------------

- specify minor python versions tested with Travis CI
- fix for signed area


0.3 (2012/11/14)
-------------------

- add GeometryCollection
- len(Multi*) and len(GeometryCollection) returns the number of contained Geometries
- add orient function to get clockwise or counterclockwise oriented poygons
- add signed_area function
- add _set_orientation method to lineStrings, Polygons and MultiPolygons


0.2.1 (2012/08/02)
-------------------

- as_shape also accepts an object that is neither a dictionary nor has a __geo_interface__ but can be converted into a __geo_interface__ compliant dictionary


0.2 (2012/08/01)
-----------------

- change license to LGPL
- add wkt as a property
- as_shape also accepts a __geo_interface__ compliant dictionary
- test with python3


0.1 (2012/07/27)
-----------------

- initial release

Release files for pygeoif 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pygeoif 0.4.1
File Size Uploaded
pygeoif-0.4.1.tar.gz 27.9 kB Details

Release files / pygeoif-0.4.1.tar.gz

Download URL pygeoif-0.4.1.tar.gz
Size 27.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1bbfe75c3234bb2a9a8fc4865aec048e16834e7a07dc8c49dc1a961152af728e
BLAKE2b-256 checksum
How to use checksums
5d19f66258e3056a7d9b3e3d076a8437e4070dcdd21a7d987311d4ad41502c52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page