Top Banner
2009.foss4g.org
118

2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey [email protected].

Mar 26, 2015

Download

Documents

Aaron Daly
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

2009.foss4g.org

Page 2: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Spatial DatabaseTips & Tricks

Paul [email protected]

Page 3: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.

Impatient People

Page 6: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.

Standard Database

• Has data types– varchar– integer– real– date

Page 9: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

Standard Database

• Has one-dimensional indexes– b-tree– hash

Page 11: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Spatial Database

• Has spatial indexes– r-tree– quad-tree– grid

Page 12: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 13: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 14: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 15: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 16: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Find intersecting shapes…

Page 17: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Start with all boxes,

Page 18: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

find intersecting boxes,

Page 19: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

then find intersecting shapes.

Page 20: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.
Page 23: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Open Geospatial Consortium (OGC)

Simple Features for SQL (SFSQL)

Page 24: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 25: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 26: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 27: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Locator

Spatial

Page 28: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

• 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.

• 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.
Page 31: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

• 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.

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.

• 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.
Page 35: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 36: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 37: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 38: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

• 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.
Page 40: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 41: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 42: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 43: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Installation

Page 44: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Installation

Page 45: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Installation

Page 46: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Installation

Page 47: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Data

Page 48: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.
Page 50: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 51: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 52: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 53: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

Tomcat

Page 55: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Workshop

Page 56: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

#0 - Base Map with WMS

Page 57: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

+

=

Page 58: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

+

=

Page 59: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

http://localhost:8080/geoserver/

Page 60: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 61: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

<body onload="init()"> <div id="map"></div></body>

Page 62: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

// 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.

#1

– Click to

Q

uery

Page 65: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

#1 – Click to Query

Page 66: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

// 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.

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.

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.

<%@ 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.

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.
Page 72: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

#2

– Click to

A

naly

ze

Page 74: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.

• 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.

#3

– Click a

nd

Join

Page 78: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

zoning taxlots

Page 79: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 80: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.

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.

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.
Page 85: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 86: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

#4

– Click a

nd

U

nio

n

Page 88: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 89: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

{"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.

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.

Feature

Feature

Geometry

Geometry Properties

Properties

FeatureC

ollection

Page 93: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

<%@ 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.

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.

// 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.
Page 97: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 98: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

#5

– Arb

itrary

SQ

L

Page 99: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 100: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

#6

– Walk a

N

etw

ork

Page 101: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

medford.storm_drains

node_fm

node_to

Page 102: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.
Page 104: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

e.node_to = 'D371W28CN0134'

Page 106: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

ST_DWithin()

Page 107: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

ST_DWithin()

Page 108: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

e.gid != d.gid

Page 109: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

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.

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.

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.

In conclusion…

Page 113: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Standards are good…

SFSQL

GMLGeoJSON

KML WMS

WKT

WKB WFS

Page 114: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

Special middleware is unnecessary…

Page 115: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 116: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 117: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.
Page 118: 2009.foss4g.org. Spatial Database Tips & Tricks Paul Ramsey pramsey@opengeo.org.

2009.foss4g.org