Renderiza millones de funciones en tus mapas


Renderiza millones de funciones en tus mapas


Nuestro colega cartográfico, John Nelson, escribió una interesante publicación de blog que examinó el impacto del lenguaje regional para nombrar lugares en los Estados Unidos. El geógrafo en mí pudo apreciar la representación espacial de los lugares con nombre, ¡pero el geodev en mí solo quería jugar con esos 2,3 millones de puntos!

Tuve que dar un paso atrás y pensar en cómo podría funcionar esto por un momento. 2.3 millones de puntos son todavía muchas características para mostrar en un FeatureLayer, y aún no funcionan como Vector Tiles. En escalas pequeñas, simplemente no es posible procesar tantos datos vectoriales en el navegador.

Pero los viejos azulejos raster pueden hacerlo. Una vez que se cocina un azulejo, se almacena en caché, es rápido, ¡y siempre funciona! Todavía podría aprovechar la visualización de los datos como FeatureLayer a escalas más grandes también. Así que obviamente necesitaba un enfoque híbrido.

Subir datos

John fue lo suficientemente bueno como para proporcionar los datos con los que trabajó como geodatabase. Puedes encontrar el enlace en su post. El siguiente paso, probablemente el paso más simple, fue cargar los datos en mi cuenta en línea.

Upload data


Una vez que cargue los datos, Online creará un elemento para la geodatabase que se cargó y creará automáticamente una capa de entidades.


Item upload and Feature Service

Una vez que se hayan cargado los datos, puedo verlos en la pestaña Visualización de los detalles del elemento. No podré ver todos los datos, son más de 2 millones de puntos, pero seguro que lo intentaré.
Lo primero que haré es acercarme a una escala razonable para poder trabajar en la visualización del mapa. Ahora necesito definir cómo quiero visualizar estos datos.

Voy a utilizar una expresión de Arcade para encontrar los nombres de lugares que contengan "Gap", "Pass", "Notch" o "Saddle".


var gap = Find("Gap", $feature.NAME);
var pass = Find("Pass", $feature.NAME);
var notch = Find("Notch", $feature.NAME);
var saddle = Find("Saddle", $feature.NAME);

if (gap > 0) {
    return "Gap";
}
if (pass > 0) {
    return "Pass";
}
if (notch > 0) {
    return "Notch";
}
if (saddle > 0) {
    return "Saddle";
}

Voy a usar la función Arcade Find para encontrar los nombres que coincidan con nuestros datos. Una vez hecho esto, necesito visualizar mis datos. ¡Utilizando el mapa de John como guía, puedo pretender ser un cartógrafo decente!

symbolize millions of features

Lo siguiente que puedo hacer es configurar mi ventana emergente. Solo voy a mostrar el nombre del lugar, con el condado y el estado.

Feature Service Popup

Una vez hecho esto, ahora puedo guardar la capa y pasar al siguiente paso de crear mi capa de mosaico.

Capa de Azulejo

Normalmente, abriría ArcGIS Pro, cocinaría azulejos localmente en mi máquina y luego los subiría a mi cuenta en línea. Pero, ¿y si no tienes Pro? Está bien, puedes publicar mosaicos desde capas de entidades directamente en línea. Cuando publique mosaicos, se generarán con el estilo de capa de entidad de origen. Algo a tener en cuenta cuando publiques tus tiles. Si necesita cambiar el estilo de su capa antes de crear mosaicos, puede crear una vista de capa de entidades alojada y publicar mosaicos desde esa vista.

Tengo planes para estos mosaicos, así que sé que no necesito cocinar mosaicos a gran escala, solo los necesito hasta el nivel del Condado o del Área Metropolitana, así que cuando publico mis mosaicos puedo ajustar el rango de escala para satisfacer mis necesidades.

Publish tiles from a feature service

Otra clave aquí es asegurarse de dejar la casilla de verificación Crear mosaicos marcada automáticamente. Esto retrasará la creación de azulejos hasta que se soliciten. Una vez que se crea un mosaico, se almacena en caché y está disponible para todas las solicitudes posteriores. Esa es una característica realmente genial de publicar mosaicos desde una capa de entidades.

