Seguimos con el capítulo dos de la serie Catrasteando. En esta ocasión, vamos a ver cómo incluir información del catastro sobre google maps.

Para ello, nos estudiaremos la documentación que se ofrece en la página de servicios del Catastro. Una de las cosas que nos dice la es que para sacar un mapa, tenemos que invocar una URL del tipo:
http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&SRS=EPSG:4326&REQUEST=GETMAP&bbox=0000,1111,2222,3333&width=640&height=480&format=PNG&transparent=Yes&layers=catastro

Donde:

  • SRS es el sistema de coordenadas. Se aceptan distintos modelos, y lo bueno es que uno de ellos es el EPSG:4326, que (¿casualidad o causalidad?) se corresponde con las coordenadas geográficas en WGS 80, que son las mismas que usa google maps.
  • bbox es el bounding box. Es decir, la caja que contendrá las coordenadas límite de la zona deseada. Primero diremos el suroeste (longitud, latitud), y luego el noreste (longitud, latitud).
  • format es el formato de la imagen. No he encontrado los formatos que acepta, aunque he probado con GIF, PNG y JPG y funciona.
  • transparent acepta los posibles valores Yes o No, para hacer la imagen sólida, o transparente.
  • width y height nos permiten definir la anchura y altura, definida en píxeles.
  • layers nos sirve para decir qué capas de información mostrar, siendo posibles los valores:
    • PARCELA: Parcelas catastrales (solo geometría)
    • TXTPARCELAS: Rótulo con el código de parcela catastral.
    • MASA, TXTMASA: Polígonos y manzanas (geometría y rótulo).
    • SUBPARCE, TXTSUBPARCE: Subparcelas de cultivo.
    • CONSTRU, TXTCONSTRU: Subparcelas de construcción.
    • ELEMLIN: Elementos lineales de cartografía.
    • EJES: Ejes de vías de comunicación.
    • LIMITES: Límites administrativos, línea de costa y delimitación de suelo urbano.
    • TEXTOS: Rotulación de la cartografía (nombres de parajes, de calles, etc).
    • CATASTRO: Conjunto de todas las capas de información mencionadas anteriormente.

El resto de parámetros de momento no me interesan, así que los que no he nombrado los dejaremos como están.

Pues poco más necesitamos. Ya veremos otro día más cosas del API de google maps, pero por hoy lo vamos a dejar todo hecho. Veremos que el HTML que vamos a usar es muy poquito:

<html>
   <head>
      <title>Google Maps - Catastro edition</title>
      <style type="text/css">
			body{
				background-color: #cecece;
				width:100%;
				height: 100%;
			}

			#map_canvas{
				width:640px;
				height: 480px;
			}
      </style>
      <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=es&region=ES"></script>
      <script type="text/javascript" src="gmaps.js"></script>
      </head>
      <body onload="loadMap()">
	<div id="map_canvas"></div>
      </body>
</html>

Y ahora viene el javascript, que es el que lo hace todo. Para simplificar las cosas, vamos a inicializar un mapa en el centro de Alicante. Cuando se carguen los tiles del mapa, hagamos zoom o desplacemos el mapa, cargaremos una capa nueva que se pintará sobre el mapa. El bounding box del mapa catastral serán los límites del mapa.

Así, el fichero gmaps.js tendría el siguiente código:

var mapa = null;
var oldmap = null;
function loadMap(){
	var alicante = new google.maps.LatLng(38.345628,-0.480759);
	var myOptions = {
		zoom: 17,
		center: alicante,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	mapa = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	//AQUÍ INDICAMOS LOS EVENTOS QUE ESCUHARÁ EL MAPA
	google.maps.event.addListener(mapa, 'dragend',
		function(){
			overlay()
		}
	)

	google.maps.event.addListener(mapa, 'zoom_changed',
		function(){
			overlay()
		}
	)

	google.maps.event.addListenerOnce(mapa, 'tilesloaded',
		function(){
			overlay()
		}
	) //Sólo me interesa tenerlo cuando se carga el mapa por primera vez
}

//Esta función introduce la imagen del Catastro en el mapa
function overlay(){
	var bounds = mapa.getBounds()
	var ne = bounds.getNorthEast()
	var sw = bounds.getSouthWest()

	if(oldmap != null){
		oldmap.setMap(null)  //'Despinta' la imagen anterior para que no se solapen mucho
		oldmap = null
	}

	oldmap = new google.maps.GroundOverlay("http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&SRS=EPSG:4326&REQUEST=GETMAP&bbox="+sw.lng()+","+sw.lat()+","+ne.lng()+","+ne.lat()+"&width=640&height=480&format=PNG&transparent=Yes&layers=catastro"	, mapa.getBounds());
	oldmap.setMap(mapa);
}

Y para muestra de lo bonito que queda, dejo aquí un pantallazo de Alicante y su Castillo de Santa Bárbara:

Alicante (google maps + catastro)
Referencias:

Anuncios