Mam problem z Api google maps.
Generalnie wszystko działa ... jak zwykle prawie:)
Zasada prosta ... mapa pobiera miejsca w okolicy- nearbySearch
Wyniki wyświetlane na mapie i w liście z boku.
Kliknięcie w marker lub wynik na liście pokazuje szczegóły miejsca- standard i tu pojawia się "ale"
Wyniki pojawiają się z paginacją, po 20 szt. Dodanie drugiej 20 powoduje, że wybrane miejsce na liście z pierwszej dwudziestki pokazuje błędne informacje.
To co wyżej można zobaczyć tutaj:
http://beta.targi-polska.pl/lok?type=1&...;long=19.993294
Kod js:
Kod
var map, service, placeList;
var infowindow;
var hostnameRegexp = new RegExp('^https?://.+?/');
var markers = [];
var MARKER_PATH = 'http://www.targi-polska.pl/img/lodging_0star.png';
function initialize(lat,lon) {
var pyrmont = new google.maps.LatLng(lat, lon);
map = new google.maps.Map(document.getElementById('map-canvas'), {
center: pyrmont,
zoom: 12
});
var request = {
location: pyrmont,
radius: '10000',
types: ['lodging']
};
infowindow = new google.maps.InfoWindow({content: document.getElementById('info-content')});
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status, pagination) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var markerIcon = MARKER_PATH;
markers[i] = new google.maps.Marker({
position: results[i].geometry.location,
animation: google.maps.Animation.DROP,
icon: markerIcon
});
markers[i].placeResult = results[i];
google.maps.event.addListener(markers[i], 'click', okno);
createMarker(results[i],i);
markers[i].setMap(map);
}
if (pagination.hasNextPage) {
var moreButton = document.getElementById('moreButton');
moreButton.disabled = false;
google.maps.event.addDomListenerOnce(moreButton, 'click',
function() {
moreButton.disabled = true;
pagination.nextPage();
});
}
}
}
var liczMiejsca=0;
function createMarker(place,i) {
liczMiejsca++;
$('#ileMiejsc span.ile').html(liczMiejsca);
var markerIcon = MARKER_PATH;
var results = document.getElementById('resultLocation');
var tr = document.createElement('li');
tr.style.backgroundColor = (i % 2 == 0 ? '#F0F0F0' : '#FFFFFF');
tr.onclick = function() {
google.maps.event.trigger(markers[i], 'click');
};
var name = document.createTextNode(place.name);
tr.appendChild(name);
results.appendChild(tr);
}
function okno()
{
var marker = this;
console.log(marker);
service.getDetails({placeId: marker.placeResult.place_id},
function(place, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
return;
}
infowindow.open(map, marker);
$('#info-content').css('display','block');
buildIWContent(place);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
function buildIWContent(place) {
document.getElementById('iw-icon').innerHTML = '<img class="hotelIcon" ' +
'src="' + place.icon + '"/>';
document.getElementById('iw-url').innerHTML = '<b><a href="' + place.url +
'">' + place.name + '</a></b>';
document.getElementById('iw-address').textContent = place.vicinity;
if (place.formatted_phone_number) {
document.getElementById('iw-phone-row').style.display = '';
document.getElementById('iw-phone').textContent =
place.formatted_phone_number;
} else {
document.getElementById('iw-phone-row').style.display = 'none';
}
if (place.rating) {
var ratingHtml = '';
for (var i = 0; i < 5; i++) {
if (place.rating < (i + 0.5)) {
ratingHtml += '✩';
} else {
ratingHtml += '✭';
}
document.getElementById('iw-rating-row').style.display = '';
document.getElementById('iw-rating').innerHTML = ratingHtml;
}
} else {
document.getElementById('iw-rating-row').style.display = 'none';
}
if (place.website) {
var fullUrl = place.website;
var website = hostnameRegexp.exec(place.website);
if (website == null) {
website = 'http://' + place.website + '/';
fullUrl = website;
}
document.getElementById('iw-website-row').style.display = '';
document.getElementById('iw-website').textContent = website;
} else {
document.getElementById('iw-website-row').style.display = 'none';
}
}
function calcRoute(cel) {
//var ladowanie = document.getElementById("ladowanie_mapy");
//ladowanie.style.display='block';
console.log(cel);
var selectedMode = 'DRIVING';
var request = {
origin: service.getPosition(),
destination: cel,
travelMode: google.maps.DirectionsTravelMode[selectedMode]
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
//ladowanie.style.display='none';
//okno.close(map);
directionsDisplay.setDirections(response);
}
});
service.setMap(null);
}
jQuery(document).ready(function() {
$('.showList').click(function(){
$('#resultLocation').slideToggle("fast");
});
});
var infowindow;
var hostnameRegexp = new RegExp('^https?://.+?/');
var markers = [];
var MARKER_PATH = 'http://www.targi-polska.pl/img/lodging_0star.png';
function initialize(lat,lon) {
var pyrmont = new google.maps.LatLng(lat, lon);
map = new google.maps.Map(document.getElementById('map-canvas'), {
center: pyrmont,
zoom: 12
});
var request = {
location: pyrmont,
radius: '10000',
types: ['lodging']
};
infowindow = new google.maps.InfoWindow({content: document.getElementById('info-content')});
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status, pagination) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var markerIcon = MARKER_PATH;
markers[i] = new google.maps.Marker({
position: results[i].geometry.location,
animation: google.maps.Animation.DROP,
icon: markerIcon
});
markers[i].placeResult = results[i];
google.maps.event.addListener(markers[i], 'click', okno);
createMarker(results[i],i);
markers[i].setMap(map);
}
if (pagination.hasNextPage) {
var moreButton = document.getElementById('moreButton');
moreButton.disabled = false;
google.maps.event.addDomListenerOnce(moreButton, 'click',
function() {
moreButton.disabled = true;
pagination.nextPage();
});
}
}
}
var liczMiejsca=0;
function createMarker(place,i) {
liczMiejsca++;
$('#ileMiejsc span.ile').html(liczMiejsca);
var markerIcon = MARKER_PATH;
var results = document.getElementById('resultLocation');
var tr = document.createElement('li');
tr.style.backgroundColor = (i % 2 == 0 ? '#F0F0F0' : '#FFFFFF');
tr.onclick = function() {
google.maps.event.trigger(markers[i], 'click');
};
var name = document.createTextNode(place.name);
tr.appendChild(name);
results.appendChild(tr);
}
function okno()
{
var marker = this;
console.log(marker);
service.getDetails({placeId: marker.placeResult.place_id},
function(place, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
return;
}
infowindow.open(map, marker);
$('#info-content').css('display','block');
buildIWContent(place);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
function buildIWContent(place) {
document.getElementById('iw-icon').innerHTML = '<img class="hotelIcon" ' +
'src="' + place.icon + '"/>';
document.getElementById('iw-url').innerHTML = '<b><a href="' + place.url +
'">' + place.name + '</a></b>';
document.getElementById('iw-address').textContent = place.vicinity;
if (place.formatted_phone_number) {
document.getElementById('iw-phone-row').style.display = '';
document.getElementById('iw-phone').textContent =
place.formatted_phone_number;
} else {
document.getElementById('iw-phone-row').style.display = 'none';
}
if (place.rating) {
var ratingHtml = '';
for (var i = 0; i < 5; i++) {
if (place.rating < (i + 0.5)) {
ratingHtml += '✩';
} else {
ratingHtml += '✭';
}
document.getElementById('iw-rating-row').style.display = '';
document.getElementById('iw-rating').innerHTML = ratingHtml;
}
} else {
document.getElementById('iw-rating-row').style.display = 'none';
}
if (place.website) {
var fullUrl = place.website;
var website = hostnameRegexp.exec(place.website);
if (website == null) {
website = 'http://' + place.website + '/';
fullUrl = website;
}
document.getElementById('iw-website-row').style.display = '';
document.getElementById('iw-website').textContent = website;
} else {
document.getElementById('iw-website-row').style.display = 'none';
}
}
function calcRoute(cel) {
//var ladowanie = document.getElementById("ladowanie_mapy");
//ladowanie.style.display='block';
console.log(cel);
var selectedMode = 'DRIVING';
var request = {
origin: service.getPosition(),
destination: cel,
travelMode: google.maps.DirectionsTravelMode[selectedMode]
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
//ladowanie.style.display='none';
//okno.close(map);
directionsDisplay.setDirections(response);
}
});
service.setMap(null);
}
jQuery(document).ready(function() {
$('.showList').click(function(){
$('#resultLocation').slideToggle("fast");
});
});
Nikt nie może pomóc? jakieś sugestie??