Curso OpenLayers

Introducción a OpenLayers Xeoinquedos organiza: Curso de introducción a OpenLayers 20 de Mayo de 2011 Lugar: ETS de

Views 62 Downloads 44 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción a OpenLayers

Xeoinquedos organiza:

Curso de introducción a OpenLayers

20 de Mayo de 2011

Lugar: ETS de Camiños, Canais e Portos – Universidade de A Coruña, Campus de Elviña

Introducción a OpenLayers

Qué vamos a ver ➔

Introducción a la librería ➔

Añadiendo capas ➔



Controles

Interacción con el servidor (a través de estándares OGC)

Introducción a OpenLayers

Qué vamos a ver ➔

Introducción a la librería ➔

Añadiendo capas ➔



Controles

Interacción con el servidor (a través de estándares OGC)

Introducción a la librería •

¿Qué es? •

Framework GIS desarrollado en JavaScript para la creación de mapas web dinámicos

Introducción a la librería •

¿Qué puedo hacer con él? •

Crear mapas interactvos

Introducción a la librería •

¿Qué puedo hacer con él? •

Visualizar información espacial / geográfca

Introducción a la librería •

¿Qué puedo hacer con él? •

Incluir y superponer distntos tpos de capas

Introducción a la librería •

¿Qué puedo hacer con él? •

Editar información espacial / geográfca

Introducción a la librería •

¿Qué puedo hacer con él? •

Interactuar con servicios GIS externos

Introducción a la librería •

¿Cómo lo hace? •

Arquitectura modular –

Capas



WMS, Vector, KML, Google, VirtualEarth, Images...



Geometrías



Point, Polygon, LinearRing...



Controles



Zoom, Pan, Measure, Modify...



Formatos



WMS, WFS, OSM, KML, GeoJSON, GeoRSS...



Protocolos



HTTP, SOS, WFS, SQL...

Introducción a la librería •

Más... •

Creado en 2005 por Metacarta



