Primeros pasos con GeoJSON, Couchbase, .NET y Google Maps

Este es un artículo escrito por Calvin Allen. Calvin es un desarrollador .NET en Columbus, OH que disfruta diseñando software que no sólo resuelve problemas de negocio, sino que es fácil de usar, dentro del presupuesto y a tiempo. Si no está diseñando software, está aprendiendo cómo ser un mejor desarrollador de software. Esto no es sólo una carrera para él - es también un estilo de vida.

¿Qué es GeoJSON? GeoJSON.org lo define como:
"GeoJSON es un formato para codificar una variedad de estructuras de datos geográficos"

Pero, ¿qué significa realmente? Básicamente, se trata de un formato estándar que utiliza la estructura JSON para definir objetos geográficos. Estos "objetos geográficos" pueden ser varios, desde un simple "punto" hasta un objeto más complejo, como un "polígono".

He aquí un sencillo ejemplo de "punto en el mapa" para las "Islas Dinagat":

Ahora que ya conoces todos los antecedentes, te estarás preguntando: "¿Por qué necesito GeoJSON?". La respuesta sencilla es que se trata de un estándar actualmente admitido en diversas tecnologías cartográficas, como Google Maps. Con tus datos ya en formato GeoJSON, puedes proporcionar esos datos directamente a Google Maps, y renderiza tu objeto como se describe. No sólo te ahorra tener que "rodar tu propio" formato, sino que otros proveedores ya lo soportan, lo que puedes aprovechar como desees.

Manos a la obra.

Voy a demostrar el formato GeoJSON utilizando una aplicación .NET MVC, Couchbase (Community) Server (y el SDK .NET), y Google Maps - voy a tener que asumir que tienes algún conocimiento práctico de todas estas utilidades.

No voy a entrar en detalles sobre cómo crear el proyecto MVC, o la instalación / configuración de Couchbase, ya que hay un montón de otros tutoriales / artículos por ahí que describen cómo lograr estos elementos, especialmente en Matthew Groves Blog de Couchbase.
Una cosa que mencionaré ahora, es que he llamado al bucket de Couchbase "features", y lo he precargado (todo a través de la Consola de Couchbase) con dos documentos - uno para un polígono alrededor de Roma, y otro con un punto sobre las Islas Dinagat (como se ve arriba). Ambos archivos json se pueden encontrar en el repositorio de github al que enlazaré más adelante en el artículo.

Con el nuevo sitio web MVC cargado en Visual Studio, abre la consola del gestor de paquetes NuGet y escribe el siguiente comando para cargar el SDK .NET de Couchbase:

Una vez que el SDK .NET de Couchbase haya terminado de instalarse, ejecute el siguiente comando para instalar la biblioteca geojson:

El primer paquete, "couchbasenetclient", se utilizará para comunicarnos con nuestro servidor local Couchbase para gestionar nuestros documentos GeoJSON. Se trata de una librería creada / soportada por el equipo de Couchbase. La siguiente, "geojson.net", es una librería de ayuda para crear / leer documentos GeoJSON. Bajo el capó, la biblioteca geojson.net utiliza JSON.Net para la serialización / deserialización json de los tipos .NET que la biblioteca nos proporciona. Podrías prescindir de este paquete/biblioteca y gestionar los tipos tú mismo, pero para simplificar las cosas, he decidido utilizarlo.

Lo primero que tenemos que hacer es cablear nuestro controlador. Voy a reutilizar el "HomeController" que ya existe en el proyecto.

En primer lugar, voy a añadir un constructor, que vamos a utilizar para almacenar nuestro cubo:

Ahora, voy a necesitar tres puntos finales -

  1. Uno para obtener una lista de todas las características
  2. Uno que actuará como un simple enrutamiento a la página del mapa (verás a lo que me refiero)
  3. Y, por último, una a la que la API de Google Maps realizará una llamada directa para obtener el JSON de la función.

Aquí están los tres:

Primero - es la acción que devuelve la lista completa de características en mi cubo Couchbase. Se trata de una simple consulta N1QL para obtener los ID de las características como una lista de cadenas. (Sólo me importa el ID de la característica en la página de la lista)

Este es el método de enrutamiento simple que utilizo mientras navego desde la página de la lista para mantener el ID de la característica solicitada en la que el usuario hizo clic.

Y, por último, este método se llama a través de la API de Google Maps en la página MapFeature para obtener el JSON de la característica que el usuario desea mapear (de nuevo, utilizando el objeto FeatureCollection de la biblioteca geojson.net - esto utiliza Json.Net para serializar ese objeto, que viene con sus propios serializadores en la biblioteca también).

Pasemos ahora a las páginas de visualización propiamente dichas (sólo hay dos)

En la página "Características", que no es más que un listado de las características de nuestro bucket de Couchbase, simplemente mostramos cada uno de los ID de las características en un enlace de acción dentro de una lista desordenada:

La última página, MapFeature, es la que hace el "trabajo pesado":


$(function () {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 6
});

map.data.loadGeoJson('/Home/GetFeatureJson/@id');

//la llamada de retorno para cada una de las características en el bucle - la última gana
function forEachGeometry(feature) {
feature.getGeometry().forEachLatLng(resetCenter);
};

//toma la Latituta y la Longitud de cada Geometría y restablece el punto central en el mapa - el último gana - totalmente ineficiente
function resetCenter(latLng) {
map.setCenter(latLng);
};

//cada vez que se añada una característica al mapa, repasa la colección - completamente ineficiente, pero debería proporcionar una idea
map.data.addListener('addfeature', function (e) {
map.data.forEach(forEachGeometry);
});

});

https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY

Cuando se carga esta página, obtenemos el ID de la función en la que ha hecho clic el usuario (almacenado en ViewBag) y, a continuación, pasamos directamente a nuestro marcado HTML. Te darás cuenta de los dos divs, que son marcadores de posición (especialmente el interior), que la API de Google Maps utilizará para mostrar el mapa / características.

Luego nos metemos en el Javascript - la mayor parte de esto es bastante básico, y directamente de los documentos que proporciona Google...excepto por los pocos métodos que agregué, que veremos.

Lo primero que hacemos es 'new up' nuestro objeto mapa, y le decimos qué elemento DOM utilizar, y cuál será el nivel de zoom por defecto. A continuación, puedes ver que estamos utilizando un método incorporado de Google Maps, loadGeoJson, que toma nuestra URL local para agarrar el JSON de nuestro cubo Couchbase.

Los siguientes métodos son rápidas bolt-on que he añadido por el bien de la demo, que no están destinados a ser utilizados en un entorno de producción, ya que son muy ineficientes. Restablecen el centro del mapa al último objeto Latitud/Longitud que encontramos en los datos que cargamos en el mapa. No es una lógica precisa, pero "centrará" el mapa sobre cualquier característica que estemos renderizando.

Lo último que hacemos es cargar la API de Google Maps desde su CDN.

Este es un ejemplo muy simple de almacenar/consultar datos GeoJSON desde una instancia de Couchbase, y cargarlos en un producto de mapas. Y, aunque he elegido Google Maps, otros proveedores, como MapBox, también soportan GeoJSON.

Y, por último, si necesita ver el ejemplo en su totalidad, consulta el código en github. Simplemente tendrás que modificar la página MapFeature.cshtml para incluir tu propia clave de API de Google Maps (visita https://developers.google.com/maps/documentation/javascript/Inicia sesión con tu cuenta de Google y haz clic en el botón "Obtener una clave" de la parte superior derecha. No dudes en escribirme si tienes más preguntas: estoy en Twitter como CalvinAllen_o visite mi blog personal en https://www.calvinallen.net.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.