5 votos

Cambio de definiciones de capas / La actualización no se comporta en la API de ArcGIS para JavaScript?

En ArcGIS Javascript API 3.3, tengo una capa ArcGISDynamicMapService en mi aplicación que apunta a un servicio de mapas bastante simple (6 capas). En la aplicación, hay una GUI/widget que permite al usuario elegir varias opciones - que luego cambia dinámicamente la propiedad layerDefinitions de la capa para volver a renderizar la capa basada en su selección.

Después de definir y establecer las layerDefinitions de la capa, llamo al método layer.refresh para volver a renderizar la capa. Sin embargo, la capa re-renderizada es siempre incorrecta - o se renderizan las capas incorrectas, o se renderizan características incorrectas, y no parece haber ningún patrón en estos errores que pueda determinar. Sin embargo, una vez que el mapa es desplazado o ampliado, la capa re-renderizada se dibuja exactamente como se esperaba. A continuación se muestra el código javascript correspondiente. La función "format" es una función de formato de cadena similar a la de .NET que he añadido al script.

var layerDefinitions = [];
layerDefinitions[1] = "TransmitterId IN ({0})".format(visibleTransmitterIds.join(","));
layerDefinitions[2] = "TransmitterId IN ({0})".format(visibleTransmitterIds.join(","));
analysisResultLyr.setLayerDefinitions(layerDefinitions);
analysisResultLyr.refresh();

Usando varias herramientas de sniffing http (Google Developer tools es la opción preferida), puedo ver que la petición http saliente para mi capa de interés es exactamente la misma entre la llamada de refresco - y la llamada de pan/zoom. También he verificado el sql contenido en las definiciones de las capas, y estoy seguro de que las capas/características devueltas en la llamada de actualización son definitivamente erróneas.

¿Alguien tiene alguna idea de lo que puede estar causando esto? Mejor aún, ¿alguien conoce una forma alternativa de actualizar una capa sin hacer un paneo/zoom del mapa?

Un par de notas más:

  1. He desactivado el almacenamiento en caché en el cliente mediante setDisableClientCaching
  2. Mis cláusulas sql where hacen uso de la sentencia IN. ¿Es esto una mala idea con las geodatabases de archivos?

1voto

Dirk Thannhäuser Puntos 176

Creo que analysisResultLyr.setLayerDefinitions(layerDefinitions); activará una actualización automáticamente después de actualizar las definiciones de las capas ver https://developers.arcgis.com/javascript/3/jsapi/arcgisdynamicmapservicelayer-amd.html#setlayerdefinitions . Creo que su llamada a refresh puede estar interfiriendo con algún comportamiento asíncrono con las actualizaciones de la definición de la capa. Prueba a eliminarlo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X