Licencia estlo BSD (htp://svn.openlayers.org/trunk/openlayers/license.txt)



Actualmente en la versión 2.10 (en breve la 2.11)



Trabajando ya en la versión 3.0

Introducción a la librería •

¿Dónde encuentro documentación y ejemplos? •

htp://docs.openlayers.org/ •



Home de la documentación de OpenLayers

htp://openlayers.org/dev/examples/ •

Multtud de ejemplos de casi todo lo que puede hacer

Introducción a la librería •

¿Dónde encuentro documentación y ejemplos? •

htp://trac.osgeo.org/openlayers/wiki •



Wiki con ejemplos, documentación, API docs...

Listas de correo (muy actvas): •

htp://lists.osgeo.org/mailman/listnfo/openlayers-users



htp://lists.osgeo.org/mailman/listnfo/openlayers-dev

Introducción a la librería ¡Hola Mundo! •



Vamos a hacer esto:

Un mapa navegable con una capa simple WMS, obtenida de un servidor externo (osgeo.org)

Introducción a la librería ¡Hola Mundo! •

¿Qué es WMS?



WMS = Web Map Service



Protocolo estándar OGC que permite servir y consumir mapas



Implementado por casi toda aplicación GIS



Por supuesto, también por OpenLayers

Introducción a la librería ¡Hola Mundo! •

Para hacerlo necesito: •

Editor de texto



Librería OpenLayers – 3 opciones: •



Descargar la versión estable –

htp://openlayers.org/download/OpenLayers-2.10.tar.gz



htp://openlayers.org/download/OpenLayers-2.10.zip

Descargar la versión trunk del repositorio Subversion –



svn checkout htp://svn.openlayers.org/trunk/openlayers/

Utlizar la hosted version, pero cargas contra el servidor de openlayers.org...

Introducción a la librería ¡Hola Mundo! •

Utlizaremos la versión trunk •





Es la últma, con todas las mejoras añadidas tras la publicación de la versión 2.10 estable Soluciona un bug aparecido con Firefox 4 al utlizar OpenLayers en modo debug (se comenta más adelante) A día de hoy, es práctcamente igual a la futura 2.11

Introducción a la librería ¡Hola Mundo! •

Para verlo necesito: •

Cualquier navegador web

Introducción a la librería ¡Hola Mundo! Pasos: 1.En la carpeta pública* crear carpeta “curso-openlayers/” 2.Descomprimir la librería y •

copiar la carpeta “openlayers/” dentro de la carpeta creada

3.Crear el archivo “curso-openlayers/curso-1.html” 4.¡A picar código! * : Ubuntu: /var/www WAMP-MAMP-XAMP: $SERVER_HOME/htdocs

Introducción a la librería ¡Hola Mundo! •

Pasos: •

Crear estructura del HTML •

Establecer dimensiones del mapa



Enlazar la librería



Crear el mapa •

Añadirle capas



Añadir controles



Establecer centro y nivel de zoom

Introducción a la librería ¡Hola Mundo! Partmos de una página base



Curso de OpenLayers - Ejemplo 1 - Capas WMS

Curso de OpenLayers - Ejemplo 1 - Capas WMS



Introducción a la librería ¡Hola Mundo! Incluimos la librería y creamos el mapa y las capas

...............



Introducción a la librería ¡Hola Mundo! ¿Qué estamos haciendo?



Enlazamos la librería descargada •

2 opciones: ➔

Un sólo fchero ➔





Incluir “OpenLayers-2.10/OpenLayers.js”

Librería desplegada → ➔

para producción para desarrollo (Firebug!)

Incluir “OpenLayers-2.10/lib/OpenLayers.js”

Introducción a la librería ¡Hola Mundo! ¡Ojo! ➔



La versión desplegada carga todos los archivos de OpenLayers por separado (bueno para debug) Sólo ellos

depuran con en modo singlefle

Introducción a la librería ¡Hola Mundo! ●

Si utlizas Firefox 4... : ●

La versión 2.10 estable tene un bug con Firefox 4 –



En modo depuración, cargando todos los archivos, no los carga bien

Solución: ●

Utlizar la versión trunk svn checkout htp://svn.openlayers.org/trunk/openlayers/ –

Los ejemplos dados para este curso utlizan esta versión

Introducción a la librería ¡Hola Mundo! Creamos una función init() a la que llamaremos al cargar la página



En ella metemos el código de inicialización del mapa •

La variable map se crea en el scope global (→ debug)

Introducción a la librería ¡Hola Mundo! Creamos el objeto OpenLayers.Map map = new OpenLayers.Map( 'map' ); •

Es el objeto “central” de OpenLayers



Varias versiones del constructor •



En esta se le pasa el id del que contendrá el mapa OpenLayers se encarga de renderizar el mapa en él

Introducción a la librería ¡Hola Mundo! ●

Clase OpenLayers.Map ●





Es la clase fundamental de OpenLayers, representa el mapa Contene las capas, los controles, la confguración de visualización... Puede haber varios por página

Introducción a la librería ¡Hola Mundo! Creamos una capa WMS (objeto que extende de OpenLayers.Layer) var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );

Parámetros: •

name: nombre arbitrario que le damos a la capa

→ “OpenLayers WMS”



url: URL del servicio WMS



params: parámetros para la petción WMS → {layers: 'basic'}



optons: opciones para la capa (en este ejemplo no lo usamos)

→ “htp://vmap0.tles.osgeo.org/wms/vmap”

Introducción a la librería ¡Hola Mundo! ●

Jerarquía de clases OpenLayers.Layer ●

Representan las distntas capas que se pueden añadir a un mapa: WMS, WFS, WMTS, Vector, GML, KML, GeoRSS, Google, OSM, Yahoo, VirtualEarth (Bing)... La confguración depende del tpo de capa –

● ●

Jerarquía extensible

Introducción a la librería ¡Hola Mundo! Tenemos que añadir la capa al mapa y defnir la zona que vamos a visualizar map.addLayer(layer); map.setCenter(new OpenLayers.LonLat(-8, 42.8), 8); •

El método OpenLayers.Map.setCenter() recibe el punto central y el nivel de zoom •

