Web Services del CS IDEC
CS IDEC disposa d'un geoservei amb 6 mètodes:
| 1- Obtenir les coordenades XY amb UTM 31 N, el nom i la comarca d'un topònim de la base toponímica 1:50.000 de l'Institut Cartogràfic de Catalunya. |
| 2- Obtenir les coordenades XY amb latitud longitud, el nom i la comarca d'un topònim de la base toponímica 1:50.000 de l'Institut Cartogràfic de Catalunya. |
| 3- Quadrar pixels d'una imatge a partir de l'alçada i l'amplada de la imatge, d'una caixa de coordenades i d'un mètode de quadratura. Aquest geoprocess està pensat per a totes aquelles aplicacions webMapping basades en l'especificació WMS d'OGC. |
| 4- Converteix X Y píxels pantalla amb X Y coordenades. |
| 5- Converteix X Y coordenades amb X Y píxels pantalla. |
| 6- Retorna nom, municipi ,coordenada XY i distància en línea recta dels equipaments especificats. |
Per executar els geoprocessos cal omplir el paràmetre "clau" amb la 'clau d'accés' que IDEC proporciona al registrar-se.
-Per a què serveix quadrar píxels?
Segons l'especificació OpenGis WMS 1.1.1 (pàg.36), dins d'una consulta WMS, els valors dels paràmetres WIDTH (amplada) i HEIGHT (alçada) especifiquen els número de píxels usats entre els valors de les X i Y màximes i mínimes expressats en el paràmetre BBOX. És a dir, que el pixel ha d'estar quadrat ja que ha d'existir un "aspect ratio" entre les dimensions de la imatge i la caixa de coordenades.
En el cas que no existeixi aquest "aspect ratio", la imatge no tindrà el píxel quadrat i sortirà deformada.
No tots els servidors de mapes que han implementat WMS han tingut present aquest aspecte, i alguns d'ells sempre serveixen la imatge ben formada, encara que no existeixi aquest "aspect ratio".
Així doncs, quadrar el píxel permet:
- Visualitzar de forma conjunta capes WMS, independentment que el servidor WMS mantingui o no "aspect ratio".
- Visualitzar de forma conjunta capes que provinguin de servidors WMS amb diferents sistemes de referència.
Web Services IDEC:
Repositoris amb el programari i el codi font:
| Nom | URI | WSLD | Mètodes |
| IDEC_GeoServeis | http://delta.icc.es /webservices/services /IDEC_GeoServeisPort |
http://delta.icc.es /webservices/services /IDEC_GeoServeisPort?wsdl |
getCoordenadesUTM getCoordenadesLatLon getQuadrarPixel getPixelsToCoord getCoordToPixels getProximitatEquipaments |
Descripció dels mètodes:
| Mètode | Descripció | Input | Observacions | Output |
| getCoordenadesUTM | Donat un topònim, retorna les coordenades UTM del topònim*, el seu nom i la comarca on pertany. | xsd:string key,xsd:string toponim Exemple petició SOAP |
- | xsd:string NOM, xsd:string COMARCA, xsd:double X, xsd:double Y Exemple resposta SOAP Màxim 15 resultats. |
| getCoordenadesLatLon | Donat un topònim, retorna les coordenades UTM del topònim*, el seu nom i la comarca on pertany. | xsd:string key,xsd:string toponim Exemple petició SOAP |
- | xsd:string NOM, xsd:string COMARCA, xsd:double X, xsd:double Y Exemple resposta SOAP Màxim 15 resultats. |
| getQuadrarPixel | Retorna els valors per quadrar pixels a partir: d'una caixa de coordenades, de l'alçada (px) i amplada(px) del mapa. | xsd:string key,xsd:double Xmin ,xsd:double Ymin, xsd:double Xmax, xsd:double Ymax, xsd:integer Width, xsd:integer Height, xsd:string Quadratura' Exemple petició SOAP |
Valors de Quadratura : QXmin , QYmin, QXmax, QYmax, QWidth, QHeight | xsd:double Xmin ,xsd:double Ymin, xsd:double Xmax, xsd:double Ymax, xsd:integer Width, xsd:integer Height Exemple resposta SOAP Màxim 15 resultats. |
| getPixelsToCoord | Converteix X Y píxels pantalla amb X Y coordenades. | xsd:String CLAU,xsd:int XPIXEL, xsd:int YPIXEL, xsd:int WIDTH, xsd:int HEIGHT, xsd:double XMIN,xsd:double YMIN, xsd:double XMAX, xsd:double YMAX | - | xsd:double X ,xsd:double Y, |
| getCoordToPixels | Converteix X Y coordenades amb X Y píxels pantalla. | xsd:String CLAU,xsd:double XCOORD, xsd:double YCOORD, xsd:int WIDTH, xsd:int HEIGHT, xsd:double XMIN,xsd:double YMIN, xsd:double XMAX, xsd:double YMAX | - | xsd:int X ,xsd:int Y, |
| getProximitatEquipaments | Retorna nom, municipi ,coordenada XY i distància en línia recta dels equipaments. | xsd:String CLAU, xsd:double Y, xsd:double Y, xsd:double DISTANCIA,xsd:String TIPUS | Valors de DISTANCIA: expressada en metres. Valors de TIPUS : TOTS, Ajuntament, Albergs, Biblioteca, Centres CAP, Centres i delegacions , Ensenyament, Sanitat, Hospitals Publics, Policia, Poligon Industrial, Punts omnia, Punt AOC, Telecentres. |
xsd:String NOM ,xsd:String MUNICIPI, xsd:double DISTANCIA, xsd:String TIPUS, xsd:double X, xsd:double Y Màxim 25 equipaments. |
*La coordenada del topònim representa el punt d'inserció de la cadena de text feta sobre el topogràfic 1 50.000, i no és pas la coordenada real del lloc geogràfic.
Exemples pràctics
Com a demostració, IDEC ha creat dues aplicacions web que utilitzen els Web Services.
| Nom | Exemple 1 |
| Descripció | Mostra els resultats obtinguts en una llista, captura les coordenades del topònim per després localitzar-lo en un mapa. |
| Mètodes utilitzats | getCoordenadesUTM(key,toponim) getCoordenadesLatLon(key,toponim) |
| Nom | Exemple 2 |
| Descripció | Passa els valors del pixel quadrat a una consulta WMS, per visualitzar de forma correcta el mapa. |
| Mètodes utilitzats | getQuadraPixel(key,Xmin,Ymin,Xmax,Ymax,Width,Height,Quadrar) |
| Nom | Exemple 3 |
| Descripció | Client lleuger on s'utilitzen tots els mètodes. |
| Mètodes utilitzats | Tots |
Exemples implementació
Per tal de facilitar l'us dels Web Services, hem incorporat exemples de codi per crear un WSC (Web Services Client).
Actualment es poden trobar exemples amb PHP utilitzant la llibreria gratuïta de NuSOAP i amb JSP utilitzant les classes de Axis Apache.
IDEC anirà publicant altres de exemples de codi amb llenguatges i plataformes diferents.
PHP (Hypertext PreProcessor)
Cal instal·lar NuSOAP .
- Exemple getCoordenadesUTM()
- Exemple getCoordenadesLatLon()
- Exemple getQuadrarPixel()
- Descarregar exemples PHP
| /* WebService: IDEC http://www.geoportal-idec.net Method: getCoordenadesUTM Require: NuSOAP http://sourceforge.net/projects/nusoap/ */ function matriu_to_texte($array){ $llarg_texte = ""; foreach($array as $valor=>$val){ if(is_array($val)){ $llarg_texte .= "[$valor = {". matriu_to_texte($val)."}] , "; } else{ $llarg_texte .= "[$valor=$val] , "; } } return substr($llarg_texte, 0, strlen($llarg_texte)-3); }require('nusoap.php'); $metode="getCoordenadesUTM"; $toponim="Girona"; //IDEC key $key="XXXXXXXXX"; $wsc_Parametres = array("key" =>(string)$key,"toponim" =>(string)$toponim); $wsc_IDEC = new soapclient('http://delta.icc.es/webservices/services/IDEC_Web ServicesPort?wsdl','wsdl'); $Resultat = $wsc_IDEC->call($metode, $wsc_Parametres); if (!$wsc_IDEC->getError()) { echo(matriu_to_texte($Resultat)); }else{ echo($wsc_IDEC->getError()); } |
| /* WebService: IDEC http://www.geoportal-idec.net Method: getCoordenadesLatLon Require: NuSOAP http://sourceforge.net/projects/nusoap/ */ function matriu_to_texte($array){ $llarg_texte = ""; foreach($array as $valor=>$val){ if(is_array($val)){ $llarg_texte .= "[$valor = {". matriu_to_texte($val)."}] , "; } else{ $llarg_texte .= "[$valor=$val] , "; } } return substr($llarg_texte, 0, strlen($llarg_texte)-3); } require('nusoap.php'); $metode="getCoordenadesLatLon"; $toponim="Girona"; //IDEC key $key="XXXXXXXXX"; $wsc_Parametres = array("key" =>(string)$key,"toponim" =>(string)$toponim); $wsc_IDEC = new soapclient('http://delta.icc.es/webservices/services/IDEC_Web ServicesPort?wsdl','wsdl'); $Resultat = $wsc_IDEC->call($metode, $wsc_Parametres); if (!$wsc_IDEC->getError()) { echo(matriu_to_texte($Resultat)); }else{ echo($wsc_IDEC->getError()); } |
| /* WebService: IDEC http://www.geoportal-idec.net Method: getQuadrarPixel Require: NuSOAP http://sourceforge.net/projects/nusoap/ */ function matriu_to_texte($array){ $llarg_texte = ""; foreach($array as $valor=>$val){ if(is_array($val)){ $llarg_texte .= "[$valor = {". matriu_to_texte($val)."}] , "; } else{ $llarg_texte .= "[$valor=$val] , "; } } return substr($llarg_texte, 0, strlen($llarg_texte)-3); } require('nusoap.php'); $metode="getQuadrarPixel"; //IDEC key $key="XXXXXXXX"; $Xmin=498079.12; $Ymin=4623356.5; $Xmax=504552.28; $Ymax=4627937; $Width=300; $Height=300; /*Quadratura values QXmin QYmin QXmax QYmax QWidth QHeight */ $Quadratura="QXmin"; $wsc_Parametres = array('key' =>(string)$key,'Xmin'=>(double)$Xmin,'Ymin'=>(double)$Ymin,'Xmax'=>(double)$Xmax,'Ymax'=>(double)$Ymax,'Width'=>(integer)$Width,'Height'=>(integer)$Height,'Quadratura'=>(string)$Quadratura); $wsc_IDEC = new soapclient('http://delta.icc.es/webservices/services/IDEC_Web ServicesPort?wsdl','wsdl'); $Resultat = $wsc_IDEC->call($metode, $wsc_Parametres); if (!$wsc_IDEC->getError()) { echo(matriu_to_texte($Resultat)); }else{ echo($wsc_IDEC->getError()); } |
JSP (Java Server Pages)
Requereix llibreries Axis Apache.
- Exemple getCoordenadesUTM()
- Exemple getCoordenadesLatLon()
- Exemple getQuadrarPixel()
- Descarregar exemples JSP i idecserveis.jar
|
<%@page contentType="text/html"%> <%! /* This is a client of the IDEC Web Services http://www.geoportal-idec.net It uses the Apache AXIS web services stack. http://ws.apache.org/axis/ To build the client-side classes used by this JSP, do this: 1-Install Apache AXIS 2-produces the proxy source code java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java --package idecwebservices http://delta.icc.es/webservices/services/IDEC_GeoServeisPort?wsdl 3-compiles it and places it into the CLASSES dir javac -classpath %AXISCLASSPATH% -g idecwebservices/*.java **********************************************/ private String wsc_IDEC(String toponim) { int i=0; String resultat= ""; String getError= ""; //Idec Key String key="XXXXXXXXX"; try { idecwebservices.IDEC_Web ServicesLocator rutaService = new idecwebservices.IDEC_Web ServicesLocator(); idecwebservices.IDEC_Web ServicesPortType serviceIDEC= rutaService.getIDEC_Web ServicesPort(); idecwebservices.ToponimsData r[] ; r=serviceIDEC.getCoordenadesUTM(key,toponim); for ( i=0; i resultat+=r[i].getCOMARCA()+"<br>"; resultat+=r[i].getX()+"<br>"; resultat+=r[i].getY()+"<br>"; } } catch(Exception e1){ getError= "<font color=red>ERROR: <xm" + "p>" + e1 + "</x" + "mp></font>\n"; } return resultat + getError; } %> <% String result= wsc_IDEC("Girona"); out.print(result); %> |
| <%@page contentType="text/html"%>
<%! /* This is a client of the IDEC Web Services http://www.geoportal-idec.net It uses the Apache AXIS web services stack. http://ws.apache.org/axis/ To build the client-side classes used by this JSP, do this: 1-Install Apache AXIS 2-produces the proxy source code java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java --package idecwebservices http://delta.icc.es/webservices/services/IDEC_GeoServeisPort?wsdl 3-compiles it and places it into the CLASSES dir javac -classpath %AXISCLASSPATH% -g idecwebservices/*.java **********************************************/ private String wsc_IDEC(String toponim) { int i=0; String resultat= ""; String getError= ""; //Idec Key String key="XXXXXXXXX"; try { idecwebservices.IDEC_Web ServicesLocator rutaService = new idecwebservices.IDEC_Web ServicesLocator(); idecwebservices.IDEC_Web ServicesPortType serviceIDEC= rutaService.getIDEC_Web ServicesPort(); idecwebservices.ToponimsData r[] ; r=serviceIDEC.getCoordenadesLatLon(key,toponim); for ( i=0; i<r.length; i++) { resultat+=r[i].getNOM()+"<br>"; resultat+=r[i].getCOMARCA()+"<br>"; resultat+=r[i].getX()+"<br>"; resultat+=r[i].getY()+"<br>"; } } catch(Exception e1){ getError= "<font color=red>ERROR: <xm" + "p>" + e1 + "</x" + "mp></font>\n"; } return resultat + getError; } %> <% String result= wsc_IDEC("Girona"); out.print(result); %> |
|
<%@page contentType="text/html"%> <%! /* This is a client of the IDEC Web Services http://www.geoportal-idec.net It uses the Apache AXIS web services stack. http://ws.apache.org/axis/ To build the client-side classes used by this JSP, do this: 1-Install Apache AXIS 2-produces the proxy source code java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java --package idecwebservices http://delta.icc.es/webservices/services/IDEC_GeoServeisPort?wsdl 3-compiles it and places it into the CLASSES dir javac -classpath %AXISCLASSPATH% -g idecwebservices/*.java **********************************************/ private String wsc_IDEC(double Xmin,double Ymin,double Xmax,double Ymax,int Width,int Height,String Quadrar) { int i=0; String resultat= ""; String getError= ""; //Idec Key String key="XXXXXX"; try { idecwebservices.IDEC_Web ServicesLocator rutaService = new idecwebservices.IDEC_Web ServicesLocator(); idecwebservices.IDEC_Web ServicesPortType serviceIDEC= rutaService.getIDEC_Web ServicesPort(); idecwebservices.Pixelquadrat r ; r=serviceIDEC.getQuadrarPixel(key,Xmin,Ymin,Xmax,Ymax,Width,Height,Quadrar); resultat+=r.getXmin()+"<br>"; resultat+=r.getYmin()+"<br>"; resultat+=r.getXmax()+"<br>"; resultat+=r.getYmin()+"<br>"; resultat+=r.getWidth()+"<br>"; resultat+=r.getHeight()+"<br>"; } catch(Exception e1){ getError= "<font color=red>ERROR: <xm" + "p>" + e1 + "</x" + "mp></font>\n"; } return resultat + getError; } %> <% double Xmin=498079.12; double Ymin=4623356.5; double Xmax=504552.28; double Ymax=4627937.0; int Width=300; int Height =300; String Quadrar ="QXmin"; /*Quadratura values QXmin QYmin QXmax QYmax QWidth QHeight */ String result= wsc_IDEC(Xmin,Ymin,Xmax,Ymax,Width,Height,Quadrar); out.print(result); %> |
Registre d'usuaris
Podeu registrar-vos enviant un correu electrònic a idec@icc.cat especificant les següents dades:
Assumpte: Registre Web Services
Nom:
Cognoms:
Correu electrònic:
Emrpesa/Institució:
