Google Maps API - несоответствие GClientGeocoder с использованием метода getLatLng?
-
03-07-2019 - |
Вопрос
Я заметил, что мой геокодер непоследователен в коде, показанном ниже, потому что перед вызовом метода "getLatLng" я показываю 10 допустимых местоположений, но после этой строки кода количество точек, которые на самом деле отображаются, отличается каждый раз, когда я выполняю поиск (одинаковые критерии поиска - к вашему сведению) От 5 до 10 случайным образом..очень странный
У кого-нибудь есть проблемы, подобные этой?Если да, то как вы их решали?
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);
Решение 4
На самом деле я обнаружил, что причиной этого несоответствия был не код "verify address", а просто тот факт, что maps api не требовал тонны вызовов геокодера, поэтому я добавил простой тайм-аут в 225 мс между каждым запросом, и это сделало свое дело
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);
}
Другие советы
Я видел это в своем приложении ASP.NET.Моя проблема заключалась в том, что я проверял адреса перед их отображением и
Некоторые из моих адресов были неверными.
Их система проверки адресов может обрабатывать только определенное количество запросов при каждом вызове клиента.
Лучше очистить адреса перед геокодированием (IMO).
Попробуйте подтвердить свои адреса, а также попробуйте ограничить количество адресов, которые вы отправляете, просто чтобы проверить и посмотреть, является ли это последовательным для каждого запроса.
Надеюсь, это поможет.
Попробуйте вот так, вот так я набираю более 34 очков за один заход.:
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
}
}
);
}
Я не уверен, что addPreCount()
делает.Но я думаю, очевидно, что тайм-аут должен быть чем-то вроде индекса, умноженного на фактическую константу тайм-аута.
Итак, предполагая, что определенная константа тайм-аута равна 225.Тайм-аут, который должен быть передан оболочке геокодера, будет равен:
var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);