1 votos

Mostrar grupos de coordenadas en un mapa, para encontrar visualmente las coordenadas que pertenecen a un grupo erróneo.

Tengo una lista (muy) larga de casinos. Cada casino tiene:

  • latitude
  • longitude
  • boss (un solo jefe va de 1 a 50 casinos)

Muestra:

40.642 -73.997 Freddy Queens
40.680 -73.985 Freddy Queens
40.697 -73.949 Freddy Queens
40.651 -73.968 Freddy Queens
40.772 -73.981 Manhattan Michael
40.813 -73.939 Manhattan Michael
40.755 -74.000 Manhattan Michael
40.781 -73.964 Manhattan Michael
40.721 -74.062 Nicole Je. Polizzi
40.750 -74.042 Nicole Je. Polizzi
40.694 -74.090 Nicole Je. Polizzi
[... 70,000 casinos for 27,000 bosses ...]

A partir de estos datos quiero generar un mapa como este:

map

Lo ideal es un color aleatorio por boss . En mi mundo se supone que los casinos de cada jefe no se "solapan" demasiado con otros boss es, por lo que mi objetivo final es utilizar este mapa para encontrar anomalías (casinos que deben ser transferidos a un diferente boss porque están claramente en ese boss ' "territorio"). Los "territorios" del jefe no coinciden con ninguna subdivisión geográfica oficial, por lo que el mismo problema podría plantearse en Marte (aunque el fondo del mapa de la Tierra estaría bien).

¿Existe alguna aplicación web a la que pueda introducir estos datos (CSV) y que muestre este tipo de mapa? Puede tener un aspecto diferente, por ejemplo, las zonas monocromas también estarían bien, siempre que pueda utilizarse para detectar anomalías. Lo mejor sería una aplicación web, ya que muchas personas analfabetas en SIG necesitan consultarlo rápidamente de vez en cuando.


He intentado geojson.io pero no puede colorear puntos, todos los puntos aparecen iguales.

He intentado Mapbox pero no parece admitir metadatos (como boss ), y menos aún modificar el estilo de un marcador basándose en esos metadatos.

2voto

Utilizando turf.js con Folleto deberías poder crear el mapa web que describes. Vea este ejemplo:

http://jsfiddle.net/nathansnider/rzyvudkb/

Utilicé un conversor en línea para crear un objeto GeoJSON a partir de sus datos. Los nombres de los jefes se conservan en las propiedades GeoJSON, por lo que se pueden utilizar para filtrar los casinos. El método que estoy utilizando aquí también se basa en una matriz separada que contiene sólo los nombres de los jefes, que acabo de hacer a mano para este ejemplo de datos.

Iterando sobre la lista de jefes, turf.js hace todo el trabajo duro. El turf.filter extrae los casinos de cada jefe, y la función turf.convex crea los cascos convexos:

for (var i in bosses) {
    //create random color
    var bosscolor = '#' + ('000000' + Math.floor(Math.random() * 16777215).toString(16)).slice(-6);
    //filter casinos by boss
    var bossowned = turf.filter(casinos, "boss", bosses[i]);
    //create Leaflet layer for casinos run by this boss
    L.geoJson(bossowned, {
        pointToLayer: function (feature, latlng) {
            return L.circleMarker(latlng, {
                color: bosscolor,
                radius: 5,
                fillOpacity: 0.9
            });
        }
    }).addTo(map);
    //create convex hull of boss territory
    var hull = turf.convex(bossowned);
    //create Leaflet layer for convex hull
    L.geoJson(hull, {
        color: bosscolor,
        opacity: 0.9, 
        fillOpacity: 0.7
    }).bindPopup(bosses[i]).addTo(map);
}

Dependiendo de cuántos casinos haya en su "(muy) larga lista", es posible que también tenga que utilizar algo como Folleto.markerCluster para reducir el número de puntos que se muestran. Leaflet puede volverse un poco lento después de añadir unos 10.000 puntos al mapa.

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