beyond arcpy, python for gis, grant miller-francisco
DESCRIPTION
Beyond arcpy | python for GIS | Grant Miller-Francisco | Presentation for GIS in Action conference | Mar 29, 2011TRANSCRIPT
Beyond arcpyGIS in ActionMarch 29-30, 2011
Grant Miller-FranciscoGIS AnalystSky Research Ashland, OR
arcpyArcGIS Python
arcpyArcGIS Python
{‘H3574’: ‘C:\path\H3574.jpg’,
‘H3575’: ‘C:\path\H3575.jpg’,
‘H3623’: ‘C:\path\H3623.jpg’,
. . . }
{‘H3574’: ‘C:\path\H3574.jpg’,
‘H3575’: ‘C:\path\H3575.jpg’,
‘H3623’: ‘C:\path\H3623.jpg’,
. . . }
Yak shaving
IDEs:
pyscripter (http://code.google.com/p/pyscripter)
Wingware (https://wingware.com/)
The Standard Library
# handling paths with os.pathimport os
f = r‘c:\data\somefile.txt’
base = os.path.basename(f)> ‘somefile.txt’
directory = os.path.dirname(f)> ‘c:\\data’
full_path = os.path.join(directory, base)> ‘c:\\data\\somefile.txt’
# get list of files with glob
from glob import glob
shps = glob(r‘c:\somedir\*.shp’)
> [‘C:\\somedir\\shp1.shp’, ‘C:\\somedir\\shp2.shp’, …]
Other useful standard library modules:
• csv• shutil• datetime• math• decimal• re• itertools
Python Module of the Weekhttp://www.doughellmann.com/PyMOTW/
Installing 3rd Party Python Packages
The Python Package Index(PyPI)
http://pypi.python.org/pypi
setuptools / easy_install
>c:\Python26\Scripts> easy_install pip
pip>pip install antigravity
>pip install antigravity==1.0.4
# use ==, >=, >, <, <=
>pip install ––upgrade antigravity
>pip uninstall antigravity
>pip search “kml”
>pip freeze > c:\requirements.txt
>pip install –r c:\requirements.txt
virtualenv – creates isolated Python environments
Yak shaving
That wasn’t so bad!
Public Art near PSU
(http://www.civicapps.org/datasets)
tablib
import arcpy, csv
src = r'C:\GIS_in_Action.gdb\public_art_selected'dest = r'C:\data\public_art_selected.csv‘
with open(dest, 'w') as f: w = csv.writer(f, quoting=1, lineterminator='\n') fieldlist = arcpy.ListFields(src) ignorefields = ['OBJECTID', 'Shape', 'detail_url'] fieldnames = [field.name for field in fieldlist if field.name not
in ignorefields]
w.writerow(fieldnames) rows = arcpy.SearchCursor(src) for row in rows: outputrow = [] for fieldname in fieldnames: outputrow.append(str(row.getValue(fieldname))) w.writerow(outputrow)
import tablib
src = r'C:\data\public_art_selected.csv'
contents = []
with open(src, 'r') as f: for line in f: contents.append(tuple(line.rstrip('\n').split(',')))
data = tablib.Dataset(*contents[1:], headers=tuple(contents[0]))
import tablib
src = r'C:\data\public_art_selected.csv'
contents = []
with open(src, 'r') as f: for line in f: contents.append(tuple(line.rstrip('\n').split(',')))
data = tablib.Dataset(*contents[1:], headers=tuple(contents[0]))
print data.csv
artist,title,street,lat,lng,image_url,record_id
Steven Gillman,Peace Chant,SW Park Ave. and SW Columbia St.,45.514946,-122.683125,http://data.racc.org/pa_inventory/0657/0657.jpg,789
Paul Sutinen,In the Shadow of the Elm,SW Park Ave. and SW Market St.,45.513751,122.684352,http://data.racc.org/pa_inventory/0658/06 . . .
Oliver Barrett,Rebecca at the Well (Shemanski Fountain),SW Park Ave. and SW Main St.,45.516939,-122.682039,http://data.racc.org/pa_in. . .
James Carpenter,Spectral Light Dome,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0898/0898.jpg,966
Edo Period,Kano School Japanese Screen,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0906/0906.jpg,972
Linda Ethier,Muse Maze Mirror Gaze,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0989/0989.jpg,1065
Henk Pander,Portland Town,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0990/0990.jpg,1066
Tom Hardy,Running Horses,SW 6th Ave. and SW Madison St.,45.515729,-122.680413,http://data.racc.org/pa_inventory/1071/1071.jpg,1185
Alexander Phimister Proctor,Theodore Roosevelt Rough Rider,SW Park Ave. and SW Jefferson St.,45.515738,-122.683275,http://data.r . . .
George Fite Waters,Abraham Lincoln,SW Park Ave. and SW Madison St.,45.516406,-122.682923,http://data.racc.org/pa_inventory/0660/066 . . .
Juan Alonso,Diva,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1261/1261.jpg,1674
Robert Calvo,Rose City Labyrinth,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1264/1264.jpg,1701
Zhao Suikang,Portland Pamphlets,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1266/1266.jpg,1705
Alejandro Colunga,Mago Hermano (Brother Wizard or Magician),1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_invento . . .
Donald Wilson,Holon,1525 SW Park Ave.,45.514043,-122.684217,http://data.racc.org/pa_inventory/1492/1492.jpg,2176
Cynthia Lahti,Station 4,511 SW College Street,45.509734,-122.682872,http://data.racc.org/pa_inventory/1550/1550.jpg,2278
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262b/1262b.jpg,2518
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262c/1262c.jpg,2519
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262d/1262d.jpg,2520
Patti Warashina,City Reflections,SW 6th Ave. and SW Main St.,45.516409,-122.680049,http://data.racc.org/pa_inventory/1872/1872.jpg,2881
Jack Archibald,Icarus Triumphant,1510 SW 13th Avenue,45.515271,-122.688128,http://data.racc.org/pa_inventory/1837/1837.jpg,2937
Keiko Hara,Verses - Reflected and Reflecting,1800 SW 6th Ave Suite 550,45.511733,-122.682559,http://data.racc.org/pa_inventory/18 . . .
artist title street lat lng
Steven Gillman Peace Chant SW Park Ave. and SW Columbia St. 45.514946 -122.683125
Paul Sutinen In the Shadow of the Elm SW Park Ave. and SW Market St. 45.513751 -122.684352
Oliver Barrett Rebecca at the Well (Shemanski Fountain) SW Park Ave. and SW Main St. 45.516939 -122.682039
James Carpenter Spectral Light Dome 1111 SW Broadway 45.516623 -122.681327
Edo Period Kano School Japanese Screen 1111 SW Broadway 45.516623 -122.681327
Linda Ethier Muse Maze Mirror Gaze 1111 SW Broadway 45.516623 -122.681327
Henk Pander Portland Town 1111 SW Broadway 45.516623 -122.681327
Tom Hardy Running Horses SW 6th Ave. and SW Madison St. 45.515729 -122.680413
Alexander Phimister Proctor Theodore Roosevelt Rough Rider SW Park Ave. and SW Jefferson St. 45.515738-122.683275
George Fite Waters Abraham Lincoln SW Park Ave. and SW Madison St. 45.516406 -122.682923
Juan Alonso Diva 1900 SW 4th Ave 45.509748 -122.68105
Robert Calvo Rose City Labyrinth 1900 SW 4th Ave 45.509748 -122.68105
Zhao Suikang Portland Pamphlets 1900 SW 4th Ave 45.509748 -122.68105
Alejandro Colunga Mago Hermano (Brother Wizard or Magician) 1111 SW Broadway 45.516623 -122.681327
Donald Wilson Holon 1525 SW Park Ave. 45.514043 -122.684217
Cynthia Lahti Station 4 511 SW College Street 45.509734 -122.682872
Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105
Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105
Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105
Patti Warashina City Reflections SW 6th Ave. and SW Main St. 45.516409 -122.680049
Jack Archibald Icarus Triumphant 1510 SW 13th Avenue 45.515271 -122.688128
Keiko Hara Verses - Reflected and Reflecting 1800 SW 6th Ave Suite 550 45.511733 -122.682559
print data.tsv
print data.json
[{"artist": "Steven Gillman", "title": "Peace Chant", "street": "SW Park Ave. and SW Columbia St.", "lat": "45.514946", "lng": "-122.683125", "image_url": "http://data.racc.org/pa_inventory/0657/0657.jpg", "record_id": "789"}, {"artist": "Paul Sutinen", "title": "In the Shadow of the Elm", "street": "SW Park Ave. and SW Market St.", "lat": "45.513751", "lng": "-122.684352", "image_url": "http://data.racc.org/pa_inventory/0658/0658.jpg", "record_id": "790"}, {"artist": "Oliver Barrett", "title": "Rebecca at the Well (Shemanski Fountain)", "street": "SW Park Ave. and SW Main St.", "lat": "45.516939", "lng": "-122.682039", "image_url": "http://data.racc.org/pa_inventory/0661/0661.jpg", "record_id": "791"}, {"artist": "James Carpenter", "title": "Spectral Light Dome", "street": "1111 SW Broadway", "lat": "45.516623", "lng": "-122.681327", "image_url": "http://data.racc.org/pa_inventory/0898/0898.jpg", "record_id": "966"}, {"artist": "Edo Period", "title": "Kano School Japanese Screen", "street": "1111 SW Broadway", "lat": "45.516623", "lng": "-122.681327", "image_url": "http://data.racc.org/pa_inventory/0906/0906.jpg", "record_id": "972"}, {"artist": "Linda Ethier", "title": "Muse Maze Mirror Gaze", "street": "1111 SW Broadway", "lat": "45.516623", "lng": "-122.681327", "image_url": "http://data.racc.org/pa_inventory/0989/0989.jpg", "record_id": "1065"}, {"artist": "Henk Pander", "title": "Portland Town", "street": "1111 SW Broadway", "lat": "45.516623", "lng": "-122.681327", "image_url": "http://data.racc.org/pa_inventory/0990/0990.jpg", "record_id": "1066"}, {"artist": "Tom Hardy", "title": "Running Horses", "street": "SW 6th Ave. and SW Madison St.", "lat": "45.515729", "lng": "-122.680413", "image_url": "http://data.racc.org/pa_inventory/1071/1071.jpg", "record_id": "1185"}, {"artist": "Alexander Phimister Proctor", "title": "Theodore Roosevelt Rough Rider", "street": "SW Park Ave. and SW Jefferson St.", "lat": "45.515738", "lng": "-122.683275", "image_url": "http://data.racc.org/pa_inventory/0659/0659.jpg", "record_id": "1192"}, {"artist": "George Fite Waters", "title": "Abraham Lincoln", "street": "SW Park Ave. and SW Madison St.", "lat": "45.516406", "lng": "-122.682923", "image_url": "http://data.racc.org/pa_inventory/0660/0660.jpg", "record_id": "1323"}, {"artist": "Juan Alonso", "title": "Diva", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1261/1261.jpg", "record_id": "1674"}, {"artist": "Robert Calvo", "title": "Rose City Labyrinth", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1264/1264.jpg", "record_id": "1701"}, {"artist": "Zhao Suikang", "title": "Portland Pamphlets", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1266/1266.jpg", "record_id": "1705"}, {"artist": "Alejandro Colunga", "title": "Mago Hermano (Brother Wizard or Magician)", "street": "1111 SW Broadway", "lat": "45.516623", "lng": "-122.681327", "image_url": "http://data.racc.org/pa_inventory/1481/1481.jpg", "record_id": "2152"}, {"artist": "Donald Wilson", "title": "Holon", "street": "1525 SW Park Ave.", "lat": "45.514043", "lng": "-122.684217", "image_url": "http://data.racc.org/pa_inventory/1492/1492.jpg", "record_id": "2176"}, {"artist": "Cynthia Lahti", "title": "Station 4", "street": "511 SW College Street", "lat": "45.509734", "lng": "-122.682872", "image_url": "http://data.racc.org/pa_inventory/1550/1550.jpg", "record_id": "2278"}, {"artist": "Robert Yoder", "title": "Sweet Air Bend", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1262b/1262b.jpg", "record_id": "2518"}, {"artist": "Robert Yoder", "title": "Sweet Air Bend", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1262c/1262c.jpg", "record_id": "2519"}, {"artist": "Robert Yoder", "title": "Sweet Air Bend", "street": "1900 SW 4th Ave", "lat": "45.509748", "lng": "-122.68105", "image_url": "http://data.racc.org/pa_inventory/1262d/1262d.jpg", "record_id": "2520"}, {"artist": "Patti Warashina", "title": "City Reflections", "street": "SW 6th Ave. and SW Main St.", "lat": "45.516409", "lng": "-122.680049", "image_url": "http://data.racc.org/pa_inventory/1872/1872.jpg", "record_id": "2881"}, {"artist": "Jack Archibald", "title": "Icarus Triumphant", "street": "1510 SW 13th Avenue", "lat": "45.515271", "lng": "-122.688128", "image_url": "http://data.racc.org/pa_inventory/1837/1837.jpg", "record_id": "2937"}, {"artist": "Keiko Hara", "title": "Verses - Reflected and Reflecting", "street": "1800 SW 6th Ave Suite 550", "lat": "45.511733", "lng": "-122.682559", "image_url": "http://data.racc.org/pa_inventory/1838/1838.jpg", "record_id": "3018"}]
open(r'C:\data\public_art_selected.xls', 'wb').write(data.xls)
artist title street lat lngSteven Gillman Peace Chant SW Park Ave. and SW Columbia St. 45.514946 -122.683125Paul Sutinen In the Shadow of the Elm SW Park Ave. and SW Market St. 45.513751 -122.684352Oliver Barrett Rebecca at the Well (Shemanski Fountain) SW Park Ave. and SW Main St. 45.516939 -122.682039James Carpenter Spectral Light Dome 1111 SW Broadway 45.516623 -122.681327Edo Period Kano School Japanese Screen 1111 SW Broadway 45.516623 -122.681327Linda Ethier Muse Maze Mirror Gaze 1111 SW Broadway 45.516623 -122.681327Henk Pander Portland Town 1111 SW Broadway 45.516623 -122.681327Tom Hardy Running Horses SW 6th Ave. and SW Madison St. 45.515729 -122.680413Alexander Phimister Proctor Theodore Roosevelt Rough Rider SW Park Ave. and SW Jefferson St. 45.515738 -122.683275George Fite Waters Abraham Lincoln SW Park Ave. and SW Madison St. 45.516406 -122.682923Juan Alonso Diva 1900 SW 4th Ave 45.509748 -122.68105Robert Calvo Rose City Labyrinth 1900 SW 4th Ave 45.509748 -122.68105Zhao Suikang Portland Pamphlets 1900 SW 4th Ave 45.509748 -122.68105Alejandro Colunga Mago Hermano (Brother Wizard or Magician) 1111 SW Broadway 45.516623 -122.681327Donald Wilson Holon 1525 SW Park Ave. 45.514043 -122.684217Cynthia Lahti Station 4 511 SW College Street 45.509734 -122.682872Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105Robert Yoder Sweet Air Bend 1900 SW 4th Ave 45.509748 -122.68105Patti Warashina City Reflections SW 6th Ave. and SW Main St. 45.516409 -122.680049Jack Archibald Icarus Triumphant 1510 SW 13th Avenue 45.515271 -122.688128Keiko Hara Verses - Reflected and Reflecting 1800 SW 6th Ave Suite 550 45.511733 -122.682559
tabular
import tabular
src = r'C:\data\public_art_selected.csv‘table = tabular.tabarray(SVfile=src)
table.sort(order=['street'])
print table[table['artist'] == 'Robert Yoder']
pivot_table = table.pivot('street', 'record_id')['artist']
pivot_table.saveSV(r'C:\data\public_art_selected_pivot.csv')
Shapely
“set-theoretic analysis and manipulation of planar features”
Create: Point, LineString, LinearRing, PolygonsMultiPoint, MultiLineString, MultiPolygon
General Attributes/Methods.area, .length, .bounds, geom_type, .distance (to another object)
Binary Predicatescontains, crosses, disjoint, equals, intersects, touches, within
set-theoretic methods.boundary, .centroid, .difference, .intersection, .symmetric_difference, .union
constructive method.buffer, .convex_hull, .envelope, .simplify
othermerging, cascading union
InteroperationWKT, numpy arrays, geo interface (GeoJSON)
import arcpyfrom shapely.geometry import MultiPoint, asShape, mapping
fc = r'C:\GIS_in_Action.gdb\public_art_selected‘
g = arcpy.Geometry()geometryList = arcpy.CopyFeatures_management(fc, g)mp = []
for item in geometryList: mp.append(asShape(item.__geo_interface__))points = MultiPoint(mp)
out_fc = r'C:\GIS_in_Action.gdb\public_art_selected_convex_hull‘
ch = points.convex_hullbuffered_ch = ch.buffer(100)
points_convex_hull = arcpy.AsShape(mapping(buffered_ch))arcpy.CopyFeatures_management(points_convex_hull, ch_fc)
prjFile = ‘path_to_prj_file’spatialRef = arcpy.SpatialReference(prjFile) arcpy.DefineProjection_management(out_fc, spatialRef)
Use Shapely in conjunction with pyproj for projected coordinates
gdal/ogr
from osgeo import gdal
dataset = gdal.Open(r'C:\data\rasters\LiDAR_be.tif')
cols, rows = dataset.RasterXSize, dataset.RasterYSizebands = dataset.RasterCountprint 'Columns: %i, Rows: %i, Bands: %i' % (cols, rows, bands)
Columns: 1914, Rows: 1858, Bands: 1
band = dataset.GetRasterBand(1)
print 'Band Type =',gdal.GetDataTypeName(band.DataType)min, max = band.GetMinimum(), band.GetMaximum()print 'Min=%.3f, Max=%.3f' % (min, max)
Band Type = Float32Min=10.094, Max=1000.430
from osgeo import ogr
shapefile = ogr.Open(r'C:\data\shps\public_art_selected.shp')layer = shapefile.GetLayer()
for i in range(layer.GetFeatureCount()): feature = layer.GetFeature(i) title = feature.GetField('title') geometry = feature.GetGeometryRef() print i, title, geometry.GetGeometryName()
0, Peace Chant ,POINT1, In the Shadow of the Elm ,POINT2, Rebecca at the Well (Shemanski Fountain) ,POINT3, Spectral Light Dome ,POINT4, Kano School Japanese Screen ,POINT5, Muse, Maze, Mirror, Gaze ,POINT6, Portland Town ,POINT7, Running Horses ,POINT
0, Peace Chant ,POINT1, In the Shadow of the Elm ,POINT2, Rebecca at the Well (Shemanski Fountain) ,POINT3, Spectral Light Dome ,POINT4, Kano School Japanese Screen ,POINT5, Muse, Maze, Mirror, Gaze ,POINT6, Portland Town ,POINT7, Running Horses ,POINT. . .
reportlab
public_art.csv
tablib
for row in data: # put in PDF
# Setting up the PDF
from reportlab.pdfgen.canvas import Canvasfrom reportlab.lib.pagesizes import letterfrom reportlab.lib.styles import getSampleStyleSheet
pdfFile = r'somedir/somefile.pdf'pdf = Canvas(pdfFile, pagesize=letter)pdf.showPage()pdf.save()
styles = getSampleStyleSheet()styleMRA = styles['Normal']pdf.setFont("Helvetica",24)
# Drawing boxes, images, and text
from reportlab.lib.units import inchfrom reportlab.lib.utils import ImageReader
pdf.rect(x, y, width, height, stroke=1, fill=0)# measurements are from lower left corner# use dist*inch
pdf.drawAlignedString(x, y, text)pdf.drawCentredString(x, y, text) #note British spellingphoto = ImageReader(url)pdf.drawImage(image, x, y, width, height, mask, preserveAspectRatio)
# Flowables
from reportlab.platypus import Paragraph, Framefrom reportlab.platypus.flowables import Spacer
text = []text.append(Paragraph(text, styleMRA))text.append(Spacer(0.1*inch, 0.1*inch))
f = Frame(x, y, width, height, leftPadding, bottomPadding, rightPadding, topPadding)
f.addFromList(text, pdf)
print data.csv
artist,title,street,lat,lng,image_url,record_id
Steven Gillman,Peace Chant,SW Park Ave. and SW Columbia St.,45.514946,-122.683125,http://data.racc.org/pa_inventory/0657/0657.jpg,789
Paul Sutinen,In the Shadow of the Elm,SW Park Ave. and SW Market St.,45.513751,122.684352,http://data.racc.org/pa_inventory/0658/06 . . .
Oliver Barrett,Rebecca at the Well (Shemanski Fountain),SW Park Ave. and SW Main St.,45.516939,-122.682039,http://data.racc.org/pa_in. . .
James Carpenter,Spectral Light Dome,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0898/0898.jpg,966
Edo Period,Kano School Japanese Screen,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0906/0906.jpg,972
Linda Ethier,Muse Maze Mirror Gaze,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0989/0989.jpg,1065
Henk Pander,Portland Town,1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_inventory/0990/0990.jpg,1066
Tom Hardy,Running Horses,SW 6th Ave. and SW Madison St.,45.515729,-122.680413,http://data.racc.org/pa_inventory/1071/1071.jpg,1185
Alexander Phimister Proctor,Theodore Roosevelt Rough Rider,SW Park Ave. and SW Jefferson St.,45.515738,-122.683275,http://data.r . . .
George Fite Waters,Abraham Lincoln,SW Park Ave. and SW Madison St.,45.516406,-122.682923,http://data.racc.org/pa_inventory/0660/066 . . .
Juan Alonso,Diva,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1261/1261.jpg,1674
Robert Calvo,Rose City Labyrinth,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1264/1264.jpg,1701
Zhao Suikang,Portland Pamphlets,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1266/1266.jpg,1705
Alejandro Colunga,Mago Hermano (Brother Wizard or Magician),1111 SW Broadway,45.516623,-122.681327,http://data.racc.org/pa_invento . . .
Donald Wilson,Holon,1525 SW Park Ave.,45.514043,-122.684217,http://data.racc.org/pa_inventory/1492/1492.jpg,2176
Cynthia Lahti,Station 4,511 SW College Street,45.509734,-122.682872,http://data.racc.org/pa_inventory/1550/1550.jpg,2278
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262b/1262b.jpg,2518
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262c/1262c.jpg,2519
Robert Yoder,Sweet Air Bend,1900 SW 4th Ave,45.509748,-122.68105,http://data.racc.org/pa_inventory/1262d/1262d.jpg,2520
Patti Warashina,City Reflections,SW 6th Ave. and SW Main St.,45.516409,-122.680049,http://data.racc.org/pa_inventory/1872/1872.jpg,2881
Jack Archibald,Icarus Triumphant,1510 SW 13th Avenue,45.515271,-122.688128,http://data.racc.org/pa_inventory/1837/1837.jpg,2937
Keiko Hara,Verses - Reflected and Reflecting,1800 SW 6th Ave Suite 550,45.511733,-122.682559,http://data.racc.org/pa_inventory/18 . . .
‘image_url’
‘artist’,‘title’,‘location’
mapnik
mapnik makespretty maps
The Map consists of one or more layers
Each Layer has a datasource
A Style groups and organizes rules
A Rule contains symbolizers and filters
Filter (optional)
Symbolizer
import mapnik
# OrthoOrtho_style = mapnik.Style()Ortho_rule = mapnik.Rule()Ortho_symbol = mapnik.RasterSymbolizer()Ortho_rule.symbols.append(Ortho_symbol)Ortho_style.rules.append(Ortho_rule)
# LineSymbolizerPolygon_style = mapnik.Style()Polygon_rule = mapnik.Rule()
stroke = mapnik.Stroke()stroke.color = mapnik.Color("#000000")stroke.width = 8.0
Polygon_outline_symbol = mapnik.LineSymbolizer(stroke)Polygon_rule.symbols.append(Polygon_outline_symbol)Polygon_style.rules.append(Polygon_rule)
# PointsPoints_style = mapnik.Style()Points_rule = mapnik.Rule()Points_symbol = mapnik.PointSymbolizer(r'C:\markers\red_pushpin.png',
"png", 64, 64)Points_symbol.allow_overlap = True
Points_rule.symbols.append(Points_symbol)Points_style.rules.append(Points_rule)
# OrthoOrtho_file = r'C:\data\ortho_mosaic.tif'Ortho_datasource = mapnik.Gdal(file=Ortho_file)Ortho_layer = mapnik.Layer("Ortho")Ortho_layer.datasource = Ortho_datasourceOrtho_layer.styles.append("Ortho_style")
# PolygonPolygon_file = r'C:\data\public_art_selected_ch_buffer.shp'Polygon_datasource = mapnik.Shapefile(file=Polygon_file)Polygon_layer = mapnik.Layer("Polygon")Polygon_layer.datasource = Polygon_datasourcePolygon_layer.styles.append("Polygon_style")
# PointsPoints_file = r'C:\data\public_art_selected.shp'Points_datasource = mapnik.Shapefile(file=Points_file)Points_layer = mapnik.Layer("Points")Points_layer.datasource = Points_datasourcePoints_layer.styles.append("Points_style")
# Mapmap = mapnik.Map(1800, 1800)map.background = mapnik.Color(“white")map.aspect_fix_mode = mapnik._mapnik.aspect_fix_mode.GROW_CANVASmap.append_style("Ortho_style", Ortho_style)map.append_style("Polygon_style", Polygon_style)map.append_style("Points_style", Points_style)
map.layers.append(Ortho_layer)map.layers.append(Polygon_layer)map.layers.append(Points_layer)
# map.zoom_all()map.zoom_to_box(mapnik.Envelope(524100, 5039373, 525240, 5040680))mapnik.render_to_file(map, "C:\mapnik_output\map.png", "png")
Alternative: Map Definition
File(XML)
Cascadenik
Being PythonicMark Pilgrim, Dive Into Pythonhttp://diveintopython.org
David Goodger, “Code Like a Pythonista”http://python.net/~goodger/projects/pycon/2007/idiomatic/
handout.html
# with# must be first import statement
from __future__ import with_statementwith open(r’c:\somedir\file.txt’) as f: for line in f: processline()
# iterating over records
import arcgisscriptinggp = arcgisscripting.create()shp = r’c:\someshp.shp’
rows = gp.searchcursor(shp)for row in iter(rows.next, None): doSomething()
# list comprehensions
a_list = [expression for item in iterable if condition]
fieldlist = arcpy.ListFields(src) ignorefields = ['OBJECTID', 'Shape', 'detail_url']
fieldnames = [field.name for field in fieldlist if field.name not in ignorefields]
[‘artist’, ‘title’, ‘street’, ‘lat’, ‘lng’, ‘image_url’, ‘record_id’
]
Documentation:
tablib http://tablib.org/tabular http://www.parsemydata.com/tabular/xlrd/xlwt http://www.python-excel.org/Shapely http://gispython.org/shapely/docs/1.2/pyproj http://code.google.com/p/pyproj/gdal/ogr http://trac.osgeo.org/gdal/wiki/
GdalOgrInPythonreportlab http://www.reportlab.com/software/
opensource/rl- toolkit/guide/mapnik http://trac.mapnik.org/wiki/
WindowsInstallation
arcpyArcGIS Python
arcpyArcGIS Python
CreditsImages
• import antigravity: http://xkcd.com/353/• Columbia library reading room: Wurts Bros., N.Y., "Business Library Reading Room," in
CU Libraries Exhibitions , Item #529, https://ldpd.lamp.columbia.edu/omeka/items/show/529 (accessed February 5, 2011).
• Stockholm public library: architect’s concept | http://features.cgsociety.org/stories/2009_05/2009_05_stockholmlibrary/18-final-image.jpg
• yak: Brian Dearth | http://www.flickr.com/photos/bdearth/4881180471• mapnik diagram: Erik Westra, Python Geospatial Development, p. 264 (slightly modified)
Datasets
• Portland Public art dataset: http://www.civicapps.org/datasets• LiDAR: http://pugetsoundlidar.ess.washington.edu/lidardata/restricted/projects/
2005lowercolumbiariver.html | http://www.oregongeology.org/sub/lidar/background.htm
• Ortho: The National Map Viewer (http://viewer.nationalmap.gov/viewer/)