API de Google Maps: ¿incoherencia de GClientGeocoder con el método getLatLng?

StackOverflow https://stackoverflow.com/questions/408444

  •  03-07-2019
  •  | 
  •  

Pregunta

Me he dado cuenta de que mi geocodificador no es coherente en el código que se muestra a continuación porque antes de " getLatLng " el método se llama muestro 10 ubicaciones válidas, pero después de esta línea de código, la cantidad de puntos que realmente aparecen es diferente cada vez que busco (los mismos criterios de búsqueda - fyi) Entre 5 y 10 al azar ... muy extraño

¿Alguien tiene problemas similares a esto? Si es así, ¿cómo los resolviste?

geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
if (point) {
        var icon = new GIcon();
        var marker = new GMarker(point, { icon: icon });
        GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
        map.addOverlay(marker);
¿Fue útil?

Solución 4

En realidad, descubrí que no era la " dirección de verificación " código que estaba causando esta inconsistencia, pero en vez de eso, solo el hecho de que la API de mapas no quería una tonelada de llamadas de geocodificador, así que agregué un simple tiempo de espera de 225 ms entre cada solicitud y esto hizo el truco

function preGeoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus) {
        addPreCount();

        //don't change this timeout as it was the lowest timeout that still worked w/ the api
        var timeout = parseInt(precount) * 225;

        window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
    }

Otros consejos

He visto esto en mi aplicación ASP.NET. Mi problema fue que estaba validando las direcciones antes de mostrarlas y

  1. Algunas de mis direcciones eran incorrectas.

  2. Su sistema de validación de direcciones solo puede manejar una cierta cantidad de solicitudes en cada llamada de un cliente.

Es mejor limpiar las direcciones antes de la geocodificación (IMO).

Intente verificar sus direcciones y también intente limitar la cantidad de direcciones que envía solo para probar y ver si eso es consecutivo para cada solicitud.

Espero que ayude.

Inténtalo de esta manera, así obtuve más de 34 puntos con una carrera:

function addAddress(address,runde) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        if (runde<5) { // rekursiv, try adress 5 times to get
            window.setTimeout(function() {addAddress(address,runde+1);}, 1000); // wait 1 second bevor next try
            }
      } else {
        var marker_add = new GMarker(point);
        //alert(marker.getLatLng());
        leftClick(0, marker_add.getLatLng()); // function, add marker to map
      }
    }
  );
}  

No estoy seguro de lo que hace addPreCount () . Pero creo que es obvio que el tiempo de espera debería ser algo así como un índice multiplicado por la constante de tiempo de espera real.

Asumiendo que la constante de tiempo de espera definida es 225. El tiempo de espera que se pasará a la envoltura del geocodificador sería:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top