37
Manual técnico de PostgreSQL/Postgis Elaborado por: Enrique Flores Escudero Natanael García Sosa Validación técnica: Lic. Agustín García Rodríguez Área de TI: Laboratorio de Visión por Computadora INAOE

Manual Tecnico de Postgres Postgis en Ubuntu Todo Sobre GIS

Embed Size (px)

Citation preview

Manual técnico de PostgreSQL/Postgis

Elaborado por:

Enrique Flores Escudero Natanael García Sosa

Validación técnica:

Lic. Agustín García Rodríguez

Área de TI: Laboratorio de Visión por Computadora

INAOE

2

Contenido ¿Qué es un SIG? .............................................................................................................................. 3

Sistema de coordenadas ................................................................................................................. 4

Proyección cilíndrica ........................................................................................................................ 5

Proyección cónica ............................................................................................................................ 5

Proyección azimutal, cenital o polar .............................................................................................. 5

Información geográfica en un SIG ................................................................................................. 6

El Datum ............................................................................................................................................ 6

Datum de referencia ......................................................................................................................... 6

Instalación de PostgreSQL 8.4...................................................................................................... 8

Instalación del complemento Postgis 1.4. .................................................................................... 8

Transformación de cartas ............................................................................................................... 9

Ogrinfo .............................................................................................................................................. 10

Comandos de ogrinfo ..................................................................................................................... 10

Ver Datum, Proyección y Atributos de una carta....................................................................... 10

Ver el tipo de objetos de un .shp.................................................................................................. 11

ogr2ogr ............................................................................................................................................. 12

Comandos de ogr2ogr ................................................................................................................... 12

Unir varios archivos .shp en un solo .shp ................................................................................... 15

S57 .................................................................................................................................................... 15

Subir directamente una carta náutica .000 al PostgreSQL ...................................................... 15

pgsql2shp......................................................................................................................................... 20

shp2pgsql......................................................................................................................................... 20

Convertir nuestro archivo .shp a .sql ........................................................................................... 21

gdal info ............................................................................................................................................ 22

gdal_rasterize .................................................................................................................................. 23

Crear un punto, línea o polígono a través de un query sql ...................................................... 25

Bibliografía: ...................................................................................................................................... 34

Anexo ............................................................................................................................................... 35

3

¿Qué es un SIG?

Un Sistema de Información Geográfica es una integración

organizada de hardware, software y datos geográficos diseñada

para capturar, almacenar, manipular, analizar y desplegar en todas

sus formas la información geográficamente referenciada con el fin

de resolver problemas complejos de planificación y gestión.

También puede definirse como un modelo de una parte de la

realidad referido a un sistema de coordenadas terrestre y

construido para satisfacer unas necesidades concretas de

información. En el sentido más estricto, es cualquier sistema de

información capaz de integrar, almacenar, editar, analizar, compartir

y mostrar la información geográficamente referenciada. En un sentido más genérico, los SIG son

herramientas que permiten a los usuarios crear consultas interactivas, analizar la información

espacial, editar datos, mapas y presentar los resultados de todas estas operaciones.

La tecnología de los Sistemas de Información Geográfica puede ser utilizada para investigaciones

científicas, la gestión de los recursos, gestión de activos, la arqueología, la evaluación del impacto

ambiental, la planificación urbana, la cartografía, la sociología, la geografía histórica, el marketing,

la logística por nombrar unos pocos. Por ejemplo, un SIG podría permitir a los grupos de

emergencia calcular fácilmente los tiempos de respuesta en caso de un desastre natural, el SIG

puede ser usado para encontrar los humedales que necesitan protección contra la contaminación,

o pueden ser utilizados por una empresa para ubicar un nuevo negocio y aprovechar las ventajas

de una zona de mercado con escasa competencia.

4

Sistema de coordenadas Un sistema de coordenadas es un conjunto de valores y puntos que

permiten definir unívocamente la posición de cualquier punto de un espacio

euclídeo o más generalmente variedad diferenciable.

En física se usan normalmente sistemas de coordenadas ortogonales. Un

sistema de referencia viene dado por un punto de referencia u origen y una

base vectorial ortonormal, quedando así definidos los ejes coordenados.

5

Proyección cilíndrica

La proyección de Mercator, que revolucionó la cartografía, es cilíndrica y

conforme. En ella, se proyecta el globo terrestre sobre una superficie

cilíndrica. Es una de las más utilizadas, aunque por lo general en forma

modificada, debido a las grandes distorsiones que ofrece en las zonas de

latitud elevada, lo que impide apreciar a las regiones polares en su

verdadera proporción. Es utilizada en la creación de algunos mapamundis. Para corregir

las deformaciones en latitudes altas se usan proyecciones pseudocilíndricas, como la de

Van der Grinten, que es policónica, con paralelos y meridianos circulares. Es

esencialmente útil para ver la superficie de la Tierra completa.

Proyección de Mercator

Proyección de Peters

Proyección cónica

La proyección cónica se obtiene proyectando los elementos de la

superficie esférica terrestre sobre una superficie cónica tangente, situando

el vértice en el eje que une los dos polos. Aunque las formas presentadas

