SlideShare a Scribd company logo
Using PostGIS to add some spatial flavor to your applications  Steven Citron-Pousty Applied Technology Leader  ICF/Jones & Stokes
Agenda What is PostGIS Installing Getting data and importing Using in an application ASK QUESTIONS ALL ALONG
Assumptions about you Know PostgreSQL and SQL New to spatial analysis and PostGIS Mainly using a commercial mapping service for your base layers Interested in writing cool applications This will only be a short shallow introduction
 
What is PostGIS PostGIS adds support for geographic objects and geographic functions to PostgreSQL Points, Lines, Polygon, and Linear References Spatial function such as area, near, overlap, within, clip, and simplify
Competitive Offerings SQLLite – has spatiallite which is a kickin' compliment to PostGIS MySQL – doesn’t really implement all the functions and it only deals with bounding boxes SQLServer – only in SQLServer2008 but supported on all editions Oracle Spatial – full featured and includes a broad range of client libraries DB2 and Sybase and Informix and Ingres ESRI’s SDE can use PostGIS as a DB
Installing Other libraries you want Proj4.5 for projection GEOS 3.0 for spatial operations Windows – use the “application stack builder” There are RPMs on the PostGIS site – not always the latest You can use Synaptic for Ubuntu – not always the latest Build is really simple, as long as you have required libraries installed http://www.paolocorti.net/2008/01/30/installing-postgis-on-ubuntu/
Other Steps Add the objects and functions from the provided SQL files Best practice is to make these into a template for future databases From there making DBs is easy cheesy
Two more things you need to understand Almost there – I promise
 
Shapefiles when is a file not a file
Projections and Datums
 
More Projection Goodness EPSG  (European Petroleum Survey Group)  has a number for most projections and datum combinations Most online commercial mapping services, expect geographic coordinates with WGS84 datum EPSG:4326   Geographic coordinates system with WGS84 datum.  Degrees are not constant distance as you move North and South Not very accurate for distance and area calcs except over small areas You want to use projected layers (or project on the fly) for area and distance calcs
Why should you care Because most of the data in the world is not in GCS WGS84 – eventhough your GPS is
Projecting using ogr2ogr Assuming there is a .prj file you need to find your output projection http://Spatialreference.org ogr2ogr  -t_srs EPSG:4326 -f "ESRI Shapefile" water_bodies_gcs.shp water_bodies.shp
Now let’s make some SQL Shp2pgsql is a command-line utility to take a shapefile to a SQL file The geometry field is called  the_geom shp2pgsql.exe -s 4326 -I C:\data\water_bodies_gcs.shp waterbodies > C:\data\waterbodies.sql
Y’all know what to do with SQL psql -q -U postgres -f C:\data\waterbodies.sql kerncounty With lots-o-features you want to use –q option to prevent spamming your terminal
 
