La sede electrónica del catastro nos ofrece una serie de webservices que pueden resultar bastante interesantes.

Hice un par de pruebas desde los formularios que ofrecen para obtener la referencia catastral de varios domicilios y geolocalizarlo en google maps. Lo de las referencias catastrales va bien, y la ubicación en google maps es bastante acertada.

Así, vamos a ver cómo realizar un sencillo script de groovy que nos permita obtener información del catastro y a partir de ésta, hacer lo que nos apetezca. En primer lugar, veamos las entidades que vamos a usar:

class Calle {
    String codProvincia
    String codMunicipio
    String codVia
    String tipoVia
    String nombreVia
}

class Provincia{
    String codigoINE
    String nombre
}

class Municipio {
    String codigoINE
    String codigoINEProvincia
    String nombre
}

Antes de continuar, decir dos cosas:

  1. El web service del catastro corre bajo ssl, por lo que tendremos que tener el certificado del servidor en el keystore por defecto del JRE, o bien guardarlo en el keystore que queramos y añadir las siguientes líneas a nuestro script:
System.setProperty("javax.net.ssl.trustStore", "/ruta/al/keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "******");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
  1. Vamos a usar la librería HTTPBuilder de Groovy. Gracias a groovy 1.8 me la puedo traer muy fácilmente de la siguiente manera:
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )

Bien, ahora me he leído la documentación del catastro, y voy a ver qué puedo hacer a partir de esto:

import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

def url_catastro = "https://ovc.catastro.meh.es/";

//OBTIENE LA LISTA DE PROVINCIAS DE ESPAÑA
def provinciero = {
    def result = []
    def http = new HTTPBuilder(url_catastro)
    def path = 'ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx/ConsultaProvincia'

    http.post(path:path, body:null, requestContentType:ContentType.URLENC){ resp, xml ->
        xml.provinciero.prov.each{ pro ->
            result << new Provincia(
               codigoINE : pro.cpine.text().trim() ,
               nombre    : pro.np.text().trim()
            )
        }
    }
    result
}

//OBTIENE LA LISTA DE MUNICIPIOS PARA UNA PROVINCIA DETERMINADA
def municipiero = { data ->
    def result = []
    def http = new HTTPBuilder(url_catastro)
    def path = '/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx/ConsultaMunicipio'
    def postBody = [Provincia : data.provincia,
                    Municipio : data.municipio]

    http.post(path:path, body:postBody, requestContentType:ContentType.URLENC){ resp, xml ->
        xml.municipiero.muni.each { mn ->
            result << new Municipio(
                  nombre             : mn.nm.text().trim(),
                  codigoINE          : mn.loine.cm.text().trim() ,
                  codigoINEProvincia : mn.loine.cp.text().trim()
              )
          }
      }
      result
  }

//OBTIENE LA LISTA DE CALLES PARA UN MUNICIPIO DENTRO DE UNA PROVINCIA DETERMINADA
def callejero = { data ->
    def result = []
    def http = new HTTPBuilder(url_catastro)
    def path = '/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx/ConsultaVia'
    def postBody = [Provincia : data.provincia,
                    Municipio : data.municipio,
                    TipoVia   : data.tipoVia,
                    NombreVia : data.nombreVia]

    http.post(path:path, body:postBody, requestContentType:ContentType.URLENC){ resp, xml ->
         xml.callejero.calle.each{ cl ->
            result << new Calle(
                codProvincia : cl.loine.cp.text().trim() ,
                codMunicipio : cl.loine.cm.text().trim() ,
                codVia       : cl.dir.cv.text().trim()   ,
                tipoVia      : cl.dir.tv.text().trim()   ,
                nombreVia    : cl.dir.nv.text().trim()
            )
        }
    }

    result
}

Con estos pequeños métodos, ya podemos crearnos un script gracias al cual podemos obtener el callejero de toda España. Si no os apetece creároslo, os lo dejo aquí. Si seguimos trasteando un poco más, podemos hacer cosas como, por ejemplo, poner una dirección y que nos la localice en google maps, o bien algo como lo anterior, pero que nos pinte una capa con los mapas del catastro y así darle una vista distinta al mapa. A ver si lo hago cuando pille vacaciones y tenga un poquito más de tiempo 🙂

Más información:

Anuncios