Ответ 1
Попробуйте это... Эта проблема возникает только при изменении размера карты.
google.maps.event.addDomListener( map, 'drag', function(e) {
google.maps.event.trigger(map,'resize');
map.setZoom(map.getZoom());
});
Мне нужно использовать javascript-карты google в веб-просмотре. Проблема в том, что при перетаскивании карты недостающие фрагменты не будут загружены. В браузере на моем рабочем столе ПК я не могу получить то же поведение, но загружать фрагменты, перемещая карту. На картинке я держу карту, и ничего не происходит, пока я не отпущу палец.
Я нашел проблему (не совсем подходящую для моей проблемы, но немного близкую) в bugtracker gmaps и попробовал все упомянутые решения: https://code.google.com/p/gmaps-api-issues/issues/detail?id=1448
Это то, что я пробовал до сих пор:
// Setting the maps div container to a fixed size
#map-canvas {
height: 600px;
width: 600px;
}
// Emit resize trigger on mouse move
$(document).ready(function () {
$("#map-canvas").mousemove(function (event) {
setTimeout(function () {
google.maps.event.trigger(map,'resize');
map.setZoom(map.getZoom());
}, 100);
});
});
// loading Google Maps API after document has been loaded
function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' +
'callback=initialize';
document.body.appendChild(script);
}
window.onload = loadScript;
Код работает, и событие mousemove запускается. Я использую android: minSdkVersion = "19" на моем устройстве nexus 10.
Попробуйте это... Эта проблема возникает только при изменении размера карты.
google.maps.event.addDomListener( map, 'drag', function(e) {
google.maps.event.trigger(map,'resize');
map.setZoom(map.getZoom());
});
Возможно, вы могли бы загрузить большую карту и показать только часть в окне просмотра? EG загружает карту в div 1200x1200 внутри 600x600, с переполнением: скрытый?
события касания отличаются от событий мыши, вы можете использовать привязки событий касания, такие как touch-start, touch-end и т.д. или пытаться использовать hammer.js
попробуйте это, он работает
google.maps.event.addListenerOnce(map, 'tilesloaded', function () {
google.maps.event.addListenerOnce(map, 'tilesloaded', function () {
google.maps.event.trigger(map, 'resize');
});
});
У меня такая же проблема не центрирования, а отображение только части карты на холсте карты.
Эта строка исправила мою проблему:
google.maps.event.trigger(map, 'resize');
Если не запускать его при mouseover, нужна строка после map.initialize();
, а затем setCenter и setZoom strong >
map.setCenter(myLatlng);
map.setZoom(10);
Вы пытались использовать drag?
google.maps.event.addDomListener( map, 'drag', function(e) {
//Code that runs consistantly everytime the user drags the map
//load map tiles if not loaded yet
});
У меня нет кода для версии для Android, но, возможно, это может быть шаг в правильном направлении?
//Создать одно Div как 'map_canvas'
var htmldesign = '<table><tr><td>India</td></tr></table>';
var locationdetails = 'India';
var popdetail = 'India';
var zoomper = 5;
GetLocation(locationdetails, popdetail, zoomper);
function GetLocation(address, popdetail, zoomper) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
initialize(latitude, longitude, popdetail, zoomper);
} else {
initialize(21.0000, 78.8718, 'India', zoomper);
}
});
};
function initialize(lat, lon, popdetail, zoom) {
var myLatlng = new google.maps.LatLng(lat, lon) // This is used to center the map to show our markers
var mapOptions;
mapOptions = {
center: myLatlng,
zoom: zoom,
mapTypeId: google.maps.MapTypeId.ROADMAP,
marker: true
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var marker = new google.maps.Marker({
animation: google.maps.Animation.BOUNCE,
position: myLatlng
});
if (popdetail != 'India') {
popdetail = '<div style="font-size:small;font-family:@Arial Unicode MS;border-radius: 6px;" class="phoneytext"> ' + popdetail + '</div>';
infoBubble = new InfoBubble({
map: map,
content: popdetail,
position: new google.maps.LatLng(lat, lon),
shadowStyle: 1,
padding: 10,
backgroundColor: '#E6E6E6',
borderRadius: 6,
arrowSize: 30,
borderWidth: 1,
borderColor: '#2c2c2c',
disableAutoPan: false,
hideCloseButton: true,
arrowPosition: 10,
backgroundClassName: 'phoney',
arrowStyle: 2
});
marker.setMap(map);
infoBubble.open(map, marker);
}
else {
marker.setMap(map);
}
}
</script>
Я ответил на это раньше. проверьте этот jsfiddle
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
function initialize() {
var map_canvas = document.getElementById('map_canvas');
var map_options = {
center: new google.maps.LatLng(51.372658, 1.354386),
zoom:16,
mapTypeId: google.maps.MapTypeId.HYBRID
}
var map = new google.maps.Map(map_canvas, map_options)
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<style>
#map_canvas {
width: 500px;
height:400px;
border:1px solid #888888;
margin-bottom:20px;
box-shadow: 2px 2px 2px #888888;
}
</style>
</head>
<body>
<div id="map_canvas"></div>
</body>
вам нужно будет изменить здесь для долготы и широты для вашего местоположения. Вы можете получить это с карт Google. часть для изменения - "new google.maps.LatLng(51.372658, 1.354386)"