API Карт Google - проблема области действия Map.data

0

Я пытаюсь добавить слой 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 в режиме "Без конфликтов"...)

  • 0
    Я не вижу кода, который пытается перебирать points . Вы опубликовали достаточно кода, чтобы увидеть проблему?
  • 0
    @gilly3: gilly3: Спасибо за поиск. Сейчас я в основном заинтересован в том, чтобы «увидеть» или вызвать точки из-за пределов функции jQuery. Я могу добавить больше JS, если это необходимо. Я просто подумал, что могу неправильно обрабатывать map.data и не могу найти причину в документации.
Теги:
google-maps
google-maps-api-3
geojson

2 ответа

1
Лучший ответ

Все ваши переменные глобально ограничены, потому что вы не используете ключевое слово var. Похоже, что какой-то другой скрипт ищет переменную points и перезаписывает вашу. Предполагая, что ваш код уже завершен в какую-то функцию (например, ready обработчик jQuery), вы можете решить свою проблему, просто используя var. Я бы добавил эту строку кода, прежде чем вы вызываете getJSON():

var points = [];
  • 0
    Ого ... это должно было быть очевидно очевидно. Спасибо!
0

В предыдущем ответе было указано, что вам нужно, чтобы ваша переменная "точки" была скопирована соответствующим образом, но лучший ответ заключается в том, что вам вообще не нужна эта переменная: поскольку вы используете map.data, вы можете просто использовать это непосредственно для доступа к вашим функциям, используя что-то вроде:

map.data.foreEch(function(feature) {console.log(feature);})

Обратите внимание, конечно, ваша переменная "map" должна иметь соответствующую область действия.

Кроме того, вам также не нужно использовать jQuery - вы можете просто загружать данные, используя map.data.loadGeoJson(theUrl) который будет делать ajax для вас

Ещё вопросы

Сообщество Overcoder
Наверх
Меню