В этой заметке я хочу показать Вам, как можно осуществить синхронизацию двух карт, используя API Google Maps v3.
В начале мы создаем одну карту с элементами управления.
Пишем следующий код:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> <meta name="title" content="Синхронизация двух карт Google Maps" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> function initialize() { var options = { zoom: 12, center: new google.maps.LatLng(56.316537,43.998779), scrollwheel: false, scaleControl: true, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU} } var map1 = new google.maps.Map(document.getElementById("map_canvas1"), options); map1.setMapTypeId(google.maps.MapTypeId.ROADMAP); } </script> <style type="text/css"> #map_canvas1{width: 500px; height: 400px;} </style> </head> <body onload="initialize()"> <div id="map_canvas1" ></div> </body> </html> |
В этом коде мы задаем параметры карты map1: начальный уровень масштаба 12, координаты центра карты, отменяем возможность изменения уровня масштаба колесиком прокрутки мыши, размещаем на карте стандартный элемент управления масштабом, а также переключатель типа карты в виде выпадающего списка.
Область для карты map_canvas1.
Добавляем вторую карту — map2, с теми же параметрами, но тип карты устанавливаем SATELLITE — спутник.
Область для карты map_canvas2
Для осуществления синхронизации карт при изменении масштаба или панорамировании, необходимо добавить еще две строчки
map1.bindTo('center', map2, 'center'); map1.bindTo('zoom', map2, 'zoom'); |
Окончательный код примера:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> <meta name="title" content="Синхронизация двух карт Google Maps" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> function initialize() { var options = { zoom: 12, center: new google.maps.LatLng(56.316537,43.998779), scrollwheel: false, scaleControl: true, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU} } var map1 = new google.maps.Map(document.getElementById("map_canvas1"), options); map1.setMapTypeId(google.maps.MapTypeId.ROADMAP); var map2 = new google.maps.Map(document.getElementById("map_canvas2"), options); map2.setMapTypeId(google.maps.MapTypeId.SATELLITE); map1.bindTo('center', map2, 'center'); map1.bindTo('zoom', map2, 'zoom'); } </script> <style type="text/css"> #map_canvas1{width: 500px; height: 400px;} #map_canvas2{width: 500px; height: 400px;} </style> </head> <body onload="initialize()"> <div id="map_canvas1" ></div> <br /> <div id="map_canvas2" ></div> </body> </html> |
Мы также можем синхронизировать карту Google Maps с картой OpenStreetMap, отображаемой с помощью API Google Maps v3.
Смотрите код в заметке «Знакомство с проектом OpenStreetMap».
Отличие от кода первого примера, синхронизации двух карт Google Maps, это определение нового типа карты osm.
Код примера для синхронизации Google Maps с картой OpenStreetMap:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title></title> <meta name="title" content="Синхронизация двух карт Google Maps и OpenStreetMap" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> function initialize() { var options = { zoom: 12, center: new google.maps.LatLng(56.316537,43.998779), scrollwheel: false, scaleControl: true, mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU} } var map1 = new google.maps.Map(document.getElementById("map_canvas1"), options); map1.setMapTypeId(google.maps.MapTypeId.ROADMAP); var map2 = new google.maps.Map(document.getElementById("map_canvas2"), options); map2.setMapTypeId(google.maps.MapTypeId.SATELLITE); // Задаем слой с OSM var openStreet = new google.maps.ImageMapType({ getTileUrl: function(ll, z) { var X = ll.x % (1 << z); // wrap return "http://tile.openstreetmap.org/" + z + "/" + X + "/" + ll.y + ".png"; }, tileSize: new google.maps.Size(256, 256), isPng: true, maxZoom: 18, name: "OSM", alt: "Слой с OpenStreetmap" }); //Добавляем слои к карте map2.mapTypes.set('osm', openStreet); map2.setMapTypeId('osm'); map2.setOptions({ mapTypeControlOptions: { mapTypeIds: [ 'osm', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.TERRAIN, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID ], style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } }); map1.bindTo('center', map2, 'center'); map1.bindTo('zoom', map2, 'zoom'); } </script> <style type="text/css"> #map_canvas1{width: 500px; height: 400px;} #map_canvas2{width: 500px; height: 400px;} </style> </head> <body onload="initialize()"> <div id="map_canvas1" ></div> <BR /> <div id="map_canvas2" ></div> </body> </html> |
Добрый день! А Есть ли возможность подключения карт kosmosnimki.ru в компонент adsmanager?
Надо попробовать, если что-то получится напишу об этом заметку.
Спасибо! Буду надеяться что получится!
п.с. я думаю многим будет полезно, т.к. провинции в kosmosnimki.ru прорисованы многие, в отличие от «гигантов» карт… например мой город и город подруги прорисован только в kosmosnimki.ru