ESIP_Geospatial_Cluster_Python_Discussion_3.26.2012
Download
Report
Transcript ESIP_Geospatial_Cluster_Python_Discussion_3.26.2012
GIS and Python
CAMERON GOODALE
PAUL RAMIREZ
PyCon 2012
https://us.pycon.org/2012/
March 7th-11th in Santa Clara, CA
Largest gathering of Python Developers (well over
2000)
Lots of big name sponsors and plenty of job offerings
Supported ESDSWG Software Reuse WG
To learn about and proliferate open source and GIS
Python
http://www.python.org/
Open source programming language
Freely usable and distributable, even for commercial use
Runs on Window, Linux/Unix, Mac OS X, and has
been ported to Java and .NET virtual machines
Use version 2.7 over 3.x for now as there are still
some libraries that have yet to be ported
GDAL/OGR
Geospatial Data Abstraction Library
X/MIT style Open Source License
http://www.gdal.org
Manipulation of Raster Data
Supported Formats
http://www.gdal.org/formats_list.html
OGR ships in GDAL source tree
Manipulation of Vector data
Python bindings available
Plays well with NumPy
GIS Swiss Army Knife
Shapely
http://toblerity.github.com/shapely/
BSD Licensed
Geometric objects, predicates, and operations outside the
context of a database
Manipulation and analysis of planar geometric objects
Based on GEOS (i.e. the PostGIS engine)
Interoperation with
Well Known Text (WKT)
Well Known Binary (WKB)
Numpy and Python Arrays
Any object that provides GeoJSON-like Python geo interface
NumPy
http://numpy.scipy.org/
C/C++/Fortran
Linear Algebra, N-dimensional arrays
BSD License
PyNGL and PyNIO
From NCAR
License on Earth System Grid site.
Pandas
http://pandas.pydata.org/
Data Analysis
New BSD License
Great Video from a PyCon Tutorial
http://blog.lambdafoundry.com/tutorial-data-analysis-inpython-with-pandas-at-pycon-2012/
pyKML
Python library for creating, parsing, manipulating,
and validating KML
BSD License
http://packages.python.org/pykml/
ArcPy
http://help.arcgis.com/en/arcgisdesktop/10.0/help/
index.html#/What_is_ArcPy/000v000000v70000
00/
ESRI Python Library
License ?
ArcGIS scripting to do geographic data analysis, data
conversion, data management, and map automation
Access to geoprocessing tools
Integrated with ESRI ArcGIS Suite
Mapnik
http://mapnik.org/
Toolkit for Developing Mapping Apps
Written in C++
Can be used with XML, Python, and node.js
Runs on Linux, OS X, Windows
License LGPL
TileStache
http://tilestache.org/
Python-based Tile Server
Simpler version of Tilecache (http://tilecache.org/)
Runs on Linux, OS X, Windows
License BSD
GeoDjango
http://geodjango.org/
GIS for Django
Supports Multiple Databases
PostgreSQL + PostGIS
Oracle Spatial
Spatialite
MySQL (least functional)
License BSD
Leaflet
http://leaflet.cloudmade.com/
Mapping component to support vector and image
data
Still early in development but very usable
Replacement for Google Maps
Many people moving away due to Google’s recent
changes
Similar to OpenLayers but more compact and
modern
QGIS
http://www.qgis.org/
GPL License
Desktop Software akin ArcGIS for Desktop
Can be extended through plugins
Several ways to interact with Python
http://qgis.org/pyqgis-cookbook/intro.html
Integrated Python Console
Write a Python Plugin
Write a python application to automate some process or create
a GUI to measure data, export a map to PDF, etc.
Contact Us
Cameron Goodale
[email protected]
@sigep311
Paul Ramirez
[email protected]
@pramirez624
Backups
GDAL Example
>>> import gdal
>>> from gdalconst import *
>>> dataset = gdal.Open(‘MOD09GA.A2012081.h23v08.005.2012083065418.hdf’)
>>> dataset.GetMetadata('SUBDATASETS')
>>> state_1km = gdal.Open(dataset.GetMetadata('SUBDATASETS')['SUBDATASET_2_NAME'])
>>> state_1km.GetProjection()
'PROJCS["unnamed",GEOGCS["Unknown datum based upon the custom spheroid",DATUM["Not
specified (based on custom spheroid)",SPHEROID["Custom
spheroid",6371007.181,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],P
ROJECTION["Sinusoidal"],PARAMETER["longitude_of_center",0],PARAMETER["false_easti
ng",0],PARAMETER["false_northing",0],UNIT["Meter",1]]’
>>> layer = state_1km.ReadAsArray()
>>> type(layer)
<type 'numpy.ndarray'>
>>> layer.shape
(1200, 1200)
>>> state_1km = None
>>> dataset = None
OGR Example
>>> import ogr
>>> datasource = driver.Open(‘sites.shp')
>>> layer = datasource.GetLayer()
>>> feature = layer.GetNextFeature()
>>> while feature:
... cover = feature.GetFieldAsString('cover')
... geom = feature.GetGeometryRef()
... print "x: %s y: %s" % (geom.GetX(), geom.GetY())
... feature.Destroy()
... feature = layer.GetNextFeature()
...
x: 455552.418361 y: 4641822.05368
x: 449959.840851 y: 4633802.50858
>>> datasource.Destroy()
Shapely Example
>>> from shapely.geometry import Point, LineString, LinearRing, Polygon
>>> Point(0,0).distance(Point(1,1))
1.4142135623730951
>>> donut = Point(0, 0).buffer(2.0).difference(Point(0, 0).buffer(1.0))
>>> donut.area
9.409645471637816
>>> line = LineString([(0, 0), (1, 1)])
>>> line.length
1.4142135623730951
>>> line.coords[1:]
[(1.0, 1.0)]
>>> ring = LinearRing([(0, 0), (1, 1), (1, 0)])
>>> ring.length
3.414213562373095
>>> polygon = Polygon([(0, 0), (1, 1), (1, 0)])
>>> polygon.area
0.5
>>> LineString([(0, 0), (1, 1)]).contains(Point(0.5, 0.5))
True
>>> Point(0.5, 0.5).within(LineString(coords))
True