Google maps api i OpenStreetMap
W artykule pokażę jak zintegrować mapę google maps z OpenStreetMap. W mapie google maps mamy do wyboru różne typy map np. hybrydowa, teren itp. Dodamy nowy
typ OpenStreetMap, aby był dostępny z rozwijanego menu (patrz rysunek). Efekt jaki uzyskamy - demo.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Google maps + Openstreet map - demo</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=pl&libraries=drawing"></script>
</head>
<body>
<div id="mapka" style="width:500px;height:350px;"><!-- miejsce na mapke --></div>
<script type="text/javascript">
//Skrypt generujacy mapke
var Lat = 51.7592485;//latitude
var Lon = 19.4559833;//longitude
var Zoom = 9;//zoom
var mapDiv = document.getElementById('mapka');
var latlng = new google.maps.LatLng(Lat, Lon);
var openstreet = new google.maps.ImageMapType({
getTileUrl: function (point, zoom) {
return "http://tile.openstreetmap.org/" + zoom + "/" + point.x + "/" + point.y + ".png";
},
tileSize: new google.maps.Size(256, 256),
name: "Open street",
maxZoom: 18
});
var options = {
center: latlng,
zoom: Zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
mapTypeControlOptions: {
mapTypeIds: [ google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.TERRAIN,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.HYBRID,
"OPEN_STREET"],
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
}
};
var mapa = new google.maps.Map(mapDiv, options);
mapa.mapTypes.set("OPEN_STREET", openstreet);
</script>
</body>
</html>
Omówię teraz jego najważniejsze elementy. Mapa będzie wyświetlana w divie o id mapka. W skrypcie definiujemy przydatne zmienne: lat, lon środka mapy oraz zoom. Łapiemy ponadto
w zmiennej mapDiv odpowiedni div, gdzie ma być wyświetlana mapa oraz tworzymy zmienną latlng, pod którą zapisujemy odpowiedni obiekt LatLng. Najważniejszą częścią jest
stworzenie nowego typu mapy dla Openstreet.
var openstreet = new google.maps.ImageMapType({
getTileUrl: function (point, zoom) {
return "http://tile.openstreetmap.org/" + zoom + "/" + point.x + "/" + point.y + ".png";
},
tileSize: new google.maps.Size(256, 256),
name: "Open street",
maxZoom: 18
});
Na koniec definiujemy opcje mapy uwzględniając w opcjach kontroli nasz nowy typ. Dodajemy mapę przekazując jej parametry mapDiv i options oraz ustawiamy aby pod indeksem OPEN_STREET
była mapa OpenStreet (mapa.mapTypes.set("OPEN_STREET", openstreet)).
var options = {
center: latlng,
zoom: Zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
mapTypeControlOptions: {
mapTypeIds: [ google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.TERRAIN,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.HYBRID,
"OPEN_STREET"],
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
}
};
var mapa = new google.maps.Map(mapDiv, options);
mapa.mapTypes.set("OPEN_STREET", openstreet);
Demo Google maps api + OpenStreetMap
