// google maps skript pro načtení pointů z XML zdroje
$(document).ready(function() {
preloadImages();
initializeGMaps();
});
function preloadImages() {
if (!document.images) {
return;
}
var image = null;
for (var key in icons) {
var icon = icons[key];
image = new Image(10, 10);
image.src = icon;
}
image = new Image(10, 10);
image.src = "/img/icon-close.gif";
}
// pole všech značek
var global_markers = new Array();
// pole ikonek
var icons = new Array();
// mapa
var map;
// hranice pro zobrazeni mapy
var bounds;
var infoWindow;
// vytvoříme typy značek
icons["type1"] = "/img/map/ico-devel.png";
icons["type2"] = "/img/map/ico-devel-disabled.png";
icons["sale"] = "/img/map/ico-sale.png";
icons["disabled"] = "/img/map/ico-disabled.png";
icons["cheap"] = "/img/icons/cheap-small.png";
icons["design"] = "/img/icons/design-small.png";
icons["ecology"] = "/img/icons/ecology-small.png";
icons["video"] = "/img/icons/video-small.png";
icons["dream"] = "/img/dream/pin-red.png";
// Inicializace mapy
function initializeGMaps() {
// určení DIVu, který obsahuje mapu
basePoint = new google.maps.LatLng(49.74799973900054, 15.38134765625);
var myOptions = {
zoom: 7,
center: basePoint,
panControl: true,
zoomControl: true,
zoomControlOptions : {
style: google.maps.ZoomControlStyle.LARGE
},
mapTypeControl: true,
scaleControl: true,
streetViewControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false
};
var mapDiv = document.getElementById("results-map-inner");
map = new google.maps.Map(mapDiv, myOptions);
// Overwrite the getMinimumResolution() and getMaximumResolution() methods
google.maps.event.addListener(map, "zoom_changed", function() {
if (map.getZoom() < 7) {
map.setZoom(7);
}
});
// vytvorime prazdny objekt pro definici hranic zobrazeni
bounds = new google.maps.LatLngBounds();
downloadMap("/hledani/json-export", mergeDownloads);
downloadMap("/hledani/json-export-dream", mergeDownloads);
// listener pro nahrani nemovitosti dle aktualniho vyrezu mapy
google.maps.event.addListener(map, "dragend", function() {
synchronizeMap();
if ( typeof updateElements == "function") {
updateElements();
}
});
google.maps.event.addListener(map, "zoomend", function() {
synchronizeMap();
if ( typeof updateElements == "function") {
updateElements();
}
});
}
var downloadCount = 0;
function mergeDownloads() {
downloadCount++;
if (downloadCount == 2) {
setBoundsByMarkers();
}
}
function synchronizeMap() {
var span = map.getBounds().toSpan();
var center = map.getBounds().getCenter();
var zoom = map.getZoom();
if (zoom >= 11) {
var url = "/hledani/synchronize?lat=" + center.lat() +
"&lng=" + center.lng() +
"&accuracy=" + span.lat()
;
downloadMap(url);
}
}
function downloadMap(url, callback) {
// build map icons from json
$.get(url, {}, function(data, responseCode) {
if (!data) {
return;
}
var s;
var points = data.points;
// for přes všechny body v XML souboru
for (var i = 0; i < points.length; i++) {
// pokud je jiz marker v poli, tak jej neni potreba pridavat
if (global_markers[points[i].id]) {
continue;
}
// souřadnice bodu
var point = new google.maps.LatLng(parseFloat(points[i].lng), parseFloat(points[i].lat));
// vytvoreni obsahu
s = createContent(points[i]);
// vytvoření značky
var marker_id = points[i].id;
if (!global_markers[marker_id]) {
var marker = createMarker(point, s, points[i].label, points[i].icon);
// přidání značky do globálního pole
global_markers[marker_id] = marker;
}
}
if (typeof callback == "function") {
callback();
}
}, "json");
}
function setBoundsByMarkers() {
//var innerHtml = "Vašemu vyhledávání neodpovídá žádná nabídka.
";
bounds = new google.maps.LatLngBounds();
if (global_markers.length == null) {
basePoint1 = new google.maps.LatLng(51.39372189194996, 12.579345703125);
basePoint2 = new google.maps.LatLng(48.050178768479675, 17.6220703125);
bounds.extend(basePoint1);
bounds.extend(basePoint2);
}
for (var key in global_markers) {
var marker = global_markers[key];
bounds.extend(marker.getPosition());
}
GM_setViewport(bounds, function() {
map.setZoom(map.getZoom() - 1);
}, 15);
}
/**
* Fixes API problems.
*
*/
function GM_setViewport(bounds, callback, maxZoom) {
var desiredSpan = bounds.toSpan();
map.fitBounds(bounds);
google.maps.event.addListenerOnce(map, "bounds_changed", function() {
//createMarker(bounds.getSouthWest(), "SW" + asdf, "SW" + asdf, "type1");
//createMarker(bounds.getNorthEast(), "NE" + asdf, "NE" + asdf, "type1");
var iter = 0;
//map.setZoom(map.getZoom() + 1);
// GM bugfix
while (true) {
if (map.getBounds() == null) {
break;
}
if (iter > 10) {
break;
}
var newSpan = map.getBounds().toSpan();
var errorLat = Math.round(Math.abs(newSpan.lat() / desiredSpan.lat()));
var errorLng = Math.round(Math.abs(newSpan.lng() / desiredSpan.lng()));
var error = Math.min(errorLat, errorLng);
//alert(errorLat + " vs " + errorLng + " => " + error);
if (error >= 2) { // too large
if (maxZoom && map.getZoom() >= maxZoom) {
break;
}
map.setZoom(map.getZoom() + 1); // zoom in
} else if (error == 0) {
map.setZoom(map.getZoom() - 1); // zoom out
} else {
break;
}
iter++;
}
if (maxZoom && map.getZoom() > maxZoom) {
map.setZoom(maxZoom);
}
if (typeof callback == "function") {
callback();
}
});
}
function infoClick(i) {
google.maps.event.trigger(global_markers[i], "click");
//map.setZoom(15);
}
function createContent(point) {
// html obsah informačního okna, které se zobrazi
s = "
| ";
if (point.paid > 0) {
s = s + "";
s = s + " | ";
}
s = s + "";
// test if url exists
if (point.paid > 0) {
s = s + "" + point.name + " "; } else { s = s + "" + point.name + " "; } s = s + point.label.replace(/2<\/sup>,/, '2, ') + " "; if (point.paid > 0) { s = s + "Detail projektu » "; } if (point.cheap > 0) { s = s + " |