Получить ссылку на маркер из функции geoJSON, добавленной с помощью API Data Layers
Я использую API Data Layers для добавления данных геоджона на карту.
Но проблема в том, что метод addGeoJson возвращает список функций, и я не могу найти метод интерфейса для получения ссылки на объект маркера, связанный с этой функцией.
Я не хочу создавать объекты Google Marker на лету, добавлять их на карту и удалять эту функцию. Это излишество.
Мне просто нужен правильный подход, прежде чем я отойду от слоев данных и вместо этого буду управлять своими собственными маркерами.
Спасибо,
Себ.
1 ответ
У меня есть и эта проблема. Я не мог найти много в API документации. Вам нужен объект Marker, а у вас его нет, у вас есть компоненты, потому что вы загрузили их на уровень данных.
Однако в документации InfoWindow говорится, что вы можете создать MVCObject с заданным положением. Я сделал это ниже в обработчике событий. Вам не нужно помещать его на карту, просто обработайте событие click, создав MVCObject и отправив его в конструктор infoWindow.
Пример:
function initialize(mapID) {
var myLatlng = new google.maps.LatLng(38.951644, -92.334127);
var mapOptions = {
zoom: 12,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById(mapID), mapOptions);
map.data.addGeoJson(realestate_js.geojson_results);
map.data.setStyle(function(feature){
// setStyle executes this function on each feature...
// each feature then receives the "google.maps.Data.StyleOptions" object
// which defines its icons and stuff.
// https://developers.google.com/maps/documentation/javascript/3.exp/reference#Data.StyleOptions
return {
'clickable':true,
'icon':feature.A.icon,
'title':feature.A.address1,
}
});
var fakeMarker = new google.maps.MVCObject();
var infoWindow = new google.maps.InfoWindow({
'content':"",
});
map.data.addListener('click', function(event){
fakeMarker.set('position', {'lat':event.latLng.A, 'lng':event.latLng.F});
var infoWindow = new google.maps.InfoWindow({
'content':"<h1>Info Window Content here</h1><p>omg this so text</p>" + ,
});
infoWindow.open(map, fakeMarker);
});
}