son de los polos, los cartografos utilizan este tipo de proyección para ver

los países y continentes.

Proyección cónica simple

Proyección conforme de Lambert

Proyección cónica múltiple

Proyección azimutal, cenital o polar

En este caso se proyecta una porción de la Tierra sobre un plano

tangente al globo en un punto seleccionado, obteniéndose una

imagen similar a la visión de la Tierra desde un punto interior o

exterior. Si la proyección es del primer tipo se llama proyección

gnomónica; si es del segundo, ortográfica. Estas proyecciones

ofrecen una mayor distorsión cuanto mayor sea la distancia al punto tangencial de la

esfera y el plano. Este tipo de proyección se relaciona principalmente con los polos y

hemisferios.

Proyección ortográfica

Proyección estereográfica

Proyección gnomónica

Proyección azimutal de Lambert

6

Información geográfica en un SIG

Modelo vector Modelo raster

Usa segmentos de línea discretos o puntos para señalar localizaciones, de acuerdo con un sistema de referencia

División del área

Los elementos geográficos se forman a partir de la conexión de segmentos de líneas rectas

Almacenamiento a nivel de celda. ¿Qué almacena?

Los objetos vectoriales no necesariamente ocupan la totalidad del espacio; así, no se requiere identificar absolutamente todas las localizaciones.

Representación explícita: cada punto corresponde a una loc. En Una celda

Posee una base de datos espacial (x,y), y una base de datos descriptiva (atributos)

Concepto de capa o layer

Codificación de relaciones topológicas

No está asociada a una base alfanumérica.

El Datum

El término datum se aplica en varias áreas de estudio y trabajo específicamente cuando

se hace una relación hacia alguna geometría de referencia importante, sea ésta una línea,

un plano o una superficie (plana o curva).

Datum de referencia

Un datum geodésico es una referencia de las medidas tomadas. En geodesia un datum

es un conjunto de puntos de referencia en la superficie terrestre en base a los cuales las

medidas de la posición son tomadas y un modelo asociado de la forma de la tierra

(elipsoide de referencia) para definir el sistema de coordenadas geográfico. Datums

horizontales son utilizados para describir un punto sobre la superficie terrestre. Datums

verticales miden elevaciones o profundidades. En ingeniería y drafting, un datum es un

punto de referencia, superficie o ejes sobre un objeto con los cuales las medidas son

tomadas.

Un datum de referencia (modelo matemático) es una superficie constante y conocida

utilizada para describir la localización de puntos sobre la tierra. Dado que diferentes

datums tienen diferentes radios y puntos centrales, un punto medido con diferentes

datums puede tener coordenadas diferentes. Existen cientos de datums de referencia

7

desarrollados para referenciar puntos en determinadas áreas convenientes para ese área.

Datums contemporáneos están diseñados para cubrir áreas más grandes.

Códigos EPSG Descripción EPSG (European Petroleum Survey Group)

epsg:3034 ETRS89/ETRS-LCC Para la cartografía pan-Europeo a escalas menores o iguales a 1:500.000 IDEE

epsg:3035 ETRS89/ETRS-LAEA Para representación y análisis estadístico pan-Europeos IDEE

epsg:4230 Coordenadas Geográficas ED50

epsg:4258 Coordenadas Elipsoidales ETRS89 IDEE

epsg:4267 Coordenadas Geográficas North American Datum 1927 (NAD 27)

epsg:4269 Coordenadas Geográficas North American Datum 1983 (NAD 83)

epsg:4324 Coordenadas Geográficas WGS 72BE Transit Broadcast Ephemeris

epsg:4326 Coordenadas Geográficas WGS84

epsg:23028 Proyección UTM ED50 Huso 28 N

epsg:23029 Proyección UTM ED50 Huso 29 N

epsg:23030 Proyección UTM ED50 Huso 30 N

epsg:23031 Proyección UTM ED50 Huso 31 N

epsg:25828 Proyección UTM ETRS89 Huso 28 N

epsg:25829 Proyección UTM ETRS89 Huso 29 N

epsg:25830 Proyección UTM ETRS89 Huso 30 N

epsg:25831 Proyección UTM ETRS89 Huso 31 N

epsg:32628 Proyección UTM WGS84 Huso 28 N

epsg:32629 Proyección UTM WGS84 Huso 29 N

epsg:32630 Proyección UTM WGS84 Huso 30 N

epsg:32631 Proyección UTM WGS84 Huso 31 N

8

Instalación de PostgreSQL 8.4

$ apt-get update

$ apt-get install vim

//editar el fichero siguiente

$ vim /etc/apt/sources.list

//agregar al final del fichero las siguientes lineas

deb http://ppa.launchpad.net/pitti/postgresql/ubuntu jaunty main

deb-src http://ppa.launchpad.net/pitti/postgresql/ubuntu jaunty main

//agregar la llave del postgresql

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8683d8a2

$ sudo apt-get update

$ sudo apt-get install postgresql-8.4

//cambiamos el puerto 5433 al 5432

$ sudo sed -i.bak -e 's/port = 5433/port = 5432/'