Let’s get this party started SELECT  gid, the_geom FROM waterbodies  WHERE  gid = 2; gid |  the_geom -----+------------------------------------------------------------------------------------------------------------------------  2 | 106000020E6100000010000000103000000010000002E00000002CB8FC170C65DC06200F8D0E7B341408625910970C65DC0DE898BCAE7B3414053748B1A6FC65DC0199092E7E6B34140576BAFCB6EC65DC07815C607E6B34140926B64A66EC65DC0D0D11854E4B34140CA783CC66EC65DC091477CD7E2B34140FD8B372B6FC65DC02D75F091E1B341400748F1756FC65DC02C1C7C06E0B34140A0CBF8846FC65DC01B057AC2DEB34140BD6BDE586FC65DC036C25B1ADEB34140E73E8FBC6EC65DC051B6DE2DDDB3414037EFA3B86DC65DC0A6E75E4DDCB34140EECF5AF16CC65DC007312311DBB341405304E1D16CC65DC0C653541FDAB34140B352AB826CC65DC06800DD22D9B34140FDECCB8C6CC65DC0A8D8188ED7B3414028DA62606DC65DC03020AA9DD5B341401345D79D6EC65DC045CF8743D5B3414039BFF5A56FC65DC071F2D61AD6B34140D4391F4E70C65DC01F041E4CD7B34140FD50463A70C65DC0534507A5D8B3414087FB5FFA6FC65DC0C436FF22DAB3414092BF83B46FC65DC05EEC9961DBB34140456F69BC6FC65DC0E74915C3DCB34140DCCD550170C65DC022859B35DEB34140A929A59870C65DC014E6EA42DFB34140D7388A8E70C65DC0B2B22CD4DFB341405EA0F73270C65DC0E92146C4E0B341402EC4B3DE6FC65DC066AD87D3E1B3414083B732D26FC65DC0583D9907E3B3414017F8104E70C65DC07C37AB39E4B341404DFB09DA70C65DC0AB6838C7E4B341404E376F4871C65DC0D88F88EAE4B34140E290F4CC71C65DC04318C2B1E4B34140B2B1373672C65DC001CD36A7E3B3414094289CBD72C65DC032BF27F1E2B34140551D1E3773C65DC053E9A4C1E2B34140B247EEC273C65DC03C50B08FE3B34140EFFF2CD573C65DC0849F2D84E4B34140BB03E9A973C65DC0D397181FE5B341406292782B73C65DC0103A5EA9E5B34140B2EB752172C65DC0E72BDC89E5B341407818E39771C65DC0978C430BE6B34140AAE00CA471C65DC0E6C241AEE6B341405DD5367B71C65DC050325840E7B3414002CB8FC170C65DC06200F8D0E7B34140 WTF!
Well Known Text (WKT)‏ SELECT gid, asText(the_geom) AS Geometry FROM waterbodies WHERE gid = 2; gid |  geometry -----+------------------------------------------------------------------------------------------------------------------ 2 | MULTIPOLYGON(((-119.100632086203 35.4055119715638,-119.100588218445 35.4055112058011,-119.100531231104 35.4054841485633,-119.100512429531 35.4054574696738,-119.100503538195 35.4054055329503,-119.100511130385 35.4053601605257,-119.100535206075 35.405321352397,-119.100553022028 35.405274210549,-119.100556605305 35.4052355857659,-119.100546090324 35.4052155445137,-119.100508823288 35.4051873528921,-119.100446853726 35.4051605904963,-119.100399340328 35.4051228925546,-119.100391835921 35.4050940667872,-119.100372950847 35.4050639704809,-119.100375365397 35.405015718586,-119.100425812278 35.4049565392201,-119.10050149939 35.4049457944043,-119.100564470279 35.4049714612528,-119.100604563231 35.4050078531802,-119.100599831265 35.4050489697935,-119.100584596379 35.4050945039903,-119.100567940388 35.4051324845866,-119.1005698232335.4051746229123,-119.10058625583 35.4052187928558,-119.100622330944 35.4052508971182,-119.100619921668 35.4052682131054,-19.100598089049 35.4052968351787,-119.100577998689 35.4053291714179,-119.100575017479 35.4053658960572,-119.100604549953 35.405402382471,-119.100637922046 35.4054192567285,-119.100664242372 35.4054234663778,-119.100695837816 35.4054166982392,-119.100720934285 35.4053849237043,-119.100753214358 35.4053632206036,-119.100782184037 35.405357556842,-119.100815518089 35.4053821192651,-119.100819868035 35.4054112646836,-119.10080955272 35.4054297323306,-119.100779407259 35.4054462156383,-119.100715985448 35.4054424595886,-119.100683185361 35.405457885726,-119.100686085296 35.4054773160076,-119.100676349209 35.4054947310111,-119.100632086203 35.4055119715638)))‏
Lesson Learned Ask for your responses in Text format when you want to know what is going on eWKT includes the projection information 'SRID=4326;MULTIPOLYGON(((-119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))' asKML, asSVG, asGeoJSON (1.3.4) or asGML SELECT asKML(the_geom) FROM  watercourses WHERE gid = 17;
<MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-118.90476592 907,35.4477387779291  -118.904082378315,35.4465853812531  -118.904745088997,35.447 2133838697  -118.90476592907,35.4477387779291</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </MultiGeometry>
Inserting a new record Projection has to match INSERT INTO firestations(station_na, the_geom)‏ VALUES('Best LittleFire House in CA', ST_SetSRID(ST_MakePoint(-119.5, 34.5), 4326) );
Select using the geometry
 
