obtener XML(gml) de geoserver por medio de javascript

145 views
Skip to first unread message

rishark

unread,
Dec 3, 2010, 6:44:25 PM12/3/10
to GeoServer en Español
hola a todos,
estoy terminando un cliente web con openlayers pero los input son
url de archivos de geoserver he intentado con varios métodos y no
e conseguido descargar o guardar los gml en una variable de
javascript(AJAX) para realizar alguna operaciones con ellos, pero no
he podido por alguna causa geoserver me devuelve la petición vacía
que me sugieren estoy utilizando esta función para la descarga:

function loadXMLDoc(url)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>";
x=xmlhttp.responseXML.documentElement.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
{
txt=txt + "<tr>";
xx=x[i].getElementsByTagName("TITLE");
{
try
{
txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
}
catch (er)
{
txt=txt + "<td>&nbsp;</td>";
}
}
xx=x[i].getElementsByTagName("ARTIST");
{
try
{
txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
}
catch (er)
{
txt=txt + "<td>&nbsp;</td>";
}
}
txt=txt + "</tr>";
}
txt=txt + "</table>";
document.getElementById('txtCDInfo').innerHTML=txt;
}
}
xmlhttp.open("POST",url,true);
xmlhttp.send();
}

no de que forma pueda hacer esto no pence que fuera tan
complicado obtener un documento xml de geoserver :S

alguna idea ??

gracias por sus repuestas de antemano y que tengan un buen fin de
semana

rishark

unread,
Dec 15, 2010, 6:46:15 PM12/15/10
to GeoServer en Español

hola a todos, investigando encontré varias formas de hacer estas
peticiones wfs, como :

usando jquery

$(document).ready(function()
{
$.ajax({
type: "POST",
url: url,
dataType: "xml"
// ,success: parseXml
});
});

usando XMLHttpRequest

var urlreq = new XMLHttpRequest();
urlreq.open("POST", url, false);
urlreq.setRequestHeader("Content-Type", "text/xml");
urlreq.send(null);
alert(urlreq.responseXML.xml);


estoy obteniendo el siguiente error de geoserver:

119501 [btpool0-3] INFO /geoserver - Initializing Spring
FrameworkServlet 'dispatcher'
121825 [btpool0-3] INFO org.apache.wicket.Application -
[GeoServerApplication] init: Wicket extensions initializer
121949 [btpool0-3] INFO org.apache.wicket.Application -
[GeoServerApplication] init: Wicket core library initializer
121954 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IBehaviorListener, method=public abstract void
org.apache.wicket.behavior.IBehaviorListener.onRequest()]
121954 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IBehaviorListener, method=public abstract void
org.apache.wicket.behavior.IBehaviorListener.onRequest()]
121986 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IFormSubmitListener, method=public abstract void
org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
121986 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IFormSubmitListener, method=public abstract void
org.apache.wicket.markup.html.form.IFormSubmitListener.onFormSubmitted()]
122008 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
122008 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=ILinkListener, method=public abstract void
org.apache.wicket.markup.html.link.ILinkListener.onLinkClicked()]
122014 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IOnChangeListener, method=public abstract void
org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
122014 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IOnChangeListener, method=public abstract void
org.apache.wicket.markup.html.form.IOnChangeListener.onSelectionChanged()]
122016 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IRedirectListener, method=public abstract void
org.apache.wicket.IRedirectListener.onRedirect()]
122016 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IRedirectListener, method=public abstract void
org.apache.wicket.IRedirectListener.onRedirect()]
122042 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IResourceListener, method=public abstract void
org.apache.wicket.IResourceListener.onResourceRequested()]
122042 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IResourceListener, method=public abstract void
org.apache.wicket.IResourceListener.onResourceRequested()]
122073 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IActivePageBehaviorListener, method=public abstract void
org.apache.wicket.behavior.IBehaviorListener.onRequest()]
122073 [btpool0-3] INFO org.apache.wicket.RequestListenerInterface -
registered listener interface [RequestListenerInterface
name=IActivePageBehaviorListener, method=public abstract void
org.apache.wicket.behavior.IBehaviorListener.onRequest()]
122074 [btpool0-3] INFO org.apache.wicket.protocol.http.WebApplication
- [GeoServerApplication] Started Wicket version 1.3.7 in deployment
mode
15 dic 18:22:07 ERROR [data.shapefile] -
15 dic 18:22:07 ERROR [data.shapefile] -
15 dic 18:22:07 ERROR [data.shapefile] -

