Cómo empezar con PostGIS sin morir demasiado

Embed Size (px)

DESCRIPTION

El mundo GIS es fascinante, pero introducirse en él es bastante duro. Hay una serie de conceptos básicos que todos los documentos dan por sentados, pero en pocos sitios se explican con claridad. Aquí hago un esquema resumido de los más importantes, y luego paso a presentar PostGIS, una de las mejores herramientas para hacer aplicaciones geográficas.

Citation preview

  • 1. Cmo empezar con PostGIS sin morir demasiado Andrs Moya, agosto 2014

2. Esta presentacin forma parte de los Kaleidos Summer Mondays http://www.kaleidos.net/blog/346/kaleidos-summer-mondays/ Descarga la presentacin y mira las notas para ms referencias y enlaces. Publicado con licencia CreativeCommons Reconocimiento Compartir igual (cc-by-sa) 3. Definicin Qu significa GIS? 4. Definicin Qu significa GIS? Geografa? el Infierno de las Siglas! 5. Definicin Qu significa GIS? Geographical Information System 6. Definicin Qu significa GIS? Geographical Information System Sistema de informacin que gestiona objetos ubicados sobre la superficie de la Tierra. 7. Organismos normativos European Petroleum Survey Group (EPSG) Catlogo estndares EPSG:xxxx (SRID). Hoy es International Association of Oil & Gas Producers (OGP). Open Geospatial Consortium (OGC) Anteriormente Open GIS Consortium. Estndares abiertos de modelado de datos GIS: GML, KML, GeoRSS, SFS (Simple Features). Open Source Geospatial Foundation (OSGeo) Promociona bases de datos y software libre GIS: OpenStreetMaps, PostGIS. 8. Sistemas de referencia World Geodetic System (WGS84) Cdigo EPSG:4326 (SRID 4326). Latitud + longitud en grados, minutos y segundos (de -180 a 180, de -90 a 90). Opcional elevacin sobre el elipsoide base. Otros ejemplos: NAD83 / EPSG:4269 (Norteamrica) OSGB 1936 / EPSG:27700 (Britnico) ED50 (Europeo) 9. Proyecciones Proyeccin Mercator Proyecta los puntos sobre un cilindro, que luego se aplana en un rectngulo. Sistema UTM (Universal Transverse Mercator) Sistema Spherical Mercator (Web Mercator / Google Mercator) Cdigos "EPSG":900913, EPSG:3785, EPSG:3857. Coordenadas (x, y) en metros, desde el centro del planeta a los bordes (bounds). Valores de -20037508.34, -20037508.34 a 20037508.34, 20037508.34. 10. Bases de datos geogrficas planetarias Capa base Objetos vectoriales (WGS84) o fotografas. Convertidos en tiles (imgenes png). Capa overlay Objetos vectoriales (EPSG:3857). Las ms conocidas Google Maps Microsoft Bing ESRI ArcGIS OpenStreetMap 11. Simple Features (OGC) Define primitivas geogrficas. Indicar el SRID de un sistema de referencia. Tipo de primitivas: Geogrficas: grados WGS84, clculos curvos sobre un esferoide. Geomtricas: metros EPSG:3857, clculos rectos sobre un rectngulo. Formato WKB (Well Known Binary) El WKT "SRID=4;POINT(0 0)" se convierte en el WKB "010100002004000000000000000000000 00000000000000000" Formato WKT (Well Known Text) "POINT(-34.10 45.245) "POINT(-34.10 45.245 458) "LINESTRING(0 0, 25.7 34.0, -43.2 22.1) "MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) 12. PostGIS Extensin de PostgreSQL que implementa OGC Simple Features Con algunas extensiones propias. Y muchas funciones para hacer clculos geogrficos. Web principal: http://postgis.net Un tutorial muy bueno: http://workshops.boundlessgeo.com/postgis-intro/ 13. PostGIS SQL geogrfico Crear tablas con columnas de tipos geogrficos CREATE TABLE roads ( id INTEGER, road_name VARCHAR(25), geom GEOMETRY(LINESTRING, 4326) ); Insertar datos a partir de un string WKT: INSERT INTO global_points (name, location) VALUES ( 'Town', ST_GeographyFromText( 'SRID=4326;POINT(-110 30)' ) ); Crear ndices sobre columnas geogrficas CREATE INDEX idx_roads_geom_gist ON roads USING gist(geom); Cargar datos en lote desde un fichero "shapefile" (un formato abierto de fichero que guarda primitivas en WKT o WKB), con opcin de convertir la proyeccin: # shp2pgsql -s 4326:3857 shaperoads.shp myschema.roadstable | psql -d roadsdb 14. PostGIS clculos geogrficos Calcular la longitud total de una carretera SELECT ST_Length(geom)/1000 AS km_road FROM roads WHERE road_name = 'M45'; Obtener los puntos de una tabla cercanos a unas coordenadas SELECT the_geom FROM geom_table WHERE ST_Distance( the_geom, ST_GeomFromText('POINT(100000 200000)', 312) ) < 100 Obtener las carreteras dentro del rea de un municipio SELECT ST_Intersection(r.the_geom, m.the_geom) AS intersection_geom, ST_Length(r.the_geom) AS rd_orig_length, r.* FROM bc_roads AS r, bc_municipality AS m WHERE m.name = 'PRINCE GEORGE' AND ST_Intersects(r.the_geom, m.the_geom);