Pycon 2012 Taiwan

27
那些年Python攻佔GIS The Year Python Takes Over GIS 鄧東波 Dongpo Deng 中央研究院資訊科學研究所 胡崇偉 marr, Tsung Wei Hu 中央研究院人文社會科學中心 PyCon 2012 Saturday, June 9, 2012

Transcript of Pycon 2012 Taiwan

Page 1: Pycon 2012 Taiwan

那些年Python攻佔GIS The Year Python Takes Over GIS

鄧東波 Dongpo Deng中央研究院資訊科學研究所

﹠胡崇偉 marr, Tsung Wei Hu中央研究院人文社會科學中心

PyCon 2012

Saturday, June 9, 2012

Page 2: Pycon 2012 Taiwan

Content

• Introduction - GIS and why GIS uses python

• Python-blinding core geospatial libraries

• the use of python in Desktop GISs

• Web application framework for geospatial

Saturday, June 9, 2012

Page 3: Pycon 2012 Taiwan

What is GIS?• GIS is stand for Geographic

Information System

• integrates hardware, software, and data for capturing, managing, analyzing, and displaying geospatial data.

• allows people to use methods for understanding, interpreting, and visualizing relationships and patterns of geospatial data

Saturday, June 9, 2012

Page 4: Pycon 2012 Taiwan

Why Geospatial domain uses Python

• Easy to learn

• Code is readable

• Large community

• Easy interaction with C and Java libraries

• Many existing modules and packages

• core geospatial libraries

• map rendering

• database

• web server

Picture from http://pypi.python.org/pypi/collective.geo.bundle

Saturday, June 9, 2012

Page 5: Pycon 2012 Taiwan

Why Geospatial domain uses Python

• Easy to learn

• Code is readable

• Large community

• Easy interaction with C and Java libraries

• Many existing modules and packages

• core geospatial libraries

• map rendering

• database

• web server

Picture from http://pypi.python.org/pypi/collective.geo.bundle

Saturday, June 9, 2012

Page 6: Pycon 2012 Taiwan

Geospatial development tasks

• Visualizing geospatial data

Saturday, June 9, 2012

Page 7: Pycon 2012 Taiwan

Geospatial development tasks

• Analyzing geospatial data

• e.g. How many people should escape as Kuosheng nuclear power plant (核二廠) explodes?

• Create a geospatial mashup

Saturday, June 9, 2012

Page 8: Pycon 2012 Taiwan

The geospatial development tasks involve

• Math- analytic geometry

• e.g.Euclidean geometry

• Computer graphics (rendering)

• e.g. rending, visualizing

• Database

• General Search Tree (GiST)

• open geospatial standards,

• e.g. GML, WKT

Saturday, June 9, 2012

Page 9: Pycon 2012 Taiwan

Python libraries for geospatial development

• Reading/ Writing geospatial data

• GDAL/OGR

• Dealing with Projections

• pyproj

• Analyzing and manipulating geospatial data

• Shapely

• Visualizing geospatial data

• Mapnik

Saturday, June 9, 2012

Page 10: Pycon 2012 Taiwan

GDAL (Geospatial Data Abstraction Library)

from osgeo import gdal,gdalconstimport structdataset = gdal.Open("DEM.dat")band = dataset.GetRasterBand(1)fmt = "<" + ("h" * band.XSize)totHeight = 0for y in range(band.YSize): scanline = band.ReadRaster(0, y, band.XSize, 1, band.XSize, 1,band.DataType) values = struct.unpack(fmt, scanline) for value in values: totHeight = totHeight + valueaverage = totHeight / (band.XSize * band.YSize)print "Average height =", average

• read through it one scanline at a time from file

• use the struct standard Python library module to read the individual values out of the scanline.

• Each value corresponds to the height of that point, in meters

Source from: Westra, 2010, Python Geospatial DevelopmentSaturday, June 9, 2012

Page 11: Pycon 2012 Taiwan

OGR(OpenGIS Simple Features Reference Implementation)

• uses OGR to read through the contents of a Shapefile,

• printing out the value of the NAME attribute for each feature, along with the geometry type

from osgeo import ogr

shapefile = ogr.Open("TM_WORLD.shp")

layer = shapefile.GetLayer(0)

for i in range(layer.GetFeatureCount()):

feature = layer.GetFeature(i)

name = feature.GetField("NAME")

geometry = feature.GetGeometryRef()