que lo puede esta causando, y como se debe hacer este tipo de
peticiones, la url que estoy utilizando es de la siguiente forma :

http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=univalle:Edificios&maxFeatures=50
http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=univalle:redpeatonal&maxFeatures=50&outputFormat=GML2

no se muy exactamente como funciona pero debería devolver en el
cliente algún tipo de mensaje de falla o que algo falta en la
petición pero nada :S

quien a trabajado o ha guardado datos de geoserver a una variable de
javascript como lo han echo y que métodos han utilizado y que se
debe configurar en geoserver para que se pueda realizar peticiones
wfs

de antemano gracias por cualquier ayuda


presumida

unread,
Dec 17, 2010, 7:50:39 AM12/17/10
to GeoServer en Español
Hola,
Yo estoy haciendo una aplicación de escritorio que interacciona con
geoserver en c++.
De javascrip no se mucho, pero te puedo ayudar con el tema de
geoserver.

En primer lugar para habilitar el servicio wfs en geoserver tienes que
ir a
servicios (parte lateral izquierda) y hacer click en WFS, hay una
opcion que pone
habilitar (debe estar seleccionada). De todas formas creo que por
defecto te viene seleccionada.

Para probar que la petición la estas haciendo correctamente usa el
demo que
te trae geoserver. Selecciona la petición que quieres probar y
sustituye los datos
que estan por defecto por los tuyos. Si no te funciona en el demo, es
que tienes algo mal. Aunque viendo
tu petición parece que esta correcta.

Ten en cuenta que existen dos forma principales de enviar peticiones a
geoserver: HTTP POST y HTTP GET.
El get envia los parametros en la misma url (como estas haciendo tu),
y el post los envia en el cuerpo (en un
documento xml). Podras ver en el demo que algunas peticiones tienen
las dos versiones o una sola de ellas.
Una vez que envies la petición tendrás que recojer la respuesta de
alguna forma en javascrip. La respuesta
suele ser un xml con tropecientas mil cosas, aunque depende de la
peticion y del formato de salida que
le hayas especificado.

Espero haberte aclarado algo.

Un saludo.
> http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request...http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request...

Ricardo Rodríguez

unread,
Dec 17, 2010, 6:59:28 PM12/17/10
to geoser...@googlegroups.com
hola,  gracias  por  ayuda estas son las peticiones que estoy haciendo :

1)

var myAjax = new OpenLayers.Ajax.Request(
        theUrl,
        {
                        method: 'POST',
                       contentType:  'application/xml',
                       postBody: filtro,
                        onComplete: callbackFunction,
                        onFailure: function(){alert("Error petición AJAX.");}
        });

2)


OpenLayers.Request.POST({
    url:""+ Ext.getCmp('segmentos').getValue(),
    data: "this is text not xml!",
    async:false,
    headers: {
        "Content-Type": "application-xml",
            },
    proxy: OpenLayers.ProxyHost
  })     
        });



y esto es lo que me genera openlayers :S

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: http://localhost/wwwlibs/hslayers/prueba/OpenLayers.js :: anonymous :: line 1150"  data: no]
http://localhost/wwwlibs/hslayers/prueba/HSLayers/Control/ScaleSwitcher.js
Line 7

 la  verdad esta  difícil  pero  según tu explicación puede ser que la petición  que estoy realizando es un post  en vez de get.

otra vez  gracias por responder y no se  tiene  alguna  idea  va  ser  bien recibida


Reply all
Reply to author
Forward
0 new messages