Aunque quiero que se creen dinámicamente algunos mosaicos, todavía puedo modificar esto un poco más, por lo que los primeros usuarios en ver un área a pequeña escala no pagan la pena de esperar a que se genere un mosaico. Puedo ingresar a mi capa de mosaico y construir mosaicos a escalas seleccionadas. ¡Incluso podría construir fichas para una extensión definida!

Build Tiles

Normalmente, probablemente habría precompilado las baldosas en las tres escalas más pequeñas, pero ya había hecho algunas antes, así que voy a construir las baldosas para las dos escalas más pequeñas.

Ahora sé lo que estás pensando. ¿Cuántos créditos estás quemando aquí para construir todas estas fichas? Me alegra que lo hayas preguntado. Cuando realice una compilación por lotes de mosaicos como lo hice yo, recibirá un mensaje que le dará una estimación de la cantidad de almacenamiento que tomarán y la cantidad de créditos que utilizará. En mi caso recibí el siguiente mensaje.

Estás a punto de crear 107139 piezas. Esto requerirá un estimado de 643.85 MB de espacio de almacenamiento adicional. La creación de estos azulejos tendrá un costo estimado de 10.714 créditos.

Eso fue por un poco más de 100.000 fichas. Por 11 créditos. Eso es. Hay alrededor de 7,400 otros azulejos en mi capa de mosaico, por lo que cuesta menos que quizás un crédito para construir.

Pero el costo de almacenamiento debe ser mucho ¿no? El almacenamiento de datos y mosaicos actualmente cuesta 1.2 créditos por 1 GB almacenado al mes. Las 100,000 baldosas que estoy construyendo actualmente tienen menos de 650 MB. Para poner eso en perspectiva, puede registrarse para obtener una cuenta gratuita de ArcGIS Developer y obtener 50 créditos por mes. Además, no hay costo por vista. Solo creando y almacenando las baldosas. No puedes conseguir mucho mejor que eso.

Creando y consumiendo un mapa web

Ahora que tengo mi capa de mosaico y mi capa de entidades, puedo combinarlas dentro de un mapa web. Una vez que haya agregado ambas capas a mi mapa web, puedo ajustar el rango de escala visible para cada una. Usaré los mosaicos en escalas más pequeñas y cuando me acerque más allá de una determinada escala, donde he decidido no cocinar los mosaicos, puedo activar la capa de entidades. Esta es probablemente la parte más fácil, porque ya he diseñado mi capa y mis baldosas ya se están cocinando en los rangos de escala que definí. Establecí el rango de escala para mi capa de entidades solo un poco más grande que cuando los mosaicos dejarán de dibujarse. De esta manera puedo evitar tener ambas capas visibles al mismo tiempo.

Aunque estoy usando mosaicos para mostrar datos en escalas más pequeñas en mi mapa, todavía puedo habilitar la ventana emergente en mi capa de mosaico. De esta manera, los mosaicos siguen siendo completamente interactivos con la ventana emergente que muestra información de la capa de entidades de origen donde se configuró.

Con mi WebMap publicado y listo para su visualización, puedo consumir rápidamente ese WebMap en la API de ArcGIS para JavaScript usando la identificación del elemento.

const map = new WebMap({
  portalItem: {
    id: "5c7bffd977d34ed0a4e8d60f9b6a5b91"
  }
});

¡Puedes ver este mapa web de 2.3 millones de funciones en acción en la siguiente demostración!

Brecha, paso, muesca o saddle

Resumen
Ver millones de funciones en una aplicación de mapeo web requiere un poco de planificación. No puede simplemente crear una capa de entidades o mosaicos vectoriales y cruzar los dedos. ¡Pero mezcle algunos azulejos ráster y ya está cocinando! Un enfoque híbrido funciona muy bien en este escenario, y al usar las ventajas de los mosaicos ráster con la combinación de capas de características rápidas, puede crear un mapa para mostrar millones de características en sus aplicaciones de cartografía web.


SoftWhere Developer, blogger, autor, geodev y conocedor de lenguajes de programación y marcos de JavaScript. Hago un blog en http://odoe.net/blog y publico videos en https://www.youtube.com/c/renerubalcava. Me gusta escribir código, a veces incluso funciona.

Comentarios

Entradas más populares de este blog

Crea un mapa demográfico en 5 minutos

Agregar y usar fotos e imágenes en ArcGIS Online

Como GM planea y administra el riesgo de la cadena de suministro