print i, name, geometry.GetGeometryName()

Source from: Westra, 2010, Python Geospatial DevelopmentSaturday, June 9, 2012

Page 12: Pycon 2012 Taiwan

PyProj• a location specified using UTM zone 17 coordinates.

• Using two Proj objects to define the UTM Zone 17 and lat/long projections

• translates this location's coordinates into latitude and longitude values

import pyproj

UTM_X = 565718.523517

UTM_Y = 3980998.9244

srcProj = pyproj.Proj(proj="utm", zone="11",

ellps="clrk66", units="m")

dstProj = pyproj.Proj(proj='longlat', ellps='WGS84',

datum='WGS84')

long,lat = pyproj.transform(srcProj, dstProj, UTM_X, UTM_Y)

print "UTM zone 17 coordinate (%0.4f, %0.4f) = %0.4f, %0.4f" %

(UTM_X, UTM_Y, lat, long)Source from: Westra, 2010, Python Geospatial Development

Saturday, June 9, 2012

Page 13: Pycon 2012 Taiwan

Shapely GEOS

import shapely.geometrypt = shapely.geometry.Point(0, 0)circle = pt.buffer(1.0)square = shapely.geometry.Polygon([(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)])intersect = circle.intersection(square)for x,y in intersect.exterior.coords: print x,y

Source from: Westra, 2010, Python Geospatial DevelopmentSaturday, June 9, 2012

Page 14: Pycon 2012 Taiwan

Mapnik

• Mapnik is an open source mapping toolkit for desktop- and server-based map rendering, written in C++.

• there are Python bindings to facilitate fast-paced agile development.

• OpenStreetMap project (OSM) uses Mapnik in combination with an Apache Web Server module (mod_tile) to render tiles that make up the OSM 'Slippy Map' Layer.

Source from: Westra, 2010, Python Geospatial Development

Saturday, June 9, 2012

Page 15: Pycon 2012 Taiwan

Mapnikimport mapnik

symbolizer = mapnik.PolygonSymbolizer(

mapnik.Color("darkgreen"))

rule = mapnik.Rule()

rule.symbols.append(symbolizer)

style = mapnik.Style()

style.rules.append(rule)

layer = mapnik.Layer("mapLayer")

layer.datasource = mapnik.Shapefile(

file="TW_village.shp")

layer.styles.append("mapStyle")

map = mapnik.Map(800, 400)

map.background = mapnik.Color("steelblue")

map.append_style("mapStyle", style)

map.layers.append(layer)

map.zoom_all()

mapnik.render_to_file(map, "map.png", "png")

Saturday, June 9, 2012

Page 16: Pycon 2012 Taiwan

Desktop GIS

Pic from http://www.pressebox.de/attachments/details/39739

Saturday, June 9, 2012

Page 17: Pycon 2012 Taiwan

Script Languages in ESRI family

Saturday, June 9, 2012

Page 18: Pycon 2012 Taiwan

ArcPy• ArcPy is a package for performing geographic data

analysis, data conversion, data management, and map automation in ArcGIS with Python.

• ArcPy includes three modules:

• mapping module (arcpy.mapping)

• Spatial analyst module (arcpy.sa)

• Geostatistical analyst module (arcpy.ga)

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/What_is_ArcPy/

ArcGIS ArcPy Python

Saturday, June 9, 2012

Page 19: Pycon 2012 Taiwan

arcpy in ArcGIS 10

Saturday, June 9, 2012

Page 20: Pycon 2012 Taiwan

Saturday, June 9, 2012

Page 21: Pycon 2012 Taiwan

Saturday, June 9, 2012

Page 22: Pycon 2012 Taiwan

Python in QGIS

• There’s a number of ways to access the layers in QGIS.

• Each way starts by first referencing the QgisInterface class which is called iface in the Python bindings.

Saturday, June 9, 2012

Page 23: Pycon 2012 Taiwan

Example

Saturday, June 9, 2012

Page 24: Pycon 2012 Taiwan

GeoDjango

Saturday, June 9, 2012

Page 25: Pycon 2012 Taiwan

http://140.109.160.129:8000/admin/world/worldborders/Saturday, June 9, 2012

Page 26: Pycon 2012 Taiwan

Remarks

• There are many Python libraries or applications for geospatial purposes

• Python is increasing its value in geospatial domain

• Will Python take over GIS? .....Let’s see!

Saturday, June 9, 2012