FOSS desktop GIS uDIG OpenJump gvSIG QGIS MapWindows
 
Distance  In units of the underlying coverage SELECT gid FROM waterbodies WHERE  ST_DWithin('SRID=4326;POINT (-119.103762382096 35.4122898449297)',  the_geom, 0.005);   gid -----   4   5   6   7   8
Let’s find all the parcels in Agricultural Zones SELECT p.gid FROM parcels AS p,  zoning AS z WHERE z.comb_zn  LIKE 'A%' AND  ST_Within(p.the_geom, z.the_geom);
Do something with the geometry after selection
 
Calculating Area SELECT  sum(ST_Area(z.the_geom))  FROM zoning AS z WHERE z.comb_zn LIKE 'NR%'; sum -------------------- 0.0131834159551545
Turn polygons into points SELECT gid,  asText(ST_Centroid(the_geom))  FROM waterbodies WHERE gid = 124; gid |  geometry -----+------------------------------------------- 124 | POINT(-118.427120958287 35.6702299014044)‏ SELECT gid,  asText(ST_PointOnSurface(the_geom))  FROM waterbodies WHERE gid = 124; gid |  geometry -----+------------------------------------------- 124 | POINT(-118.449967685908 35.6911672413056)‏
Create new tables using a select CREATE TABLE biglake WITH OIDS AS SELECT gid, the_geom FROM waterbodies WHERE gid = 124; SELECT  ST_AREA(the_geom)  FROM biglake; st_area --------------------- 0.00313986591299908
Buffering
Some SQL to buffer SELECT  ST_Area(ST_Buffer(the_geom, 0.1))  FROM biglake; st_area -------------------- 0.0718529848413709 Remember that is used to be 0.003
 
Spatial Operators
Clip to the bounding box SELECT gid,  ST_Intersection(the_geom, 'SRID=4326;MULTIPOLYGON((( -119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))')   FROM watercourses WHERE  ST_Intersects(the_geom,  'SRID=4326;MULTIPOLYGON((( -119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))');
Simplifying geometries Most geometries have more information than you can display There  are algorithms for weeding out points  Trade-off retaining “shape” versus less points
Select  ST_NPoints(the_geom)  FROM  watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 265 68 48
SELECT  ST_NPoints(ST_Simplify(the_geom, 0.00001))  FROM watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 65 19 18
SELECT  ST_NPoints(ST_Simplify(the_geom, 0.0001))  FROM watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 18 6 7
So how do you bring this together in an app Never send 3000 pts to the browser Putting your information in a DB gives you way more control over what you return and display http://demo.decarta.com/opensearchservice/index.html
Where do you go now - PostGIS Home http://postgis.refractions.net/ Tools to use with PostGIS http://postgis.refractions.net/support/wiki/index.php?ToolsSupportPostgis Good support Wiki http://postgis.refractions.net/support/wiki/ Another Introduction http://www.mapbender.org/presentations/Spatial_Data_Management_Arnulf_Christl/Spatial_Data_Management_Arnulf_Christl.pdf Great OS-GEO resources http://www.bostongis.com/ PostGIS specific  http://www.bostongis.com/postgis_quickguide.bqg?outputformat=PDF Nice GIS on a Stick for Windows http://www.archaeogeek.com/blog/portable-gis /
Where to get Data Kern County http://www.co.kern.ca.us/gis/downloads.asp California http://gis.ca.gov/casil/ US Census  http://www.census.gov/geo/www/tiger/ Some UN http://www.grida.no/gis/index.htm http://www.geographynetwork.com/ http://gos2.geodata.gov/wps/portal/gos Open source Data http://www.fortiusone.com/ OSM http:// wiki.openstreetmap.org/index.php/Planet.osm http://code.google.com/p/osm2shp/
Map API to use OpenStreetMap - CloudMade http://developer.decarta.com Google Microsoft Mapquest
 

