Me gustaría conseguir los resultados de un WMS petición GetFeatureInfo como un JSON en lugar de la tabla que viene por defecto. Fuera de la caja, las únicas opciones para la respuesta de un WMS GetFeatureInfo son la tabla, XML y texto.
Respuestas
¿Demasiados anuncios?Actualización El 'hack' dadas a continuación sólo es necesario para Geoserver versiones 2.2.x y abajo. Con la versión 2.3.0 y hacia arriba, Geoserver puede devolver JSON para WMS petición GetFeatureInfo de forma nativa.
Final de la Actualización
Hay una característica de la solicitud para que este en geoserver bug tracker.
El uso personalizado de GetFeatureInfo Plantillas, es posible generar una respuesta Json de Geoserver.
Usted puede seguir estos pasos:
1]Ir a la carpeta siguiente
GEOSERVER_DATA_DIR/áreas de trabajo/{área de trabajo}/{datos}/{featuretype}/
2] Crear 3 de texto vacío archivos con los siguientes nombres: encabezado.ftl, el contenido.ftl y pie de página.ftl
3] Abrir el contenido.ftl archivo, y copia de los siguientes libre marcador de código:
[
<#list features as feature>
{ "Type": "${type.name}"
<#list feature.attributes as attribute>
<#if !attribute.isGeometry>
, "${attribute.name}": "${attribute.value}"
</#if>
</#list>
}
</#list> ,{}
]
4] Guardar el archivo y ahora que el WMS petición getFeatureInfo. Verás que la respuesta está en JSON.
Nota: es necesario recordar que esta será la envoltura de los valores numéricos de las comillas como una cadena. Por lo tanto, usted podría tener que tomar el cuidado de él en el código de cliente.
Esta capacidad la que existe ahora en GeoServer 2.2.4.
He aquí cómo solicitar la salida JSON:
http://docs.geoserver.org/stable/en/user/services/wms/reference.html#getfeatureinfo
Hice este código json ftl plantilla, basado en un post:
Este es el código de la cabecera.ftl
[
Este es el código para el contenido.ftl:
{
"layer": "${type.name}",
"features":
[
<#list features as feature>
{
<#list feature.attributes as attribute>
<#if !attribute.isGeometry>
"${attribute.name?capitalize?js_string}": "${attribute.value?js_string}"<#if attribute_has_next>,</#if>
</#if>
</#list>
}
<#if feature_has_next>,</#if>
</#list>
]
},
Y este es para el pie de página.ftl:
]
Eso es! Los analizadores se ignora la última coma en cada objeto json.
Esto me funciona a mi.