/etc/postgresql/8.4/main/postgresql.conf

//reiniciamos el servidor de postgresql

$ sudo /etc/init.d/postgresql restart

Instalación del complemento Postgis 1.4.

$ apt-get install postgresql-server-dev-8.4 libpq-dev

$ apt-get install libgeos-dev

$ wget http://postgis.refractions.net/download/postgis-1.4.0.tar.gz

$ apt-get install proj

$ tar xvfz postgis-1.4.0.tar.gz

$ cd postgis-1.4.0

$ ./configure

$ make

$ make install

$ sudo su postgres

//cambiamos la clave del usuario postgres por la que desees

$ psql -c"alter user postgres with password 'tu_contraseña'"

$ createdb geodb

$ createlang -dgeodb plpgsql

$ psql -dgeodb -f /usr/share/postgresql/8.4/contrib/postgis.sql

$ psql -dgeodb -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql

$ psql -dgeodb -c"select postgis_lib_version();"

//con esto habremos agregado las tablas espaciales del postgis para crear una plantilla

de postgis y utilizarla en las demas bases de datos

9

Transformación de cartas

No Posible transformación Revisión Aprobación

1 Shapefile (datum diferente) a Shapefile (datum WGS84) SI SI

2 Shapefile (Proj. diferente) a Shapefile (Proj. cilíndrica) SI SI

3 Shapefile (Datum WGS84, Proj. cilíndrica) a Formato POSTGIS SI SI

4 Formato POSTGIS a Shapefile (Datum WGS84, Proj. Cilíndrica) SI SI

5 Formato POSTGIS a Shapefile a Visor GIS SI SI

6 Formato POSTGIS a Visor GIS a SHP SI SI

7 Carta S57 a PostgreSQL a Shapefile a Shapefile (wgs84, Proj. Cilíndrica) a PostgreSQL a Visor

SI SI

8 Carta S57 a Shapefile (wgs84, Proj. Cilíndrica) SI SI

9 Carta S57 (Datum diferente) a Carta S57 (Datum WGS84) SI SI

10 Carta S57 (Proj. Diferente) a carta S57 (Proj. Cilíndrica) SI SI

11 Carta S57 a Visor a SHP SI SI

12 Cartas Aereas (Datum diferente) a Shapefile (Datum WGS84) NO NO

13 Cartas Aereas (Proj. Diferente) a Shapefile (Proj. Cilíndrica) NO NO

10

Ogrinfo

Para poder realizar una transformación lo primero que debemos de hacer es identificar el

datum y la proyección de la carta, para eso tenemos el complemento de la librería gdal

llamado ogrinfo y es una herramienta que sirve para ver los contenidos de un Shapefile,

proyección, datum y atributos de la carta, además ver que geometría la compone.

Comandos de ogrinfo

$ ogrinfo

Usage: ogrinfo [--help-general] [-ro] [-q] [-where restricted_where]

[-spat xmin ymin xmax ymax] [-fid fid]

[-sql statement] [-al] [-so] [-fields={YES/NO}]

[-geom={YES/NO/SUMMARY}][--formats]

datasource_name [layer [layer ...]]

Ver Datum, Proyección y Atributos de una carta

En el siguiente ejemplo hacemos uso de la herramienta ogrinfo, la cual muestra la

información de la carta detalladamente.

Sintaxis:

$ ogrinfo -al -so nombre_carta.shp

Ejemplo:

$ ogrinfo -al -so CurvasNivel.shp

INFO: Open of `CurvasNivel.shp'

using driver `ESRI Shapefile' successful.

Layer name: CurvasNivel

Geometry: Line String

Feature Count: 99488

Extent: (911404.625948, 352702.863535) - (3914799.979274, 2349596.704755)

Layer SRS WKT:

PROJCS["North_America_Lambert_Conformal_Conic",

GEOGCS["ITRF92",

DATUM["ITRF_1992",

SPHEROID["GRS_1980",6378137.0,298.257222101]],

PRIMEM["Greenwich",0.0],

UNIT["Degree",0.0174532925199433]],

PROJECTION["Lambert_Conformal_Conic_2SP"],

PARAMETER["False_Easting",2500000.0],

PARAMETER["False_Northing",0.0],

PARAMETER["Central_Meridian",-102.0],

PARAMETER["Standard_Parallel_1",17.5],

PARAMETER["Standard_Parallel_2",29.5],

11

PARAMETER["Latitude_Of_Origin",12.0],

UNIT["Meter",1.0]]

OBJECTID: Integer (10.0)

FC: Integer (5.0)

ENTIDAD: String (15.0)

TIPO: String (51.0)

ELEVACION: Real (19.5)

LENGTH: Real (15.3)

SHAPE_len: Real (19.11)

Ver el tipo de objetos de un .shp

El tipo de objetos que puede contener una carta tipo .shp son líneas, polígonos y puntos,

si deseamos unir varias cartas .shp el ejemplo siguiente sirve para comprobar si las cartas

contienen el mismo tipo de geometría.

Sintaxis:

$ ogrinfo -ro -q nombre_carta.shp

Ejemplo:

$ ogrinfo -ro -q CurvasNivel.shp

