2013-09-25 4 views
0

Я использую пользовательский ImageMapType в качестве плана. Я должен иметь возможность отображать одну и ту же карту в двух разных размерах холста для использования на отзывчивом веб-сайте.Настройка границ на картах Google разных размеров

Проблема, с которой я сталкиваюсь, заключается в том, что когда я устанавливаю границы на основе большей версии (800x450) карты, эти ограничения неверны в меньшей версии (560x360). Края карты обрезаны, используя на карте меньшие, используя эти границы. Ясно, что мне нужно использовать разные (большие) границы для малой карты, чтобы края были правильными.

Есть ли способ перевода границ с большей карты на меньшую по размеру холста?

См. Приведенную ниже ссылку Fiddle для демонстрации проблемы.

http://jsfiddle.net/khendar/CvCMq/1/

var marker; 
var typeOptions = { 
getTileUrl: function (coord, zoom) { 
    return 'http://fc02.deviantart.net/fs4/i/2004/267/a/4/The_Middle_Earth_Map_by__electra_.jpg'; 
}, 
tileSize: new google.maps.Size(1192, 930), 
maxZoom: 5, 
minZoom: 5 
}; 
var mapType = new google.maps.ImageMapType(typeOptions); 
var allowedBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(-15.076764665951556, 47.2412109375), 
new google.maps.LatLng(6.790762250562566, 64.2041015625)); 

function initialize(canvas) { 

var myLatlng = new google.maps.LatLng(-15.076764665951556, 47.2412109375); 
var mapOptions = { 
    center: myLatlng, 
    zoom: 5, 
    streetViewControl: false, 
    disableDefaultUI: true, 
    mapTypeControlOptions: { 
     mapTypeIds: ['stores'] 
    } 
}; 
var map = new google.maps.Map(document.getElementById(canvas), mapOptions); 
map.mapTypes.set('stores', mapType); 
map.setMapTypeId('stores'); 
lastValidCenter = new google.maps.LatLng(-15.076764665951556, 47.2412109375); 
google.maps.event.addListener(map, 'center_changed', function (event) { 
    document.getElementById('center').value = map.getCenter(); 
    if (allowedBounds.contains(map.getCenter())) { 
     lastValidCenter = map.getCenter(); 
     return; 
    } 
     map.panTo(lastValidCenter); 

}); 
} 
+0

Каковы ваши желаемые границы? Как вы их определили? Если они включают всю область, которую вы хотите видеть, эта область должна быть видимой на обеих ваших картах. Пожалуйста, предоставьте подробности, если это не так. – geocodezip

+0

Границы - это границы изображения, которое я использую в качестве плана. Я устанавливаю границы с помощью инструмента, который я создал для этой цели. Я бы выравнивал SW и NE углы карты и сохранял центральные позиции в каждой точке, которые будут использоваться в качестве границ. Я предполагаю, что это источник моих проблем, поскольку центр будет дальше или ближе к границам в зависимости от размера холста, но я не знаю другого способа сделать это. Я добавил скрипку в оригинальное сообщение, чтобы продемонстрировать проблему. – khendar

ответ

0

Фигурные его.

Я понял, что использование Центра вызывает мои проблемы, поэтому я изменил его, чтобы использовать map.getBounds(), чтобы установить границы с помощью NE и SW углов окна просмотра, а затем сравнить NE и SW углы и проверить на посмотрите, находятся ли они в моих границах карты.

google.maps.event.addListener(map, 'center_changed', function (event) { 
    if (allowedBounds.contains(map.getBounds().getSouthWest()) && 
      allowedBounds.contains(map.getBounds().getNorthEast())) { 
     lastValidCenter = map.getCenter(); 
     return; 
    } 
     map.panTo(lastValidCenter); 

}); 

http://jsfiddle.net/khendar/CvCMq/5/

+0

Пожалуйста, отметьте свой ответ, как принято. – Brett

+0

Я бы ... но я должен подождать 24 часа. – khendar

+0

Я думаю, что вы можете принять свой ответ сейчас :) –

Смежные вопросы