2009.foss4g.org. spatial database tips & tricks paul ramsey [email protected]
TRANSCRIPT
![Page 1: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/1.jpg)
2009.foss4g.org
![Page 3: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/3.jpg)
Housekeeping
• Copy workshop from DVD• Download from
http://xx.xx.xx.xx/xxx/spdb-003.zip• Install or not• Ignore me or not• Examples also at
http://xx.xx.xx.xx:8080/spatialdbtips
![Page 4: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/4.jpg)
Impatient People
• They try to install without reading instructions
• When you see an error box during PostGIS install, click “Ignore”
• Remember to create “medford” (not “postgis”) database during PostGIS install
![Page 5: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/5.jpg)
Impatient People
![Page 6: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/6.jpg)
It’s not dead, it’s just resting…It’s not dead, it’s just resting…
![Page 7: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/7.jpg)
Motivation
• Spatial databases are powerful• Godlike, really• You do not need “GIS software”• Your database is “GIS software”• You do not need “spatial
middleware”• See above
![Page 8: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/8.jpg)
Standard Database
• Has data types– varchar– integer– real– date
![Page 9: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/9.jpg)
Spatial Database
• Has spatial data types– point– linestring– polygon– multipoint– multilinestring– multipolygon
![Page 10: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/10.jpg)
Standard Database
• Has one-dimensional indexes– b-tree– hash
![Page 11: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/11.jpg)
Spatial Database
• Has spatial indexes– r-tree– quad-tree– grid
![Page 12: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/12.jpg)
![Page 13: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/13.jpg)
![Page 14: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/14.jpg)
![Page 15: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/15.jpg)
![Page 16: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/16.jpg)
Find intersecting shapes…
![Page 17: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/17.jpg)
Start with all boxes,
![Page 18: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/18.jpg)
find intersecting boxes,
![Page 19: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/19.jpg)
then find intersecting shapes.
![Page 20: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/20.jpg)
Standard Database
• Has functions• Work against standard types
– lower()– round()– substring()– trim()– dayofweek ()
![Page 21: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/21.jpg)
Spatial Database
• Has spatial functions• Work against spatial types
– ST_Area(geometry)– ST_Distance(geometry,geometry)– ST_Intersects(geometry,geometry)– ST_DWithin(geometry,geometry,radiu
s)– ST_Union(geometry,geometry)
![Page 22: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/22.jpg)
![Page 23: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/23.jpg)
Open Geospatial Consortium (OGC)
Simple Features for SQL (SFSQL)
![Page 24: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/24.jpg)
![Page 25: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/25.jpg)
![Page 26: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/26.jpg)
![Page 27: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/27.jpg)
Locator
Spatial
![Page 28: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/28.jpg)
• No buffer operation
• No union operation
• No intersection operation
• No centroid point
• No area or length calculation
L O C A T O R
![Page 29: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/29.jpg)
• Linear referencing system (LRS) support• Spatial analysis and mining functions
and procedures (SDO_SAM package)• Geocoding support (SDO_GCDR
package)• GeoRaster support• Topology data model• Network data model
S P A T I A L
![Page 30: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/30.jpg)
![Page 31: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/31.jpg)
• SFSQL compliant• New release, not as many features• No coordinate reference system
transforms• Windows only• Grid index
![Page 32: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/32.jpg)
SELECT * FROM the_tableWHERE the_geom.STIntersects( geometry::STGeomFromText('POINT(0 0)',0) );
SELECT * FROM the_tableWHERE ST_Intersects( the_geom, ST_GeomFromText('POINT(0 0)',0) );
![Page 33: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/33.jpg)
• PostgreSQL / PostGIS• SFSQL compliant• Open source (GPL)• Proprietary / open source clients• “geographic” coordinates require
care
![Page 34: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/34.jpg)
![Page 35: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/35.jpg)
![Page 36: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/36.jpg)
![Page 37: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/37.jpg)
![Page 38: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/38.jpg)
• ST_Distance(‘POINT(0 0)’,’POINT(1 1)’)
• What units?• ST_Distance_Spheroid()• ST_Distance_Sphere()• Indexes are not sphere aware• Spherical distance functions defined
on points only
![Page 39: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/39.jpg)
![Page 40: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/40.jpg)
![Page 41: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/41.jpg)
![Page 42: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/42.jpg)
![Page 43: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/43.jpg)
Installation
![Page 44: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/44.jpg)
Installation
![Page 45: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/45.jpg)
Installation
![Page 46: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/46.jpg)
Installation
![Page 47: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/47.jpg)
Data
![Page 48: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/48.jpg)
Data
• Shape files– .shp, .shx, .dbf, .prj– shp2pgsql
• Other?– FME– ogr2ogr
![Page 49: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/49.jpg)
![Page 50: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/50.jpg)
![Page 51: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/51.jpg)
![Page 52: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/52.jpg)
![Page 53: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/53.jpg)
Tomcat
• JNDI configuredo PostgreSQL JDBCo Connection to “medford” database
• JSLT installedo <c:> <sql:>
• GeoServer installedo Connections to “medford” tableso Styles for “medford” tables
![Page 54: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/54.jpg)
Tomcat
![Page 55: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/55.jpg)
Workshop
![Page 56: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/56.jpg)
#0 - Base Map with WMS
![Page 57: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/57.jpg)
+
=
![Page 58: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/58.jpg)
+
=
![Page 59: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/59.jpg)
http://localhost:8080/geoserver/
![Page 60: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/60.jpg)
![Page 61: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/61.jpg)
<body onload="init()"> <div id="map"></div></body>
![Page 62: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/62.jpg)
var lon = -122.8450;var lat = 42.3438;var zoom = 18;var map;
function initMap() { map = new OpenLayers.Map( 'map' , {controls:[new OpenLayers.Control.MouseDefaults(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.PanZoomBar()], numZoomLevels:20});
var gmap = new OpenLayers.Layer.Google( "Google Streets" // the default ); var gsat = new OpenLayers.Layer.Google( "Google Satellite", {type: G_SATELLITE_MAP} ); map.addLayers([gmap, gsat]); map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);}
![Page 63: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/63.jpg)
// Initialize WMS layer from our local // GeoServervar bwms = new OpenLayers.Layer.WMS( "Medford Buildings", "http://localhost:8080/geoserver/wms?", { "transparent":"true", "layers":"medford:buildings", "format":"image/png" }, { "reproject":"true" } );
// Add WMS layer to our mapmap.addLayer(bwms);
![Page 64: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/64.jpg)
#1
– Click to
Q
uery
![Page 65: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/65.jpg)
#1 – Click to Query
![Page 66: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/66.jpg)
// Tie the map click event to our query function map.events.register("click", map, queryDatabase );
![Page 67: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/67.jpg)
function queryDatabase(e) {
// Read the map coordinates from the click event var lonlat = map.getLonLatFromViewPortPx(e.xy);
// Read the table we are going to query from page var table = document.getElementById("table").value;
// Construct the query URL var url = "01-click-query.jsp"; url += "?lon=" + lonlat.lon; url += "&lat=" + lonlat.lat; url += "&table=" + table;
// Load the URL into an iframe document.getElementById("query").src = url;}
![Page 68: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/68.jpg)
01-click-query.jsp?lon=-122.8451943397522&lat=42.344141057680226&table=medford.taxlots
![Page 69: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/69.jpg)
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page contentType="text/html" %>
<sql:query var="rs" dataSource="jdbc/medford">
. . . . . . .
</sql:query>
01-click-query.jsp
![Page 70: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/70.jpg)
select st_geometrytype(the_geom) as geometrytype, st_area(the_geom) as area, *from ${param.table}where st_contains( the_geom, st_transform( st_setsrid( st_makepoint(${param.lon},${param.lat}), 4326), 2270))
![Page 71: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/71.jpg)
![Page 72: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/72.jpg)
SRID?!?
• Location = Coordinate + SRID• Here = (-121.92, 37.37) + EPSG:4326• ST_Transform() to change SRID• Store data in an efficient SRID• Transform inputs to your storage SRID• Transform outputs to your display SRID
![Page 73: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/73.jpg)
#2
– Click to
A
naly
ze
![Page 74: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/74.jpg)
02-click-analyze.jsp?lon=-122.8451943397522&lat=42.344141057680226&radius=200
![Page 75: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/75.jpg)
select count(*) as "Number of Lots", round(avg(st_area(the_geom))::numeric/43560, 1) || ' acres' as "Average Lot Area", '$' || avg(impvalue)::integer as "Average Improvement Value", '$' || avg(landvalue)::integer as "Average Land Value", '$' || avg(impvalue + landvalue)::integer as "Average Total Value", avg(yearblt)::integer as "Average Year Built"from medford.taxlotswhere st_dwithin( taxlots.the_geom, st_transform( st_setsrid( st_makepoint(${param.lon},${param.lat}), 4326), 2270), ${param.radius} )
![Page 76: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/76.jpg)
• Indexed distance query• ST_Distance(g1,g2) < r
is not indexed• ST_DWithin(g1,g2,r)
is equivalent tog1 && ST_Expand(g2,r) AND ST_Distance(g1,g2) < r
ST_DWithin()?!?
![Page 77: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/77.jpg)
#3
– Click a
nd
Join
![Page 78: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/78.jpg)
zoning taxlots
![Page 79: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/79.jpg)
![Page 80: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/80.jpg)
Everything is related to everything else, but near things are more related than distant things.
- Waldo Tobler
![Page 81: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/81.jpg)
Spatial relationships are a universal key for joining otherwise disparate data.
customer table
census table
road table
stream table
zoning table
taxlot table
![Page 82: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/82.jpg)
select count(*) as num_lots, sum(st_area(taxlot.the_geom)) as total_lot_area, zone.zoning as zoning, sum(taxlot.landvalue) as total_land_value, sum(taxlot.landvalue) / sum(st_area(taxlot.the_geom)) as value_per_ft
![Page 83: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/83.jpg)
from medford.taxlots taxlot join medford.zoning zone on ( st_contains( zone.the_geom, st_centroid(taxlot.the_geom) ) )
![Page 84: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/84.jpg)
![Page 85: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/85.jpg)
![Page 86: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/86.jpg)
where st_dwithin( taxlot.the_geom, st_transform( st_setsrid( st_makepoint( ${param.lon}, ${param.lat}), 4326), 2270), ${param.radius} )group by zone.zoningorder by total_lot_area desc
![Page 87: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/87.jpg)
#4
– Click a
nd
U
nio
n
![Page 88: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/88.jpg)
![Page 89: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/89.jpg)
select st_asgeojson(the_geom)from medford.streetswhere st_npoints(the_geom) < 6limit 1;
ST_AsGeoJSON()
![Page 90: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/90.jpg)
{"type":"MultiLineString", "coordinates":[[ [4289753.869,253537.254], [4290375.489,253518.361] ]]}
GeoJSON Geometry
![Page 91: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/91.jpg)
ST_As*()• Standard
– ST_AsText() – defined by OGC (SFSQL)– ST_AsBinary() – defined by OGC (SFSQL)– ST_AsGML() – defined by OGC (GML)
• PostGIS– ST_AsKML() – defined by Google (OGC)– ST_AsSVG() – defined by W3C– ST_AsGeoJSON() – defined by community
![Page 92: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/92.jpg)
Feature
Feature
Geometry
Geometry Properties
Properties
FeatureC
ollection
![Page 93: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/93.jpg)
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ page contentType="text/x-json" %>
<sql:query var="rs" dataSource="jdbc/medford">${param.sql}</sql:query>
{"type":"FeatureCollection", "features":[<c:forEach var="row" items="${rs.rows}" varStatus="rowStatus"> {"type":"Feature", "geometry":<c:out value="${row.st_asgeojson}" escapeXml="false" />, "properties":{ <c:forEach var="column" items="${row}" varStatus="columnStatus"> <c:if test="${column.key != 'st_asgeojson'}"> "<c:out value="${column.key}" escapeXml="false" />": "<c:out value="${column.value}" escapeXml="false" />" <c:if test="${! columnStatus.last}">,</c:if> </c:if> </c:forEach>}} <c:if test="${! rowStatus.last}">,</c:if></c:forEach>]}
![Page 94: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/94.jpg)
select st_asgeojson( st_transform(the_geom,900913) )from medford.taxlotswhere st_dwithin( the_geom, st_transform( st_setsrid( st_makepoint(-13676108, 5212594), 900913), 2270), 100 )
![Page 95: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/95.jpg)
// Make a fresh vector layer, pulling features our URLjson_layer = new OpenLayers.Layer.Vector("GeoJSON", { strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.HTTP({ url: json_url, format: new OpenLayers.Format.GeoJSON() }) });
// Add our vector layer to the mapmap.addLayer(json_layer);
![Page 96: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/96.jpg)
![Page 97: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/97.jpg)
![Page 98: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/98.jpg)
#5
– Arb
itrary
SQ
L
![Page 99: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/99.jpg)
![Page 100: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/100.jpg)
#6
– Walk a
N
etw
ork
![Page 101: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/101.jpg)
medford.storm_drains
node_fm
node_to
![Page 102: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/102.jpg)
medford.storm_drains
id node_fm node_to
91058
D372W25CN0169
D372W25CN0168
id node_fm node_to
91061
D372W25CN0168
D372W25CN0167
id node_fm node_to
91062
D372W25CN0167
D372W25CN0166
![Page 103: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/103.jpg)
![Page 104: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/104.jpg)
select d.node_fm, d.node_to, d.pipe_idfrom medford.storm_drains d, medford.storm_drains ewhere st_dwithin(d.the_geom, e.the_geom, 5) and e.node_to = 'D371W28CN0134' and e.gid != d.gid and st_distance( st_endpoint(st_geometryn(e.the_geom, 1)), st_startpoint(st_geometryn(d.the_geom, 1)) ) < 5;
![Page 105: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/105.jpg)
e.node_to = 'D371W28CN0134'
![Page 106: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/106.jpg)
ST_DWithin()
![Page 107: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/107.jpg)
ST_DWithin()
![Page 108: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/108.jpg)
e.gid != d.gid
![Page 109: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/109.jpg)
st_distance( st_endpoint(st_geometryn(e.the_geom, 1)), st_startpoint(st_geometryn(d.the_geom, 1)) ) < 5;
![Page 110: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/110.jpg)
st_distance( st_endpoint(st_geometryn(e.the_geom, 1)), st_startpoint(st_geometryn(d.the_geom, 1)) ) < 5;
![Page 111: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/111.jpg)
ST_GeometryN()
• Convert– MULTILINESTRING((0 0, 1 1, 2 2))
• To– LINESTRING(0 0, 1 1, 2 2)
![Page 112: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/112.jpg)
In conclusion…
![Page 113: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/113.jpg)
Standards are good…
SFSQL
GMLGeoJSON
KML WMS
WKT
WKB WFS
![Page 114: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/114.jpg)
Special middleware is unnecessary…
![Page 115: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/115.jpg)
![Page 116: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/116.jpg)
![Page 117: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/117.jpg)
![Page 118: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org](https://reader034.vdocuments.mx/reader034/viewer/2022050720/5513efb155034679748b5b4c/html5/thumbnails/118.jpg)
2009.foss4g.org