1: CurvasNivel (Line String)

Obtenemos como resultado Line String, lo cual nos indica que contiene líneas en su

geometría.

12

ogr2ogr

Nos permite importar/exportar archivos .shp a otros formatos y viceversa. Si solo

escribimos ogr2ogr en la terminal podremos comprobar el tipo de sintaxis que se puede

utilizar y los formatos que soporta la herramienta.

Comandos de ogr2ogr

Usage: ogr2ogr [--help-general] [-skipfailures] [-append] [-update] [-gt n]

[-select field_list] [-where restricted_where]

[-sql <sql statement>]

[-spat xmin ymin xmax ymax] [-preserve_fid] [-fid FID]

[-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def]

[-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...]

[-segmentize max_dist]

dst_datasource_name src_datasource_name

[-lco NAME=VALUE] [-nln name] [-nlt type] [layer [layer ...]]

-f format_name: output file format name, possible values are:

Estos son los formatos admitidos:

-f "ESRI Shapefile"

-f "MapInfo File"

-f "TIGER"

-f "S57"

-f "DGN"

-f "Memory"

-f "BNA"

-f "CSV"

-f "GML"

-f "GPX"

-f "KML"

-f "GeoJSON"

-f "Interlis 1"

-f "Interlis 2"

-f "GMT"

-f "SQLite"

-f "ODBC"

-f "PostgreSQL"

-f "MySQL"

-f "Geoconcept"

-append: Append to existing layer instead of creating new if it exists

-overwrite: delete the output layer and recreate it empty

-update: Open existing output datasource in update mode

-select field_list: Comma-delimited list of fields from input layer to

copy to the new layer (defaults to all)

-where restricted_where: Attribute query (like SQL WHERE)

13

-sql statement: Execute given SQL statement and save result.

-skipfailures: skip features or layers that fail to convert

-gt n: group n features per transaction (default 200)

-spat xmin ymin xmax ymax: spatial query extents

-segmentize max_dist: maximum distance between 2 nodes.

Used to create intermediate points

-dsco NAME=VALUE: Dataset creation option (format specific)

-lco NAME=VALUE: Layer creation option (format specific)

-nln name: Assign an alternate name to the new layer

-nlt type: Force a geometry type for new layer. One of NONE, GEOMETRY,

POINT, LINESTRING, POLYGON, GEOMETRYCOLLECTION, MULTIPOINT,

MULTIPOLYGON, or MULTILINESTRING. Add "25D" for 3D layers.

Default is type of source layer.

-a_srs srs_def: Assign an output SRS

-t_srs srs_def: Reproject/transform to this SRS on output

-s_srs srs_def: Override source SRS

Srs_def can be a full WKT definition (hard to escape properly),

or a well known definition (ie. EPSG:4326) or a file with a WKT

definition.

Shapefile (datum diferente) a Shapefile (datum WGS84)

Shapefile (Proj. diferente) a Shapefile (Proj. cilíndrica)

Existen 3 maneras de realizar estas transformaciones:

1.- Con la herramienta ogr2ogr especificar el tipo de proyección detalladamente:

ogr2ogr: es la herramienta utilizada para la transformación de la carta.

-f: tipo de formato de salida en este caso queremos obtener “ESRI Shapefile” que es un

archivo .shp.

-s_srs: aquí se especifica la proyección de entrada y datum, esta se puede obtener de los

metadatos de la carta .shp.

-t_srs: este parámetro precisa la proyección de salida en el ejemplo usamos

"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" debido a la proyección y datum

que nos interesa obtener.

archivo_salida.shp: pondremos la ruta y nombre del nuevo archivo que tendrá la

proyección y datum que nos interesa.

archivo_a_transformar.shp: es el archivo de entrada, tendremos que poner la ruta

donde se encuentra.

Sintaxis:

$ ogr2ogr -f "ESRI Shapefile" -s_srs "proyección_carta_entrada" -t_srs

"proyección_carta_salida" archivo_salida.shp archivo_a_transformar.shp

14

Ejemplo:

$ ogr2ogr -f "ESRI Shapefile" -s_srs "+proj=lcc +lat_1=17.5 +lat_2=29.5 +lat_0=12

+lon_0=-102 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" -t_srs

"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" salida.shp

CurvasNivel.shp

2.- Utilizar solo el código EPSG (European Petroleum Survey Group).

-t_srs: introducimos el código EPSG:4326 ya que este contiene proyección cilíndrica y el

datum wgs84, podemos encontrar esta información en la tabla spatial_ref_sys del

complemento Postgis en las columnas auth_name (estándar usado), auth_srid (número

del estandar), srtext (datum), proj4text (proyección).

archivo_salida: especificar la ruta y el nombre del archivo de salida.shp que tendrá el

nuevo datum y proyección.

archivo_entrada: ponemos la ruta y el nombre del archivo del cual se va a modificar el

datum y proyección.

Sintaxis:

$ ogr2ogr –t_srs EPGS:Número_estandar archivo_salida.shp archivo_entrada.shp

Ejemplo:

$ ogr2ogr -t_srs EPSG:4326 pruebakike2.shp CurvasNivel.shp