More Related Content

Similar to LinuxFest NW - Using Postgis To Add Some Spatial Flavor To Your App (20)

PPT
Using PostGIS To Add Some Spatial Flavor To Your Application
Steven Pousty
 
PPT
Getting started with PostGIS geographic database
EDINA, University of Edinburgh
 
PPT
Getting Started with PostGIS geographic database - Lasma Sietinsone, EDINA
JISC GECO
 
ODP
Intro To PostGIS
mleslie
 
PPT
Building a Spatial Database in PostgreSQL
Kudos S.A.S
 
PDF
Building A Spatial Database In Postgresql (Ppt).pdf
ssuser0ab1a4
 
PPT
Building a Spatial Database in PostgreSQL
Sohail Akbar Goheer
 
PPTX
FOSS4G 2017 Spatial Sql for Rookies
Todd Barr
 
PDF
2017 RM-URISA Track: Spatial SQL - The Best Kept Secret in the Geospatial World
GIS in the Rockies
 
PDF
Covering the earth and the cloud the next generation of spatial in sql server...
Texas Natural Resources Information System
 
PPT
Stockage, manipulation et analyse de données matricielles avec PostGIS Raster
ACSG Section Montréal
 
PDF
Post gispguk
lbtlsystems
 
PPTX
SQLBits X SQL Server 2012 Spatial
Michael Rys
 
PPTX
Spatial Databases
Pratibha Chaudhary
 
PDF
Discover PostGIS: Add Spatial functions to PostgreSQL
EDB
 
PPT
Spatial SQL
PhilWinstanley
 
PPTX
PostGIS and Spatial SQL
Todd Barr
 
PPT
GIS_Whirlwind_Tour.ppt
vikramvsu
 
PPT
GIS_Whirlwind_Tour.ppt
Fatima891926
 
PPT
GIS_Whirlwind_Tour.ppt
GodwinKingNyamador
 
Using PostGIS To Add Some Spatial Flavor To Your Application
Steven Pousty
 
Getting started with PostGIS geographic database
EDINA, University of Edinburgh
 
Getting Started with PostGIS geographic database - Lasma Sietinsone, EDINA
JISC GECO
 
Intro To PostGIS
mleslie
 
Building a Spatial Database in PostgreSQL
Kudos S.A.S
 
Building A Spatial Database In Postgresql (Ppt).pdf
ssuser0ab1a4
 
Building a Spatial Database in PostgreSQL
Sohail Akbar Goheer
 
FOSS4G 2017 Spatial Sql for Rookies
Todd Barr
 
2017 RM-URISA Track: Spatial SQL - The Best Kept Secret in the Geospatial World
GIS in the Rockies
 
Covering the earth and the cloud the next generation of spatial in sql server...
Texas Natural Resources Information System
 
Stockage, manipulation et analyse de données matricielles avec PostGIS Raster
ACSG Section Montréal
 
Post gispguk
lbtlsystems
 
SQLBits X SQL Server 2012 Spatial
Michael Rys
 
Spatial Databases
Pratibha Chaudhary
 
Discover PostGIS: Add Spatial functions to PostgreSQL
EDB
 
Spatial SQL
PhilWinstanley
 
PostGIS and Spatial SQL
Todd Barr
 
GIS_Whirlwind_Tour.ppt
vikramvsu
 
GIS_Whirlwind_Tour.ppt
Fatima891926
 
GIS_Whirlwind_Tour.ppt
GodwinKingNyamador
 

More from Steven Pousty (20)

PPTX
APPLICATIONS AND CONTAINERS AT SCALE: OpenShift + Kubernetes + Docker
Steven Pousty
 
PDF
Introduction to PaaS for application developers
Steven Pousty
 
