Я пытаюсь добавить слой GeoJSON к Картам Google (v3), выполнив следующие действия:
imageActive = {
url: "images/target_red.png",
origin: new google.maps.Point(0,0),
anchor: new google.maps.Point(11, 11),
} // ACTIVE marker image
jQuery.getJSON('home/gcpts/geojson.php', function(data){
points = map.data.addGeoJson(data);
console.log(points); //this works
});
map.data.setStyle({
clickable: true,
draggable: false,
});
map.data.addListener('click', function(event){
setActiveImage(event);
})
function setActiveImage(event){
for(var i = 0;i<points.length;i++){ //can't read "length" of undefined
points[i].revertStyles();
}
map.data.overrideStyle(event.feature, {
icon: imageActive,
});
}
Однако, когда я пытаюсь перебирать переменную "точки", я не могу "видеть" ее. Я в основном получаю неопределенное значение, или если я пытаюсь назвать длину точек (points.length), то этого не существует.
Если я console.log (точки) в функции jQuery, то я могу увидеть все функции внутри переменной. Если я положу его снаружи, то я не смогу его увидеть. Есть ли что-то, что мне не хватает в области?
Это моя надежда, что я могу установить событие "click" и использовать event.feature для переопределенияStyle. Затем, когда нажимается другая функция, стиль удаляется из других функций geoJson и переопределяет вновь щелкнув функцию.
Кажется, что это должно работать нормально, но я не могу понять, как итерации через функции.
Благодарю!
(Кроме того, я использую jQuery в режиме "Без конфликтов"...)
Все ваши переменные глобально ограничены, потому что вы не используете ключевое слово var
. Похоже, что какой-то другой скрипт ищет переменную points
и перезаписывает вашу. Предполагая, что ваш код уже завершен в какую-то функцию (например, ready
обработчик jQuery), вы можете решить свою проблему, просто используя var
. Я бы добавил эту строку кода, прежде чем вы вызываете getJSON()
:
var points = [];
В предыдущем ответе было указано, что вам нужно, чтобы ваша переменная "точки" была скопирована соответствующим образом, но лучший ответ заключается в том, что вам вообще не нужна эта переменная: поскольку вы используете map.data, вы можете просто использовать это непосредственно для доступа к вашим функциям, используя что-то вроде:
map.data.foreEch(function(feature) {console.log(feature);})
Обратите внимание, конечно, ваша переменная "map" должна иметь соответствующую область действия.
Кроме того, вам также не нужно использовать jQuery - вы можете просто загружать данные, используя map.data.loadGeoJson(theUrl)
который будет делать ajax для вас
points
. Вы опубликовали достаточно кода, чтобы увидеть проблему?