3.- Cambiar la proyección de la carta .shp y el datum usando la proyección de otro .shp

Los archivos .prj contienen el datum y la proyección utilizada en la carta; existen cartas

que no contienen este archivo.

-t_srs: se utiliza para definir el datum y la proyección a partir de un archivo con extensión

.prj.

archivo.prj: definimos la ruta del archivo .prj que contiene la proyección y el datum

adecuado.

archivo_salida.shp: ruta del nuevo archivo que se va a crear con el nuevo datum y

proyección.

archivo_entrada.shp: ruta del archivo .shp existente que vamos a transformar.

Sintaxis:

$ ogr2ogr –t_srs archivo.prj archivo_salida.shp archivo_entrada.shp

Ejemplo:

$ ogr2ogr -t_srs 10m_ocean.prj /home/enrique/Escritorio/curvas.shp

/home/enrique/Escritorio/curvas/CurvasNivel.shp

15

Unir varios archivos .shp en un solo .shp

Esto se puede realizar solo si los archivos .shp tienen la misma geometría (punto,

línea, polígono, etc) y el mismo datum y proyección.

Sintaxis:

archivo_nuevo se fusionara con el archivo_existente en este caso archivo_nuevo

tomara todos los valores del archivo_existente.

$ ogr2ogr archivo_nuevo.shp archivo_existente.shp

-update: abre el origen de datos de salida existente en el modo de actualización en lugar

de intentar crear una carta nueva.

-append se realizara una unión de capas, actualizando el archivo nuevo sin generar otro

archivo, este mismo archivo tendrá dos capas en uno solo.

archivo_nuevo.shp: poner la ruta y el nombre del nuevo archivo.shp.

siguiente_capa_a_unir.shp: la capa que se va a unir con el archivo_nuevo.shp.

-nln: asigna un nombre alternativo a la nueva capa.

$ ogr2ogr -update -append archivo_nuevo.shp siguiente_capa_a_unir.shp -nln

archivo_nuevo.shp

Ejemplo:

$ ogr2ogr file_merged.shp Acueducto.shp

$ ogr2ogr -update -append file_merged.shp carretera.shp -nln file_merged

S57

Subir directamente una carta náutica .000 al PostgreSQL

-f: aquí se pone el formato de salida, en la página 12 se muestran todos los archivos

soportados por ogr2ogr, en este ejemplo usaremos “PostgreSQL”.

PG: especificamos que se hará una conexión al servidor PostgreSQL.

host: ponemos la ip del servidor o en caso de ser conexión local se usará “localhost”.

user: este parámetro lleva el nombre de un usuario por ejemplo “postgres” en el ejemplo.

dbname: especificar a qué base de datos se va a subir la carta náutica.

password: introducimos la contraseña con la cual se entra a PostgreSQL; por último se

escribe el nombre de la carta s57 con extensión .000

Sintaxis:

$ ogr2ogr –f "formato_salida" PG:"host=servidor user=usuario dbname=base_datos

password=contraseña" archivo.000

Ejemplo:

$ ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres dbname=pruebashp

password=kikeflores" US2EC03M.000

16

Carta S57 a Shapefile (wgs84, Proj. Cilíndrica)

17

18

19

20

pgsql2shp

Formato POSTGIS a Shapefile (Datum WGS84, Proj. Cilíndrica)

pgsql2shp: herramienta para exportar una tabla a formato .shp.

Los siguientes parámetros se utilizan para poder conectarse al servidor PostgreSQL y

poder exportar la tabla como archivo .shp.

-f: identifica el formato y seguido de este va la ruta de salida y nombre del archivo que se

va a obtener.

-h: ip del servidor al que se realizara la conexión, en caso de ser servidor local poner

“localhost”.

-u: aquí se especifica el usuario que tiene permiso para realizar transacciones sobre la

base de datos, en el ejemplo se utilizo “postgres”.

-P: este parámetro se utiliza para hacer una conexión mediante contraseña, en caso de

tener habilitada la seguridad para las bases de datos, si no se tiene seguridad, omitir este.

-p: número de puerto que se está utilizando en la conexión.

Después de haber introducido los parámetros correctos para la conexión al servidor

PostgreSQL se define el nombre de la base de datos seguido de la tabla a exportar.

Sintaxis:

$ pgsql2shp -formato nombre_archivo_salida -h host -u usuario -P contraseña -p

puerto base_datos tabla

Ejemplo:

$ pgsql2shp -f prueba -h localhost -u postgres -P kike1uno -p 5432 acueducto

wfsgeo

shp2pgsql

shp2pgsql es una herramienta vía consola que permite la conversión de nuestro

archivo en formato shp a sql.

$ shp2pgsql

RCSID: $Id: shp2pgsql-core.h 5098 2010-01-04 05:47:04Z pramsey $ RELEASE: 1.5

USE_GEOS=1 USE_PROJ=1 USE_STATS=1

USAGE: shp2pgsql [<options>] <shapefile> [<schema>.]<table>

OPTIONS:

-s <srid> Set the SRID field. Defaults to -1.

(-d|a|c|p) These are mutually exclusive options:

-d Drops the table, then recreates it and populates

it with current shape file data.

-a Appends shape file into current table, must be

21

exactly the same table schema.

-c Creates a new table and populates it, this is the

default if you do not specify any options.

-p Prepare mode, only creates the table.

-g <geocolumn> Specify the name of the geometry/geography column

(mostly useful in append mode).

-D Use postgresql dump format (defaults to SQL insert statments.

-G Use geography type (requires lon/lat data).

-k Keep postgresql identifiers case.

-i Use int4 type for all integer dbf fields.

-I Create a spatial index on the geocolumn.

-S Generate simple geometries instead of MULTI geometries.

-W <encoding> Specify the character encoding of Shape's

attribute column. (default : "WINDOWS-1252")

-N <policy> NULL geometries handling policy (insert*,skip,abort)

-n Only import DBF file.

-? Display this help screen.

Shapefile (Datum WGS84, Proj. cilíndrica) a Formato POSTGIS

Convertir nuestro archivo .shp a .sql

Utilizamos el shp2pgsql para convertir el archivo .shp a un archivo .sql y psql para poder

subir dicho script (.sql).

shp2pgsql: herramienta para convertir de archivo .shp a archivo .sql.

archivo.shp: especificamos la ruta del archivo .shp que vamos a transformar.

base_datos: aquí va el nombre de la base de datos donde se crearan las tablas.

script.sql: aquí va el nombre del archivo .sql que se obtendrá (el nombre del script puede

cambiar; se utilizo “script” solo como referencia).

psql: para que funcione este comando se debe identificar como un usuario de

PostgreSQL.

-d: identifica la base de datos en la cual se van a subir las tablas.

base_datos: nombre de la base de datos en la que se subirán las tablas.

-f: tipo de formato que se va a subir y al final ponemos el nombre del script.sql.

Sintaxis:

$ shp2pgsql archivo.shp base_datos > script.sql

$ psql -d base_datos -f script.sql

Ejemplo

$ shp2pgsql /home/user/curvas_nivel.shp bd_curvas > script.sql

$ psql -d bd_curvas -f script.sql

22

gdal info

Permite visualizar los atributos de una capa raster.

Sintaxis:

$ gdalinfo archivo.tif

Ejemplo:

$ gdalinfo HYP_50M_SR.tif

Driver: GTiff/GeoTIFF

Files: HYP_50M_SR.tif

HYP_50M_SR.aux

HYP_50M_SR.rrd

Size is 10800, 5400

Coordinate System is:

GEOGCS["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS 84",6378137,298.2572235629972,

AUTHORITY["EPSG","7030"]],

AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0],

UNIT["degree",0.0174532925199433],

AUTHORITY["EPSG","4326"]]

Origin = (-179.999999999999972,90.000000000000000)

Pixel Size = (0.033333333333330,-0.033333333333330)

Metadata:

AREA_OR_POINT=Area

TIFFTAG_SOFTWARE=Adobe Photoshop CS3 Macintosh

TIFFTAG_DATETIME=2009:09:09 14:51:29

TIFFTAG_XRESOLUTION=342.85699

TIFFTAG_YRESOLUTION=342.85699

TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)

Image Structure Metadata:

INTERLEAVE=PIXEL

Corner Coordinates:

Upper Left (-180.0000000, 90.0000000) (180d 0'0.00"W, 90d 0'0.00"N)

Lower Left (-180.0000000, -90.0000000) (180d 0'0.00"W, 90d 0'0.00"S)

Upper Right ( 180.0000000, 90.0000000) (180d 0'0.00"E, 90d 0'0.00"N)

Lower Right ( 180.0000000, -90.0000000) (180d 0'0.00"E, 90d 0'0.00"S)

Center ( -0.0000000, 0.0000000) ( 0d 0'0.00"W, 0d 0'0.00"N)

Band 1 Block=10800x1 Type=Byte, ColorInterp=Red

Overviews: 2700x1350, 1350x675, 675x338, 338x169, 169x85, 85x43

Metadata:

LAYER_TYPE=athematic

Band 2 Block=10800x1 Type=Byte, ColorInterp=Green

23

Overviews: 2700x1350, 1350x675, 675x338, 338x169, 169x85, 85x43

Metadata:

LAYER_TYPE=athematic

Band 3 Block=10800x1 Type=Byte, ColorInterp=Blue

Overviews: 2700x1350, 1350x675, 675x338, 338x169, 169x85, 85x43

Metadata:

LAYER_TYPE=athematic

gdal_rasterize

Permite hacer una unión de una capa raster y una capa vectorial, siempre y cuando

el datum y la proyección de las dos capas sean las mismas.

Missing source or destination.

Usage: gdal_rasterize [-b band] [-i]

[-burn value] | [-a attribute_name] | [-3d]

[-l layername]* [-where expression] [-sql select_statement]

<src_datasource> <dst_filename>

$ gdal_rasterize -b 1 -burn 255 -l 10m_rivers_europe 10m_rivers_europe.shp

/home/enrique/Descargas/HYP_50M_SR/HYP_50M_SR.tif

Diagrama de transformación de cartas.

Crear un punto, línea o polígono a través de un query sql

Para poder crear una capa con cualquiera de los elementos vectoriales en una

capa gis, puede punto, línea o polígono necesitamos tener instalado Postgres con

el complemento postgis. La Base de datos que se crea debe heredar las tablas de

postgis que son:

SPATIAL_REF_SYS

GEOMETRY_COLUMNS

1. Pasos para crear la base de datos en pgAdmin III.

Iniciar PostgreSQL

Damos clic derecho y seleccionamos “conectar”.

26

Hacemos clic derecho sobre la opción Bases de Datos y seleccionamos “Nueva

Base de Datos…”

Llenamos los campos necesarios para crear la base de datos y damos clic en

“aceptar”.

2. Query para crear una tabla con campo geométrico.

27

Iniciamos con las sentencias del leguaje SQL para la creación de la

tabla

El script nos debe quedar de la siguiente forma:

create table river (

gid serial ,

NAME varchar,

DIAK_CDE varchar,

NAME2 varchar,

DIAK_CDE2 varchar,

TYPE varchar,

STATUS varchar,

NAVIG varchar

);

28

Verificamos si se creó correctamente la tabla en la base de

datos.

Nótese que todavía no se ha agregado el campo de geometría, están únicamente

los campos alfanuméricos. Para agregar el campo de geometría utilizamos una

función de PostGIS denominada AddGeometryColumn. La cual tendremos que

mandarle el parámetro de esquema, tabla, campo geométrico, SRID, tipo de

geometría, y número de dimensiones

Procedimiento para agregar un campo geométrico a la tabla.

29

El Query de AddGeometryColumn quedaría de la siguiente manera:

EJEMPLO:

Select AddGeometryColumn('', 'river','the_geom','-1','POLYGON',2);

Descripción de los valores posibles que se pueden introducir cuando agregamos

en campo geométrico a la tabla.

Select AddGeometryColumn ('', 'river','the_geom','-1','POLYGON',2);

El primer atributo es = ''

En este apartado es para poner el nombre del esquema que queramos

agregar siempre y cuando ya se encuentre en la base de datos, En este ejemplo

pasamos los parámetros vacíos para que tome el esquema principal que sería de

tipo 'Public'.

Segundo atributo del Query nombre de la tabla = 'river'

Solo se introduce en nombre de la tabla a la cual queremos agregar el

campo geométrico.

30

El tercer componente es agregar el campo geométrico = 'the_geom'

Es donde se van almacenar todas las posiciones geográficas de cada

elemento que se vaya creando en la tabla.

El Cuarto atributo se refiere a la proyección = '-1'

Es el identificador de referencia espacial. En este caso se pone -1 ya que

se refiere a la proyección mundial (WGS84).

El Quinto componente se refiere al tipo de objeto espacial = 'POLYGON'

Dentro de este campo se pude especificar si es POINT, LINESTRING,

POLYGON, MULTYPOINT, GEOMETRYCOLLECTION.

En el último parámetro se refiere a la dimensión espacial = 2

En este parámetro se determina si la dimensión espacial es 2D, 3D, 4D,

solo basta con colocar el número como en el ejemplo.

Cuando se agrega el campo geométrico a la tabla automáticamente

se agrega el registro a la tabla GEOMETRY_COLUMNS para

determinar que existe una tabla con campos geoespaciales.

31

3. Insertar datos a la tabla espacial.

A continuación se muestra como insertar datos a través del Query de PostgreSQL

a una tabla espacial.

Código ejemplo:

insert into river values(

32

'0',

'Manistee',

NULL,

NULL,

NULL,

'stream',

'secondary',

'nonnavigable',

GeometryFromText('POLYGON((-101.004056 38.2435 ,-101.004056

48.999968 ,-100.501953 48.999718 ,-100.002228 49 ,-99.835556 49 ,-99.335556

48.999435 ,-98.868607 49 ,-98.502228 48.999435 ,-98.269165 49.000275 ,-

97.969162 49.000275 ,-97.801941 49 ,-97.635834 48.999435 ,-97.502792

48.999435 ,-97.21994 48.999718 ,-95.266556 48.999977 ,-95.154175 48.999435

,-95.153961 49.173332 ,-95.154449 49.333328 ,-95.154175 49.366386 ,-

95.152786 49.376656 ,-95.142502 49.371658 ,-95.120834 49.364998 ,-95.081863

49.359592 ,-95.025833 49.357498 ,-94.998611 49.357498 ,-94.96209 49.36097 ,-

94.931961 49.35854 ,-94.81778 49.305546 ,-94.805687 49.186661 ,-94.798332

49.15749 ,-94.766953 49.075554 ,-94.74527 49.028603 ,-94.729996 48.996941 ,-

94.718605 48.974709 ,-94.705841 48.933186 ,-94.700981 48.902493 ,-94.707039

48.857998 ,-94.708054 48.796799 ,-94.694992 48.77874 ,-94.640419 48.741104

,-94.605835 48.724434 ,-94.523895 48.701935 ,-94.500839 48.696938 ,-

94.461044 48.694988 ,-94.433319 48.701935 ,-94.400352 48.710827 ,-94.29847

48.707214 ,-94.267365 48.695892 ,-94.247887 48.660995 ,-94.134171 48.642769

,-94.111938 48.641106 ,-94.063889 48.638046 ,-93.882919 48.630272 ,-

93.858749 48.628605 ,-93.833954 48.616383 ,-93.818893 48.586243 ,-93.804787

48.531864 ,-93.785835 48.517078 ,-93.724167 48.513885 ,-93.660698 48.515137

,-93.496254 48.538609 ,-93.464241 48.551727 ,-93.454063 48.584332 ,-93.40834

48.608604 ,-93.315697 48.629158 ,-93.244995 48.640549 ,-92.951317 48.622627

,-92.715286 48.541382 ,-92.697769 48.485268 ,-92.58223 48.441376 ,-92.455276

48.394157 ,-92.426392 48.311661 ,-92.359856 48.231728 ,-92.33168 48.234161

,-92.291405 48.248863 ,-92.28611 48.269993 ,-92.299789 48.299366 ,-92.27681

48.334991 ,-92.257233 48.346939 ,-92.162216 48.356659 ,-92.141678 48.357216

,-92.039375 48.345341 ,-92.014168 48.304436 ,-92.008064 48.280964 ,-

91.991798 48.261246 ,-91.963715 48.240536 ,-91.940277 48.230545 ,-91.850555

48.20388 ,-91.78389 48.19471 ,-91.740135 48.191376 ,-91.6875 48.144714 ,-

91.645142 48.098343 ,-91.573624 48.093048 ,-91.462784 48.05777 ,-91.418335

33

48.041107 ,-91.386803 48.05888 ,-91.347229 48.068054 ,-91.318611 48.069439

,-91.27639 48.072632 ,-91.240555 48.083603 ,-91.19249 48.114998 ,-91.14917

48.144157 ,-91.126099 48.154991 ,-90.969162 48.214714 ,-90.928329 48.2286 ,-

90.898056 48.236656 ,-90.868607 48.237495 ,-90.835213 48.227074 ,-90.8358

48.20446 ,-90.773895 48.103748 ,-90.749863 48.09277 ,-90.279999 48.113052 ,-

90.146523 48.121449 ,-90.065552 48.106453 ,-90.032776 48.069717 ,-89.99424

48.025269 ,-89.899788 47.990616 ,-89.862503 48.000832 ,-89.838898 48.011665

,-89.755562 48.029575 ,-89.606384 48.011868 ,-89.572914 48.002251 ,-

89.493126 48.003166 ,-89.447769 48.003326 ,-89.356659 47.979713 ,-89.323334

47.99305 ,-88.974167 48.13916 ,-88.691666 48.255554 ,-88.645554 48.26416 ,-

88.368057 48.31221 ,-88.188324 48.244156 ,-87.444717 47.955826 ,-87.341675

47.915543 ,-87.201401 47.860275 ,-86.884445 47.734718 ,-86.568893 47.60833

,-86.46666 47.567215 ,-86.051392 47.39888 ,-86.014725 47.383881 ,-85.908544

47.340395 ,-85.908544 38.2435 ,-101.004056 38.2435 ))',-1) );

Este ejemplo de Query hace una inserción de datos a la tabla “river” que

geoespacial.

A continuación se muestra la representación gráfica de la tabla geoespacial en un

visualizador.

34

Bibliografía:

http://help.nceas.ucsb.edu/GDAL

http://www.naturalearthdata.com/downloads

http://www.guia-ubuntu.org/index.php?title=PostgreSQL

http://www.libgd.org/Main_Page

http://www.digipedia.pl/man/doc/view/shp2pgsql.1

http://www.gdal.org/ogr2ogr.html

http://www.inf.ufrgs.br/~vbogorny/CMP539/exercicio1/spatialQueries.html

35

Anexo

36

Las cartas descargadas de división política, lagos y ríos del mundo se obtuvieron del sitio:

www.naturalearthdata.com/downloads están elaboradas con el apoyo de las siguientes

empresas:

Natural Earth es un conjunto de datos de dominio público disponibles en el mapa 01:10 m,

1:50, y las escalas 1:110. Con los datos vectoriales y raster estrechamente integrado, con

Natural Earth puedes elaborar mapas con la cartografía o el software SIG.

Natural Earth fue construido gracias a la colaboración de muchos voluntarios y con el

apoyo de NACIS (North American Cartographic Information Society), y es gratuito para su

uso en cualquier tipo de proyecto (ver nuestro Términos de uso página para más

información).

Las cartas de ríos y lagos de México respaldas por ESRI se obtuvieron de la página:

http://www.cas.sc.edu/gis/datalinks/topic_nonscgeog.html

La carta de división política de México respalda por ESRI se obtuvo de la página:

http://www.maplibrary.org/stacks/Central%20America/Mexico/index.php

37

La carta de curvas de nivel de México respaldada por el INEGI (Instituto Nacional de

Estadística y Geografía) se obtuvo de la siguiente página:

http://mapserver.inegi.gob.mx/data/inf1m/?c=720