zoom = 0 → se visualiza todo el extent del mapa



La clase OpenLayers.LonLat representa pares lattud, longitud



Con esto, OpenLayers tene sufciente para saber cómo dibujar el mapa

Introducción a la librería ¡Hola Mundo! Por últmo, llamamos al método al cargar la página

...............

El método se ejecuta al lanzarse el evento onload, cosa que ocurre tras cargar la página ➔

Necesario cuando manipulamos en DOM

Introducción a la librería ¡Hola Mundo! Sólo falta defnir las dimensiones de nuestro mapa... :

...............

Introducción a la librería ¡Hola Mundo! ●

Y listo! Accede a htp://localhost/curso-openlayers/curso-1.html (o equivalente según la instalación del servidor web)

Introducción a OpenLayers

Qué vamos a ver ➔

Introducción a la librería ➔

Añadiendo capas ➔



Controles

Interacción con el servidor (a través de estándares OGC)

Añadiendo capas Capas de Google ●

Google Maps ofrece su propio API ●



htp://code.google.com/intl/es/apis/maps/documentaton/javascript/

Sin embargo: ●

No es open source –





Su licencia, aunque permisiva, restringe su uso

No admite tantos tpos de capas ¿Rapidez? Si quieres las capas de Google, van a ir igual de rápido en OpenLayers! –

Además, podrás superponer las capas que quieras

Añadiendo capas Capas de Google





OpenLayers incluye un tpo especial de capa para ver las capas públicas de Google

OpenLayers.Layer.Google y OpenLayers.Layer.Google.v3 ●

Dado que la versión 2.X del API de Google Maps está deprecada utlizaremos la v3

Añadiendo capas Capas de Google ●

Partmos del fchero curso-2.html ●

Primero hay que importar el API de Google Maps

.........

.........



Con el API v2 hacía falta un API Key, ahora ya no

Añadiendo capas Capas de Google ●

Creamos las capas, igual que en el primer ejemplo, y las añadimos al mapa var fisica = new OpenLayers.Layer.Google( "Google Física", {type: google.maps.MapTypeId.TERRAIN} ); var mapa = new OpenLayers.Layer.Google( "Google Mapa", {numZoomLevels: 20} ); var hibrida = new OpenLayers.Layer.Google( "Google Híbrida", {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20} ); var satelite = new OpenLayers.Layer.Google( "Google Satélite", {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22} ); map.addLayers([fisica, mapa, hibrida, satelite]);

Añadiendo capas Capas de Google ●

Fíjate: ●



Añadimos las capas todas a la vez, mediante el método addLayers() de la clase OpenLayers.Map Recibe como parámetro un array de capas –



A diferencia del método addLayer() que recibe una capa

El orden en que se añaden es el orden en que están contenidas en el array –

Importante en cuanto a la superposición de capas (z-index)

Añadiendo capas Capas de Google ●

El constructor recibe los parámetros: ●

name: nombre arbitrario que le damos a la capa



optons: opciones para la capa de Google: –

Necesitamos el tpo de capa, o se aplicará el valor por defecto (capa de Mapa, google.maps.MapTypeId.TERRAIN) Son tpos defnidos por el API de Google Maps Se le puede indicar el número de niveles de zoom a cada capa ●



→ “Google Fisica”, ...

Añadiendo capas Capas de Google ●

Para establecer el centro del mapa, tenemos que tener en cuenta que la proyección de las capas de Google es distnta a la del primer ejemplo, ya no usa lattud/longitud en grados ●

Todo mapa y toda capa tenen una proyección



Toda proyección tene un identfcador



Indica cómo se proyecta la información espacial (3D) en el mapa (2D)



Si no se indica nada, OpenLayers utlizará la EPSG:4326



No las hay mejores ni peores, sino más o menos adecuadas para cada caso o trozo de planeta

Añadiendo capas Capas de Google ●

Las capas de Google, así como las de Yahoo, Bing, y otros, están en la proyección conocida como Spherical Mercator ●

También se conoce como EPSG:900913 (aunque nombre el ofcial es EPSG:3785) –