PDF
London Cloud Summit 2014 - raising the tide: getting developers in the cloud
Steven Pousty
 
PPT
Workshop For pycon13
Steven Pousty
 
ODP
Build a PaaS with OpenShift Origin
Steven Pousty
 
PPTX
Monkigras - dropping science on your developer ecosystem
Steven Pousty
 
ODT
Spatial script for MongoBoulder
Steven Pousty
 
PPTX
Spatial MongoDB, Node.JS, and Express - server-side JS for your application
Steven Pousty
 
PDF
Spatial script for CIMA
Steven Pousty
 
PDF
Spatial script for my JS.Everywhere 2012
Steven Pousty
 
PPTX
Spatial Mongo and Node.JS on Openshift JS.Everywhere 2012
Steven Pousty
 
PDF
Spatial script for Spatial mongo for PHP and Zend
Steven Pousty
 
PPTX
Spatial mongo for PHP and Zend
Steven Pousty
 
PPTX
Dropping Science on Your Developer Ecosystem - lessons from Ecosystem Management
Steven Pousty
 
PDF
Open shift intro for Philly PUG
Steven Pousty
 
PPT
Open shift intro for Philly PUG
Steven Pousty
 
PDF
Script for the geomeetup presentation
Steven Pousty
 
PPT
Openshift GeoSpatial Capabilities
Steven Pousty
 
PDF
MongoSF - Spatial MongoDB in OpenShift - script file
Steven Pousty
 
PPT
Mongo sf spatialmongo
Steven Pousty
 
APPLICATIONS AND CONTAINERS AT SCALE: OpenShift + Kubernetes + Docker
Steven Pousty
 
Introduction to PaaS for application developers
Steven Pousty
 
London Cloud Summit 2014 - raising the tide: getting developers in the cloud
Steven Pousty
 
Workshop For pycon13
Steven Pousty
 
Build a PaaS with OpenShift Origin
Steven Pousty
 
Monkigras - dropping science on your developer ecosystem
Steven Pousty
 
Spatial script for MongoBoulder
Steven Pousty
 
Spatial MongoDB, Node.JS, and Express - server-side JS for your application
Steven Pousty
 
Spatial script for CIMA
Steven Pousty
 
Spatial script for my JS.Everywhere 2012
Steven Pousty
 
Spatial Mongo and Node.JS on Openshift JS.Everywhere 2012
Steven Pousty
 
Spatial script for Spatial mongo for PHP and Zend
Steven Pousty
 
Spatial mongo for PHP and Zend
Steven Pousty
 
Dropping Science on Your Developer Ecosystem - lessons from Ecosystem Management
Steven Pousty
 
Open shift intro for Philly PUG
Steven Pousty
 
Open shift intro for Philly PUG
Steven Pousty
 
Script for the geomeetup presentation
Steven Pousty
 
Openshift GeoSpatial Capabilities
Steven Pousty
 
MongoSF - Spatial MongoDB in OpenShift - script file
Steven Pousty
 
Mongo sf spatialmongo
Steven Pousty
 
Ad

Recently uploaded (20)

PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Ad

