21 votos

¿Cómo geocodificar 300.000 direcciones sobre la marcha?

Tengo una base de datos con 300.000 direcciones que deben aparecer en un mapa. Sé que si geocodifico todas las direcciones me resultará demasiado caro. Así que me preguntaba si es posible geo-codificar la dirección sobre la marcha / en tiempo real, cuando un usuario seleccionaría una dirección (una dirección de la propiedad) que buscaría a través de la base de datos y luego geo-codificar la dirección y luego asignarlo con otros atributos.

Estaría muy bien si pudieras compartir un código, concepto o lo que sea. Por cierto mi backend está en mysql apoyado por Joomla.

1voto

St. John Johnson Puntos 123

Quizá no sea la mejor respuesta a tu pregunta, pero puedes probar con BatchGeo. La versión gratuita te haría sufrir mucho, pero aún así era lo suficientemente bueno para mi trabajo. Sin embargo, hemos comprado la versión pro.

El truco para obtener coordenadas a partir de un archivo KML es importarlo posteriormente a ArcGIS.

0voto

user52487 Puntos 18

Matej, Eso es porque la API de Google permite extraer hasta 2.5k por día.
Acerca de la solución Geo, lote aún no se encuentra para ser apoyado eso es porque de mi revisión del código python geo parece abrir la conexión cada vez que solicita una nueva coordenada, 300k probablemente atascado para siempre (probablemente con el error 400).
Jugar con Poligons debería funcionar, pero depende de cuál sea tu zona de juego, si es un país o varios.
Para 1 país los polígonos deberían funcionar bastante bien.
Para n países la solución no funcionará, ya que la recogida tardará más tiempo cada vez que añada otro país. La mejor forma de hacerlo es con lazy load.
\=> empieza con la idea del polígono, cada cosa en otro país , crea una gran tabla de base de datos para guardar los datos, con el tiempo tendrás los datos que necesites supongo.

0voto

Buckers Puntos 121

Si quieres hacerlo con PHP - MySQL aquí tienes una solución que me funcionó:

<script type="text/javascript" charset="utf-8">

    var customIcons = {
      restaurant: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
      },
      bar: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
      },
      club:
      {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      },
      church:
      {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      }
    };

      function initialize() 
      {
        var mapOptions = {
          center: new google.maps.LatLng(37.976178, 23.735881),
          zoom: 7,
          mapTypeId: google.maps.MapTypeId.roadmap
        };
        var map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
        <?php header("content-type: text/html;charset=utf-8");
        $getpoints = "SELECT lat, lng, name, address, type FROM markers";
        $getpoints .= $filter;

        if(!$result = $con->query($getpoints)){
        die('There was an error running the query 
        [' . $con->error . ']');
        }

        else 
        {
            while ($row = $result->fetch_assoc()) 
            {
                $thematic = "'$row[type]'";
                $name = "'$row[name]'";
                $map_address = "$row[address]";

                $url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($map_address);
                $lat_long = get_object_vars(json_decode(file_get_contents($url)));

                // pick out what we need (lat,lng)
                $lat_long = $lat_long['results'][0]->geometry->location->lat . "," . $lat_long['results'][0]->geometry->location->lng;

                echo "var myLatlng1 = new google.maps.LatLng($lat_long); 
                var icon = customIcons[$thematic] || {};
                var marker1 = new google.maps.Marker({ 
                position: myLatlng1, 
                map: map,
                icon: icon.icon,
                title: '$map_address'
                });";           
            }
        }       

        ?>    
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

0voto

Matt Samuel Puntos 138

Prueba esto api de geocodificación . Es gratis para pequeños usos pero si quieres más te hacen pagar. Sin embargo, es barato y podrías procesar esa cantidad fácilmente, yo proceso millones al mes a través de ellos.

0voto

steve oligot Puntos 1

Utilice las herramientas de Mappointing ( Map pointing | Batch Geocoding Tool ( http://www.mappointing.com/ ) ) En esta herramienta se pueden procesar los datos utilizando la clave API gratuita de Google Maps. Y también esta herramienta está proporcionando cálculo de la distancia & herramienta de búsqueda de lugar.

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