WTF!? La explicación es sencilla: 900913 ↔ GOOGLE, y se utliza porque se llamó así extraofcialmente primero

Al contrario que otras, trata la Tierra como una esfera, no como un elipsoide Si se utliza alguna capa en esta proyección, los elementos (→ capas) que se superpongan han de estar en esa proyección (o reproyectados a ella)

Añadiendo capas Capas de Google ●

En términos práctcos: ●

Hay que reproyectar el centro que se le pasa al mapa –



Valdría pasárselo ya en la proyección de Google, pero no es habitual manejar la información geográfca en esa proyección

¿Cómo? –

OpenLayers incluye métodos para reproyectar datos vectoriales (nunca ráster!) entre las proyecciones más habituales ●

Para otras, se puede integrar fácilmente la librería proj4js (htp://proj4js.org/)

Añadiendo capas Capas de Google ●

El establecimiento del centro del mapa queda así: map.setCenter(new OpenLayers.LonLat(-8, 42.8).transform( new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject() ), 8);





El método transform() de la clase LonLat recibe 2 parámetros: ●

La proyección “original”



La proyección “destno”

El método map.getProjectonObject() devolverá la proyección EPSG:900913 (pruébalo en el Firebug!)

Añadiendo capas Capas de Google ●

Por últmo, para poder cambiar de capas, añadimos el control: map.addControl(new OpenLayers.Control.LayerSwitcher());



Los controles extenden la jerarquía OpenLayers.Control



Hay muchos predefnidos, entre ellos éste, el LayerSwitcher:





Como su nombre indica, crea un selector de clases



Veremos algunos otros más adelante

Fíjate cómo los controles, al igual que las capas, las gestona el objeto OpenLayers.Map

Añadiendo capas Capas de Google ●

El resultado (en htp://localhost/curso-openlayers/curso-2.html):

Añadiendo capas Capas de Bing (VirtualEarth) •

Al igual que Google, Bing proporciona un API para trabajar con mapas ➔



htp://www.microsof.com/maps/developers/

Presenta también los mismos inconvenientes: •

Código cerrado



API menos madura que la de Google •



Y que la de OpenLayers

También se pueden incluir capas de Bing con OpenLayers!

Añadiendo capas Capas de Bing (VirtualEarth) •

De nuevo, haremos un ejemplo sencillo:

Añadiendo capas Capas de Bing (VirtualEarth) •

Partmos del código proporcionado por el fchero curso-3.html •



Idéntco al del ejercicio anterior

Como en el ejemplo de Google, tenemos que importar el API de Bing Maps:



Añadiendo capas Capas de Bing (VirtualEarth) •

La forma de crear las capas es idéntca a la de las capas de Google: var mapa = new OpenLayers.Layer.VirtualEarth("Mapa", { type: VEMapStyle.Shaded }); var hibrida = new OpenLayers.Layer.VirtualEarth("Híbrida", { type: VEMapStyle.Hybrid }); var aerea = new OpenLayers.Layer.VirtualEarth("Aérea", { type: VEMapStyle.Aerial }); map.addLayers([mapa, hibrida, aerea]);



Los tpos de capa, de nuevo, los defne la librería externa (Bing Maps)

Añadiendo capas Capas de Bing (VirtualEarth) •

Por últmo, añadimos el LayerSwitcher y centramos el mapa: map.setCenter(new OpenLayers.LonLat(-8, 42.8), 8); map.addControl(new OpenLayers.Control.LayerSwitcher());

Añadiendo capas Capas de Bing (VirtualEarth) •

Fíjate que el centro lo establecemos en lattud / longitud •



Los mapas de Bing se cargan en EPSG:4326, a no ser que se indique lo contrario Habría que indicarlo en las opciones de las capas: var mapa = new OpenLayers.Layer.VirtualEarth("Mapa", { type: VEMapStyle.Shaded, sphericalMercator: true });



En ese caso habría que transformar las coordenadas igual que hicimos con las capas de Google

Añadiendo capas Capas de OpenStreetMap •

¿Qué es OpenStreetMap?

Añadiendo capas Capas de OpenStreetMap •

¿Qué es OpenStreetMap? ●

htp://www.openstreetmap.org/ : “Es un mapa libremente editable por todo el mundo. Está hecho por personas como usted.”



Además de tener una interfaz propia en la web, publica sus capas para que cualquiera pueda mostrarlas y verlas (y de hecho editarlas)

Añadiendo capas Capas de OpenStreetMap •





OpenLayers incorpora un tpo de capa específco para OSM Para este ejemplo partmos del código proporcionado en el fchero curso-4.html. Añadimos simplemente lo siguiente: layer = new OpenLayers.Layer.OSM( "Simple OSM Map"); map.addLayer(layer); map.setCenter(new OpenLayers.LonLat(-8, 42.8).transform( new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject() ), 8);

Añadiendo capas Capas de OpenStreetMap •

Fíjate: •



Necesitamos transformar las coordenadas porque OSM sirve sus capas en EPSG:900913

El resultado:

Añadiendo capas Capas WFS •

WFS: Web Feature Service • •

Estándar OGC Permite recuperar las propias geometrías y los atributos de las entdades entdad ↔ feature



OpenLayers incorpora un tpo de capa especial, pero está deprecada •

Lo mejor es utlizar una capa Vector con un protocolo WFS

Añadiendo capas Capas WFS •

Varias cosas a tener en cuenta en este ejemplo: Necesidad de un proxy



El funcionamiento de OpenLayers es el siguiente 1. El navegador carga el html

Añadiendo capas Capas WFS 2. OpenLayers dibuja el mapa y carga las capas

...

Hasta ahora, el navegador (a través de OpenLayers) sólo pidió imágenes a servidores externos •

Al realizar petciones XMLHTTPRequests, las restricciones del navegador sólo dejan hacerlo al mismo servidor:puerto de la página

Añadiendo capas Capas WFS ¿Cómo hacemos entonces para pedir features (geometrías + propiedades = XML, GML, texto...)? ➔



A través de un proxy en la máquina que sirve la página que contene el mapa de OpenLayers OpenLayers.org proporciona un proxy CGI escrito en Python htp://trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi?format=txt



Instalarlo en el servidor web ➔

Instrucciones: htp://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestons#ProxyHost

Añadiendo capas Capas WFS Todavía falta una cosa... •

¿Cómo sabe OpenLayers dónde está el proxy? ●



Estableciendo la variable OpenLayers.ProxyHost a la ruta relatva al proxy A partr de ahí, cualquier petción gestonada por OpenLayers susceptble de necesitar pasar por un proxy lo hará correctamente

Añadiendo capas Capas WFS Al grano. •

Partremos del código de curso-5.html.



Como dijimos, lo primero es establecer dónde está nuestro proxy ●

En Ubuntu, Windows con XAMPP y Mac con MAMP está en "/cgibin/proxy.cgi?url="

var map; OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url="; function init() { ....

Añadiendo capas Capas WFS •

Dado que nuestra capa WFS sólo contene features de los EEUU, vamos a crear una capa base WMS primero var base = new OpenLayers.Layer.WMS("Capa base", "http://tilecache.osgeo.org/wms-c/Basic.py", {layers: "basic"} ); map.addLayer(base);



Así conseguimos una imagen de fondo de referencia

Añadiendo capas Capas WFS •

Creamos la capa WFS, a la cual le pasamos algunas opciones nuevas que explicamos a contnuación var wfs = new OpenLayers.Layer.Vector("Capa WFS", { strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.WFS({ url: "http://demo.opengeo.org/geoserver/wfs", featureType: "states", featureNS: "http://www.openplans.org/topp" }) }); map.addLayer(wfs);

Añadiendo capas Capas WFS •



Fíjate: •

La capa es en realidad una capa Vector



El que sea WFS, KML, GML, etc. lo establece el protocolo

Esto se debe a una decisión de diseño que tomaron los desarrolladores de la librería •

El número de capas aumenta constantemente



Muchas comparten la naturaleza vectorial



Simplifcación de la librería

Añadiendo capas Capas WFS •

La estrategia: •

Indica a OpenLayers cómo solicitar las features •



Al utlizar la estrategia Fixed, OpenLayers pedirá todas las features existentes sólo una vez Si utlizásemos la estrategia BBOX, OpenLayers solicitaría features dentro del marco que se está visualizando •

En este ejemplo es asumible utlizar Fixed porque: • Son pocas features • Somos muchos a la vez :) (menos petciones)

Añadiendo capas Capas WFS ●

Existen otras (Fixed, Filter, Refresh, Save...)



Combinables



Algunas sirven para otras cosas –

Save: permite guardar cambios en el servidor



Refresh: permite recargar manualmente o por intervalos las features



...

Añadiendo capas Capas WFS ●

El protocolo WFS: protocol: new OpenLayers.Protocol.WFS({ url: "http://demo.opengeo.org/geoserver/wfs", featureType: "states", featureNS: "http://www.openplans.org/topp" }) ...



Recibe parámetros parecidos a los que recibe una capa WMS

Añadiendo capas Capas WFS ●







url: la URL del servicio WFS



"http://demo.opengeo.org/geoserver/wfs"

featureType: el tpo de feature (equivalente a la capa concreta en las capas WMS) → "states" featureNS: el namespace del tpo de feature (cada tpo de feature se defne en un espacio de nombres) → "http://www.openplans.org/topp" Con esto, OpenLayers tene sufciente para pedir y dibujar la capa

Añadiendo capas Capas WFS ●

Por últmo, establecemos el viewport y añadimos el selector de capas map.zoomToExtent(new OpenLayers.Bounds(-140.4, 25.1, -44.4, 50.5)); map.addControl(new OpenLayers.Control.LayerSwitcher());



Fíjate: ●

Ahora, en lugar de establecer el centro, defnimos directamente el campo de visión con el método zoomToExtent() –

Recibe como parámetro un objeto OpenLayers.Bounds, que defne un rectángulo a través de minx, miny, maxx, maxy

Añadiendo capas Capas WFS ●

El resultado:

Añadiendo capas Capas WFS ●

Fíjate: ●





La petción (mira el Firebug!) no recibe una imagen como con las capas WMS, recibe un XML con las geometrías Es OpenLayers quien renderiza al vuelo la imagen a partr de los datos El estlo utlizado es el que viene por defecto, pero se puede confgurar

Introducción a OpenLayers

Qué vamos a ver ➔

Introducción a la librería ➔

Añadiendo capas ➔



Controles

Interacción con el servidor (a través de estándares OGC)

Controles Introducción a los Controles Muy bonito Xurxo, pero... ¿ahora qué? ●

Controles: permiten interactuar con el mapa . ➢



Extenden a la clase: OpenLayers.Control

Paneles: agregación de controles. ➢

Extenden a la clase: OpenLayers.Panel

Controles Introducción a los Controles ●

¿Quién puso eso ahí?

Controles Introducción a los Controles ●

Por defecto, si no se añade explícitamente ningún control al mapa, éste se inicializa con 4 controles: ●







OpenLayers.Control.ArgParser : Lee los parámetros de la URL y actualiza el mapa. OpenLayers.Control.Atributon : muestra las atribuciones de los mapas consultados (propiedad 'atributon' de OpenLayers.Layer). OpenLayers.Control.PanZoom : agregación de dos controles: PanPanel y ZoomPanel. OpenLayers.Control.Navigaton : permite controlar la visualización del mapa a través del ratón.

Controles Otros controles predefnidos ●

OpenLayers.Control.KeyboardDefaults : para navegar por el mapa mediante el teclado (fechas, +/-,...)



OpenLayers.Control.PanZoomBar : dibuja una barra de zoom que permite acercar y alejar el mapa.



OpenLayers.Control.PanPanel : dibuja unos botones dentro del visor para desplazar el mapa.



OpenLayers.Control.ZoomPanel : agregación de los tres controles que gestonan el nivel de zoom : OpenLayers.Control.ZoomIn, OpenLayers.Control.ZoomToMaxExtent, OpenLayers.Control.ZoomOut.



OpenLayers.Control.Permalink : crea un enlace a la visualización actual del mapa.



OpenLayers.Control.MousePositon : indica la posición del cursor en el mapa.



OpenLayers.Control.OverviewMap : mapa de referencia en la esquina inferior derecha del mapa.



OpenLayers.Control.LayerSwitcher : permite ver la leyenda del mapa, mostrando las capas disponibles y permitendo elegir las que se desean visualizar.



OpenLayers.Control.Measure : permite medir tanto distancias como áreas dentro del visor.



...

Controles Ejemplo 1 Añadimos más controles al visor

function init() { var map = new OpenLayers.Map( 'map' , {controls: []}); … // CONTROLES map.addControl(new OpenLayers.Control.Navigation()); map.addControl(new OpenLayers.Control.Attribution()); map.addControl(new OpenLayers.Control.PanZoomBar()); map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false})); map.addControl(new OpenLayers.Control.ArgParser()); map.addControl(new OpenLayers.Control.Permalink()); map.addControl(new OpenLayers.Control.MousePosition()); map.addControl(new OpenLayers.Control.OverviewMap()); map.addControl(new OpenLayers.Control.KeyboardDefaults()); map.addControl(new OpenLayers.Control.ScaleLine()); … }

Controles Ejemplo 1 ●

Y a jugar!!!

Controles Controles de edición ●

Estos controles tienen que tener asociada una capa vectorial ( OpenLayers.Layer.Vector) sobre la que se dibujarán los elementos. ●

OpenLayers.Control.DrawFeature : permite dibujar polígonos, líneas o puntos.



OpenLayers.Control.ModifyFeature : permite modificar elementos.







OpenLayers.Control.SelectFeature : permite seleccionar elementos haciendo click sobre ellos. OpenLayers.Control.TransformFeature : permite aplicar transformaciones a elementos OpenLayers.Control.EditingToolbar : panel que incorpora los controles de dibujar polígonos, líneas, puntos y navegación.

Controles Ejemplo 2 Añadimos controles de edición: function init() { … var vector_layer = new OpenLayers.Layer.Vector( "Editable" ); ... var edit_panel = new OpenLayers.Control.EditingToolbar(vector_layer); map.addControl(edit_panel); … }

Controles Ejemplo 2 Añadimos un nuevo control al toolbar:

function init() { … var vector_layer = new OpenLayers.Layer.Vector( "Editable" ); ... var edit_panel = new OpenLayers.Control.EditingToolbar(vector_layer); var modify_feature_ctrl = new OpenLayers.Control.ModifyFeature(vector_layer, { title: "Modify Feature", displayClass: "olControlModifyFeature" }); edit_panel.addControls(modify_feature_ctrl); map.addControl(edit_panel); … }

Controles Ejemplo 2 ●

Y a jugar again!!!

Controles Defniendo nuestros propios controles ●

Extender la clase OpenLayers.Control o cualquiera de las clases de los controles predefinidos. OpenLayers.Control.MiControl = OpenLayers.Class(OpenLayers.Control, { … }

Controles Ejemplo 3 Control para borrar elementos: OpenLayers.Control.DeleteFeature = OpenLayers.Class(OpenLayers.Control, { initialize: function(layer, options) { OpenLayers.Control.prototype.initialize.apply(this, [options]); this.layer = layer; this.handler = new OpenLayers.Handler.Feature( this, layer, {click: this.clickFeature} ); }, clickFeature: function(feature) { this.layer.destroyFeatures([feature]); },

CLASS_NAME: "OpenLayers.Control.DeleteFeature" });

Introducción a OpenLayers

Qué vamos a ver ➔

Introducción a la librería ➔

Añadiendo capas ➔



Controles

Interacción con el servidor (a través de estándares OGC)

Interacción con el servidor OGC ●

Open Geospacial Consortum. ●

Organización estandarizadora (1994).



Internacional.



Sin ánimo de lucro.





Persigue, sobre todo, la interoperabilidad de los diferentes sistemas GIS +400 miembros. htp://www.opengeospatal.org/

Interacción con el servidor Estándares OGC ●

GML (Geography Markup Language): ●



KML (Keyhole Markup Language): ●



XML para representar información geográfca. XML para representar datos geográfcos en 3D.

WMS (Web Map Server): ●

Interfaz para publicar mapas de información georeferenciadas (imágenes).

Interacción con el servidor Estándares OGC ●

WFS (Web Feature Service): ●



WCS (Web Coverage Service): ●



Interfaz para publicar coberturas.

SOS (Sensor Observaton Service): ●



Interfaz para publicar información geoespacial a través de la web (GML sobre HTTP).

...

Defne el modo de acceso a los sensores a través de la web.

Interacción con el servidor WFS ●

OGC Web Feature Service Implementaton Specifcaton



Petciones WFS: ●

GetCapabilites: ➢



DescribeFeatureType: ➢



Ejemplo Ejemplo

GetFeature: ➢

Ejemplo

Interacción con el servidor Ejemplo 1: WFS GetFeature function init() { … getFeature_control = new OpenLayers.Control.GetFeature({ protocol: OpenLayers.Protocol.WFS.fromWMSLayer(wms_layer), box: true, hover: false, multipleKey: "shiftKey", toggleKey: "ctrlKey" }); getFeature_control.events.register("featureselected", this, function(e) { select_layer.addFeatures([e.feature]); modify_control.deactivate(); }); getFeature_control.events.register("featureunselected", this, function(e) { select_layer.removeFeatures([e.feature]); }); map.addControl(getFeature_control); getFeature_control.activate(); … }

Interacción con el servidor Ejemplo 1: WFS GetFeature ●

Y a cambiar el mundo!

Interacción con el servidor WFS-T ●

Permite cambiar la información en el servidor.



Ejemplo con OpenLayers: htp://openlayers.org/dev/examples/wfs-protocol-transactons.html

Interacción con el servidor WMS ●

OGC Web Map Service Implementaton Specifcaton



Petciones WMS: ●

GetCapabilites: ➢



DescribeLayer: ➢



Ejemplo

GetMap: ➢



Ejemplo

Ejemplo

GetFeatureInfo: ➢

Ejemplo

Interacción con el servidor Ejemplo 2: WMS GetFeatureInfo function init() { … info = new OpenLayers.Control.WMSGetFeatureInfo({ url: 'http://v2.suite.opengeo.org/geoserver/ows', title: 'Identify features by clicking', queryVisible: true, eventListeners: { getfeatureinfo: function(event) { if (popup !== undefined) { map.removePopup(popup); } popup = new OpenLayers.Popup.FramedCloud( "chicken", map.getLonLatFromPixel(event.xy), new OpenLayers.Size(50,50), event.text, null, true ); map.addPopup(popup); } } }); map.addControl(info); info.activate(); … }

Interacción con el servidor Ejemplo 2: WMS GetFeatureInfo ●

Y consultando...

Introducción a OpenLayers

Gracias por asistir a este curso

Te quedaste geoinquieto...? ►

Introducción a la librería

Permanece conectado... Xeoinquedos http://xeoinquedos.wordpress.com http://wiki.osgeo.org/wiki/Geoinquietos_Zona_Norte : #xeoinquedos



Introducción a la librería

Permanece conectado... OSGeo-ES Capítulo Local de la comunidad hispanohablante del OSGeo (http://wiki.osgeo.org/wiki/Capítulo_Local_de_la_comunidad_hispanohablante) : #osgeoes



Introducción a OpenLayers

Gracias a...

Francisco Puga : #fpuga

Micho García : #michogar

Introducción a OpenLayers

IMPARTIDO POR: Gracia Fernández López [email protected]

Xurxo Méndez Pérez

: #sonxurxo http://blog.sonxurxo.com [email protected]

Xeoinquedos http://xeoinquedos.wordpress.com http://wiki.osgeo.org/wiki/Geoinquietos_Zona_Norte : #xeoinquedos

OSGeo-ES (http://wiki.osgeo.org/wiki/Capítulo_Local_de_la_comunidad_hispanohablante) : #osgeoes