Renderiza millones de funciones en tus mapas
Renderiza millones de funciones en tus mapas
Por Rene
Rubalcava
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.
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!
Lo siguiente que puedo hacer es configurar mi ventana
emergente. Solo voy a mostrar el nombre del lugar, con el condado y el estado.
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.
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!
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.
SOBRE RENE
RUBALCAVA
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
Publicar un comentario