LinuxFest NW - Using Postgis To Add Some Spatial Flavor To Your App

  • 1. Using PostGIS to add some spatial flavor to your applications Steven Citron-Pousty Applied Technology Leader ICF/Jones & Stokes
  • 2. Agenda What is PostGIS Installing Getting data and importing Using in an application ASK QUESTIONS ALL ALONG
  • 3. Assumptions about you Know PostgreSQL and SQL New to spatial analysis and PostGIS Mainly using a commercial mapping service for your base layers Interested in writing cool applications This will only be a short shallow introduction
  • 4.  
  • 5. What is PostGIS PostGIS adds support for geographic objects and geographic functions to PostgreSQL Points, Lines, Polygon, and Linear References Spatial function such as area, near, overlap, within, clip, and simplify
  • 6. Competitive Offerings SQLLite – has spatiallite which is a kickin' compliment to PostGIS MySQL – doesn’t really implement all the functions and it only deals with bounding boxes SQLServer – only in SQLServer2008 but supported on all editions Oracle Spatial – full featured and includes a broad range of client libraries DB2 and Sybase and Informix and Ingres ESRI’s SDE can use PostGIS as a DB
  • 7. Installing Other libraries you want Proj4.5 for projection GEOS 3.0 for spatial operations Windows – use the “application stack builder” There are RPMs on the PostGIS site – not always the latest You can use Synaptic for Ubuntu – not always the latest Build is really simple, as long as you have required libraries installed http://www.paolocorti.net/2008/01/30/installing-postgis-on-ubuntu/
  • 8. Other Steps Add the objects and functions from the provided SQL files Best practice is to make these into a template for future databases From there making DBs is easy cheesy
  • 9. Two more things you need to understand Almost there – I promise
  • 10.  
  • 11. Shapefiles when is a file not a file
  • 13.  
  • 14. More Projection Goodness EPSG (European Petroleum Survey Group) has a number for most projections and datum combinations Most online commercial mapping services, expect geographic coordinates with WGS84 datum EPSG:4326 Geographic coordinates system with WGS84 datum. Degrees are not constant distance as you move North and South Not very accurate for distance and area calcs except over small areas You want to use projected layers (or project on the fly) for area and distance calcs
  • 15. Why should you care Because most of the data in the world is not in GCS WGS84 – eventhough your GPS is
  • 16. Projecting using ogr2ogr Assuming there is a .prj file you need to find your output projection http://Spatialreference.org ogr2ogr -t_srs EPSG:4326 -f &quot;ESRI Shapefile&quot; water_bodies_gcs.shp water_bodies.shp
  • 17. Now let’s make some SQL Shp2pgsql is a command-line utility to take a shapefile to a SQL file The geometry field is called the_geom shp2pgsql.exe -s 4326 -I C:\data\water_bodies_gcs.shp waterbodies > C:\data\waterbodies.sql
  • 18. Y’all know what to do with SQL psql -q -U postgres -f C:\data\waterbodies.sql kerncounty With lots-o-features you want to use –q option to prevent spamming your terminal
  • 19.  
  • 20. Let’s get this party started SELECT gid, the_geom FROM waterbodies WHERE gid = 2; gid | the_geom -----+------------------------------------------------------------------------------------------------------------------------ 2 | 106000020E6100000010000000103000000010000002E00000002CB8FC170C65DC06200F8D0E7B341408625910970C65DC0DE898BCAE7B3414053748B1A6FC65DC0199092E7E6B34140576BAFCB6EC65DC07815C607E6B34140926B64A66EC65DC0D0D11854E4B34140CA783CC66EC65DC091477CD7E2B34140FD8B372B6FC65DC02D75F091E1B341400748F1756FC65DC02C1C7C06E0B34140A0CBF8846FC65DC01B057AC2DEB34140BD6BDE586FC65DC036C25B1ADEB34140E73E8FBC6EC65DC051B6DE2DDDB3414037EFA3B86DC65DC0A6E75E4DDCB34140EECF5AF16CC65DC007312311DBB341405304E1D16CC65DC0C653541FDAB34140B352AB826CC65DC06800DD22D9B34140FDECCB8C6CC65DC0A8D8188ED7B3414028DA62606DC65DC03020AA9DD5B341401345D79D6EC65DC045CF8743D5B3414039BFF5A56FC65DC071F2D61AD6B34140D4391F4E70C65DC01F041E4CD7B34140FD50463A70C65DC0534507A5D8B3414087FB5FFA6FC65DC0C436FF22DAB3414092BF83B46FC65DC05EEC9961DBB34140456F69BC6FC65DC0E74915C3DCB34140DCCD550170C65DC022859B35DEB34140A929A59870C65DC014E6EA42DFB34140D7388A8E70C65DC0B2B22CD4DFB341405EA0F73270C65DC0E92146C4E0B341402EC4B3DE6FC65DC066AD87D3E1B3414083B732D26FC65DC0583D9907E3B3414017F8104E70C65DC07C37AB39E4B341404DFB09DA70C65DC0AB6838C7E4B341404E376F4871C65DC0D88F88EAE4B34140E290F4CC71C65DC04318C2B1E4B34140B2B1373672C65DC001CD36A7E3B3414094289CBD72C65DC032BF27F1E2B34140551D1E3773C65DC053E9A4C1E2B34140B247EEC273C65DC03C50B08FE3B34140EFFF2CD573C65DC0849F2D84E4B34140BB03E9A973C65DC0D397181FE5B341406292782B73C65DC0103A5EA9E5B34140B2EB752172C65DC0E72BDC89E5B341407818E39771C65DC0978C430BE6B34140AAE00CA471C65DC0E6C241AEE6B341405DD5367B71C65DC050325840E7B3414002CB8FC170C65DC06200F8D0E7B34140 WTF!
  • 21. Well Known Text (WKT)‏ SELECT gid, asText(the_geom) AS Geometry FROM waterbodies WHERE gid = 2; gid | geometry -----+------------------------------------------------------------------------------------------------------------------ 2 | MULTIPOLYGON(((-119.100632086203 35.4055119715638,-119.100588218445 35.4055112058011,-119.100531231104 35.4054841485633,-119.100512429531 35.4054574696738,-119.100503538195 35.4054055329503,-119.100511130385 35.4053601605257,-119.100535206075 35.405321352397,-119.100553022028 35.405274210549,-119.100556605305 35.4052355857659,-119.100546090324 35.4052155445137,-119.100508823288 35.4051873528921,-119.100446853726 35.4051605904963,-119.100399340328 35.4051228925546,-119.100391835921 35.4050940667872,-119.100372950847 35.4050639704809,-119.100375365397 35.405015718586,-119.100425812278 35.4049565392201,-119.10050149939 35.4049457944043,-119.100564470279 35.4049714612528,-119.100604563231 35.4050078531802,-119.100599831265 35.4050489697935,-119.100584596379 35.4050945039903,-119.100567940388 35.4051324845866,-119.1005698232335.4051746229123,-119.10058625583 35.4052187928558,-119.100622330944 35.4052508971182,-119.100619921668 35.4052682131054,-19.100598089049 35.4052968351787,-119.100577998689 35.4053291714179,-119.100575017479 35.4053658960572,-119.100604549953 35.405402382471,-119.100637922046 35.4054192567285,-119.100664242372 35.4054234663778,-119.100695837816 35.4054166982392,-119.100720934285 35.4053849237043,-119.100753214358 35.4053632206036,-119.100782184037 35.405357556842,-119.100815518089 35.4053821192651,-119.100819868035 35.4054112646836,-119.10080955272 35.4054297323306,-119.100779407259 35.4054462156383,-119.100715985448 35.4054424595886,-119.100683185361 35.405457885726,-119.100686085296 35.4054773160076,-119.100676349209 35.4054947310111,-119.100632086203 35.4055119715638)))‏
  • 22. Lesson Learned Ask for your responses in Text format when you want to know what is going on eWKT includes the projection information 'SRID=4326;MULTIPOLYGON(((-119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))' asKML, asSVG, asGeoJSON (1.3.4) or asGML SELECT asKML(the_geom) FROM watercourses WHERE gid = 17;
  • 23. <MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-118.90476592 907,35.4477387779291 -118.904082378315,35.4465853812531 -118.904745088997,35.447 2133838697 -118.90476592907,35.4477387779291</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </MultiGeometry>
  • 24. Inserting a new record Projection has to match INSERT INTO firestations(station_na, the_geom)‏ VALUES('Best LittleFire House in CA', ST_SetSRID(ST_MakePoint(-119.5, 34.5), 4326) );
  • 25. Select using the geometry
  • 26.  
  • 27. FOSS desktop GIS uDIG OpenJump gvSIG QGIS MapWindows
  • 28.  
  • 29. Distance In units of the underlying coverage SELECT gid FROM waterbodies WHERE ST_DWithin('SRID=4326;POINT (-119.103762382096 35.4122898449297)', the_geom, 0.005); gid ----- 4 5 6 7 8
  • 30. Let’s find all the parcels in Agricultural Zones SELECT p.gid FROM parcels AS p, zoning AS z WHERE z.comb_zn LIKE 'A%' AND ST_Within(p.the_geom, z.the_geom);
  • 31. Do something with the geometry after selection
  • 32.  
  • 33. Calculating Area SELECT sum(ST_Area(z.the_geom)) FROM zoning AS z WHERE z.comb_zn LIKE 'NR%'; sum -------------------- 0.0131834159551545
  • 34. Turn polygons into points SELECT gid, asText(ST_Centroid(the_geom)) FROM waterbodies WHERE gid = 124; gid | geometry -----+------------------------------------------- 124 | POINT(-118.427120958287 35.6702299014044)‏ SELECT gid, asText(ST_PointOnSurface(the_geom)) FROM waterbodies WHERE gid = 124; gid | geometry -----+------------------------------------------- 124 | POINT(-118.449967685908 35.6911672413056)‏
  • 35. Create new tables using a select CREATE TABLE biglake WITH OIDS AS SELECT gid, the_geom FROM waterbodies WHERE gid = 124; SELECT ST_AREA(the_geom) FROM biglake; st_area --------------------- 0.00313986591299908
  • 37. Some SQL to buffer SELECT ST_Area(ST_Buffer(the_geom, 0.1)) FROM biglake; st_area -------------------- 0.0718529848413709 Remember that is used to be 0.003
  • 38.  
  • 40. Clip to the bounding box SELECT gid, ST_Intersection(the_geom, 'SRID=4326;MULTIPOLYGON((( -119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))') FROM watercourses WHERE ST_Intersects(the_geom, 'SRID=4326;MULTIPOLYGON((( -119.5 35.0, -119.0 35.0, -119.0 35.5, -119.5 35.5, -119.5 35.0)))');
  • 41. Simplifying geometries Most geometries have more information than you can display There are algorithms for weeding out points Trade-off retaining “shape” versus less points
  • 42. Select ST_NPoints(the_geom) FROM watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 265 68 48
  • 43. SELECT ST_NPoints(ST_Simplify(the_geom, 0.00001)) FROM watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 65 19 18
  • 44. SELECT ST_NPoints(ST_Simplify(the_geom, 0.0001)) FROM watercourses WHERE gid IN (12, 14, 17); st_npoints ------------ 18 6 7
  • 45. So how do you bring this together in an app Never send 3000 pts to the browser Putting your information in a DB gives you way more control over what you return and display http://demo.decarta.com/opensearchservice/index.html
  • 46. Where do you go now - PostGIS Home http://postgis.refractions.net/ Tools to use with PostGIS http://postgis.refractions.net/support/wiki/index.php?ToolsSupportPostgis Good support Wiki http://postgis.refractions.net/support/wiki/ Another Introduction http://www.mapbender.org/presentations/Spatial_Data_Management_Arnulf_Christl/Spatial_Data_Management_Arnulf_Christl.pdf Great OS-GEO resources http://www.bostongis.com/ PostGIS specific http://www.bostongis.com/postgis_quickguide.bqg?outputformat=PDF Nice GIS on a Stick for Windows http://www.archaeogeek.com/blog/portable-gis /
  • 47. Where to get Data Kern County http://www.co.kern.ca.us/gis/downloads.asp California http://gis.ca.gov/casil/ US Census http://www.census.gov/geo/www/tiger/ Some UN http://www.grida.no/gis/index.htm http://www.geographynetwork.com/ http://gos2.geodata.gov/wps/portal/gos Open source Data http://www.fortiusone.com/ OSM http:// wiki.openstreetmap.org/index.php/Planet.osm http://code.google.com/p/osm2shp/
  • 48. Map API to use OpenStreetMap - CloudMade http://developer.decarta.com Google Microsoft Mapquest
  • 49.