Google Maps Hidden Div Overflows half map - javascript
I'm using Google maps, with Drawning Manager
var latlng = new google.maps.LatLng(41.7318187, 44.8627138);
var mapOptions = {
zoom: 8,
center: latlng,
disableDoubleClickZoom: true
}
bounds = new google.maps.LatLngBounds();
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
//Define a symbol using SVG path notation, with an opacity of 1.
var lineSymbol = {
path: 'M 0,-1 0,1',
strokeOpacity: 1,
scale: 4
};
drawingManager = new google.maps.drawing.DrawingManager({
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.MARKER,
google.maps.drawing.OverlayType.POLYLINE
]
},
markerOptions: {
icon: $imgFolderFullPath + '/' + $('#TourObjectType').val() + '.png',
draggable: true
},
polylineOptions: {
strokeColor: $("#LineType").val()
}
});
drawingManager.setMap(map);
The problem is when map renders some element that has visibility hidden and z-index 107 which overflows half of the map and i cant insert, edit, move, poly lines and markers in that part
DOM structure of the problematic part looks like this :
<div style="transform: translateZ(0px); position: absolute; left: 0px; top: 0px; z-index: 107; width: 100%;">
<div style="cursor: default; width: 53px; height: 191px; visibility: hidden;">...</div>
</div>
and also when i comment visibility hidden in the code snippet above, there is something like white comment box with star shown on the map
i what to know what causes the problem
This happens when the signed_in=true is used.
Bug report: https://code.google.com/p/gmaps-api-issues/issues/detail?id=7788
I added a link to this post in the bug report for reference. Hope Google will fix that very soon.
I can not tell you why this occurs, only that for me it also does in the example that is provided in the documentation. You can't draw in that area, but you can zoom into it, etc.
https://developers.google.com/maps/documentation/javascript/examples/drawing-tools.
EDIT: It seems to be a bug with the signed-in mode, as #MrUpsidown pointed out
Related
How to use SVG with multiple paths in Google Maps marker JavaScript? [closed]
Closed. This question needs debugging details. It is not currently accepting answers. Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question. Closed 2 years ago. Improve this question I know how to use the SVG path in the icon object that displays in Google Map but how can I add an SVG with multiple paths? Lets take this SVG with multiple paths: svg = '<svg height="35" width="35" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 411.02 361.23">' +'<path d="M23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" style="fill:#fff"/>' +'<path d="M344.78,313.39l-139.26-241L66.27,313.39ZM23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" style="fill:#666"/>' +'<path d="M166,216.36l-8.44-6.14a13.08,13.08,0,0,1-.93,1.4c-2.22,2.57-5.25,2.94-7.68,1a5.56,5.56,0,0,1-.83-8.05c4.06-5.19,8.19-10.32,12.3-15.47,1.94-2.44,4-4.82,5.81-7.35a8.52,8.52,0,0,1,7.33-3.64c10.22,0,20.44-.12,30.65,0,8.81.13,16,7.72,16,16.56q0,26.06,0,52.1a3.1,3.1,0,0,0,1.4,2.9c9.21,6.61,18.35,13.29,27.51,20,.23.17.47.3.81.52l3.31-4.8c1.51-2.18,2.91-2.44,5-.91L275,276.62c.3.23.62.43,1.06.72a42.66,42.66,0,0,0,3.43-4.58,5.07,5.07,0,0,0,.27-3.08c-.55-3.42,1-5.16,3.85-7.05,5.31-3.49,10.72-5.25,17.08-4.62a10.23,10.23,0,0,1,5.77,2c4,3.13,8.17,6,12.25,9.06a5,5,0,0,1,1.36,1.42q12.24,21.15,24.42,42.32a4.9,4.9,0,0,1,.26.61h-112a67.9,67.9,0,0,0,5-7.07c2.05-3.81,4.93-5.45,9.17-4.6,2.86.57,4.68-.63,6.06-3.1a53.06,53.06,0,0,1,3.49-4.89l-8-5.6c-1.69-1.18-3.4-2.34-5.07-3.56s-2-2.82-.73-4.59,2.36-3.23,3.61-4.93L218,254.15c-.41.19-.85.41-1.3.59-3.74,1.53-7.59-.79-7.56-4.83a4.58,4.58,0,0,0-2.41-4.27c-4.57-3.1-9-6.37-13.52-9.58a3.9,3.9,0,0,0-1.51-.7c1.26,1.94,2.5,3.9,3.78,5.83,4.41,6.71,8.81,13.43,13.28,20.11a11.32,11.32,0,0,1,2,6.45c0,12.23,0,24.46,0,36.69,0,4.35-2.36,7.64-5.92,8.55a8.11,8.11,0,0,1-9.77-7,22.43,22.43,0,0,1-.16-2.84c0-10,0-20,0-30a5.57,5.57,0,0,0-.83-2.77c-5-7.83-10.16-15.62-15.25-23.42-.27-.41-.57-.81-1-1.48-.05.75-.1,1.21-.1,1.67,0,7.43,0,14.85,0,22.28a11.47,11.47,0,0,1-1.59,6.05q-9.69,16.51-19.34,33.07a8.16,8.16,0,0,1-8.2,4.43,7.56,7.56,0,0,1-6.58-5.22c-1-2.6-.39-5,1-7.35q8.12-14,16.14-28a6.15,6.15,0,0,0,.79-3c.06-13.13.11-26.25,0-39.37a15.88,15.88,0,0,1,3.33-9.93C164.07,218.93,165,217.69,166,216.36Zm43-5c-5,6.36-9.62,12.33-14.33,18.35L209,240Zm-47.43-5.92,8.25,6L185.2,191.9a2.85,2.85,0,0,0-.6-.25c-3.79-.12-7.58-.26-11.37-.31a1.78,1.78,0,0,0-1.18.73C168.59,196.45,165.17,200.86,161.57,205.47Z"/>' +'<path d="M205.43,161.57a15.86,15.86,0,0,1,15.81-15.9c8.52,0,15.72,7.43,15.69,16.12A16.11,16.11,0,0,1,221,177.51,15.83,15.83,0,0,1,205.43,161.57Z"/></svg>'; ...and add it here: var icon = { path: svg, fillColor: '#FF0000', fillOpacity: .6, anchor: new google.maps.Point(0, 0), strokeWeight: 0, scale: 1 } var domMarker = new google.maps.Marker({ position: {lat: latitude, lng:longitude}, map: hMap, draggable: false, icon: svg }); Having only one path works perfectly fine: var icon = { path: "M-20,0a20,20 0 1,0 40,0a20,20 0 1,0 -40,0", fillColor: '#FF0000', fillOpacity: .6, anchor: new google.maps.Point(0, 0), strokeWeight: 0, scale: 1 } Having multiple paths combining like this it still doesnt work: var icon = { path: "M23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" +" M344.78,313.39l-139.26-241L66.27,313.39ZM23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" +" M166,216.36l-8.44-6.14a13.08,13.08,0,0,1-.93,1.4c-2.22,2.57-5.25,2.94-7.68,1a5.56,5.56,0,0,1-.83-8.05c4.06-5.19,8.19-10.32,12.3-15.47,1.94-2.44,4-4.82,5.81-7.35a8.52,8.52,0,0,1,7.33-3.64c10.22,0,20.44-.12,30.65,0,8.81.13,16,7.72,16,16.56q0,26.06,0,52.1a3.1,3.1,0,0,0,1.4,2.9c9.21,6.61,18.35,13.29,27.51,20,.23.17.47.3.81.52l3.31-4.8c1.51-2.18,2.91-2.44,5-.91L275,276.62c.3.23.62.43,1.06.72a42.66,42.66,0,0,0,3.43-4.58,5.07,5.07,0,0,0,.27-3.08c-.55-3.42,1-5.16,3.85-7.05,5.31-3.49,10.72-5.25,17.08-4.62a10.23,10.23,0,0,1,5.77,2c4,3.13,8.17,6,12.25,9.06a5,5,0,0,1,1.36,1.42q12.24,21.15,24.42,42.32a4.9,4.9,0,0,1,.26.61h-112a67.9,67.9,0,0,0,5-7.07c2.05-3.81,4.93-5.45,9.17-4.6,2.86.57,4.68-.63,6.06-3.1a53.06,53.06,0,0,1,3.49-4.89l-8-5.6c-1.69-1.18-3.4-2.34-5.07-3.56s-2-2.82-.73-4.59,2.36-3.23,3.61-4.93L218,254.15c-.41.19-.85.41-1.3.59-3.74,1.53-7.59-.79-7.56-4.83a4.58,4.58,0,0,0-2.41-4.27c-4.57-3.1-9-6.37-13.52-9.58a3.9,3.9,0,0,0-1.51-.7c1.26,1.94,2.5,3.9,3.78,5.83,4.41,6.71,8.81,13.43,13.28,20.11a11.32,11.32,0,0,1,2,6.45c0,12.23,0,24.46,0,36.69,0,4.35-2.36,7.64-5.92,8.55a8.11,8.11,0,0,1-9.77-7,22.43,22.43,0,0,1-.16-2.84c0-10,0-20,0-30a5.57,5.57,0,0,0-.83-2.77c-5-7.83-10.16-15.62-15.25-23.42-.27-.41-.57-.81-1-1.48-.05.75-.1,1.21-.1,1.67,0,7.43,0,14.85,0,22.28a11.47,11.47,0,0,1-1.59,6.05q-9.69,16.51-19.34,33.07a8.16,8.16,0,0,1-8.2,4.43,7.56,7.56,0,0,1-6.58-5.22c-1-2.6-.39-5,1-7.35q8.12-14,16.14-28a6.15,6.15,0,0,0,.79-3c.06-13.13.11-26.25,0-39.37a15.88,15.88,0,0,1,3.33-9.93C164.07,218.93,165,217.69,166,216.36Zm43-5c-5,6.36-9.62,12.33-14.33,18.35L209,240Zm-47.43-5.92,8.25,6L185.2,191.9a2.85,2.85,0,0,0-.6-.25c-3.79-.12-7.58-.26-11.37-.31a1.78,1.78,0,0,0-1.18.73C168.59,196.45,165.17,200.86,161.57,205.47Z" +" M205.43,161.57a15.86,15.86,0,0,1,15.81-15.9c8.52,0,15.72,7.43,15.69,16.12A16.11,16.11,0,0,1,221,177.51,15.83,15.83,0,0,1,205.43,161.57Z", fillColor: '#FF0000', fillOpacity: .6, anchor: new google.maps.Point(0, 0), strokeWeight: 0, scale: 1 };
Google Maps SVG Symbols only support a single path. You can load the complete svg file as an icon if it is publicly available on the internet. Related questions: rotate svg marker with multiple paths using google maps javascript Rotate marker on google maps with svg Creating a multi color svg icon for google map marker Or, instead of loading it as a file, you can add it as a data url: icon: { anchor: new google.maps.Point(16, 16), url: 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg) }, proof of concept fiddle code snippet: var svg = '<svg height="35" width="35" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 411.02 361.23">' + '<path d="M23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" style="fill:#fff"/>' + '<path d="M344.78,313.39l-139.26-241L66.27,313.39ZM23.36,342.13a3.3,3.3,0,0,1-2.78-1.64l-.25-.46-.27-.44a3.37,3.37,0,0,1,.14-2.91L202,21.48a4.79,4.79,0,0,1,3.54-2.38A4.08,4.08,0,0,1,208.65,21l182,315a4,4,0,0,1,.31,3.54l-.27.43-.23.44a3.34,3.34,0,0,1-2.8,1.66Z" style="fill:#666"/>' + '<path d="M166,216.36l-8.44-6.14a13.08,13.08,0,0,1-.93,1.4c-2.22,2.57-5.25,2.94-7.68,1a5.56,5.56,0,0,1-.83-8.05c4.06-5.19,8.19-10.32,12.3-15.47,1.94-2.44,4-4.82,5.81-7.35a8.52,8.52,0,0,1,7.33-3.64c10.22,0,20.44-.12,30.65,0,8.81.13,16,7.72,16,16.56q0,26.06,0,52.1a3.1,3.1,0,0,0,1.4,2.9c9.21,6.61,18.35,13.29,27.51,20,.23.17.47.3.81.52l3.31-4.8c1.51-2.18,2.91-2.44,5-.91L275,276.62c.3.23.62.43,1.06.72a42.66,42.66,0,0,0,3.43-4.58,5.07,5.07,0,0,0,.27-3.08c-.55-3.42,1-5.16,3.85-7.05,5.31-3.49,10.72-5.25,17.08-4.62a10.23,10.23,0,0,1,5.77,2c4,3.13,8.17,6,12.25,9.06a5,5,0,0,1,1.36,1.42q12.24,21.15,24.42,42.32a4.9,4.9,0,0,1,.26.61h-112a67.9,67.9,0,0,0,5-7.07c2.05-3.81,4.93-5.45,9.17-4.6,2.86.57,4.68-.63,6.06-3.1a53.06,53.06,0,0,1,3.49-4.89l-8-5.6c-1.69-1.18-3.4-2.34-5.07-3.56s-2-2.82-.73-4.59,2.36-3.23,3.61-4.93L218,254.15c-.41.19-.85.41-1.3.59-3.74,1.53-7.59-.79-7.56-4.83a4.58,4.58,0,0,0-2.41-4.27c-4.57-3.1-9-6.37-13.52-9.58a3.9,3.9,0,0,0-1.51-.7c1.26,1.94,2.5,3.9,3.78,5.83,4.41,6.71,8.81,13.43,13.28,20.11a11.32,11.32,0,0,1,2,6.45c0,12.23,0,24.46,0,36.69,0,4.35-2.36,7.64-5.92,8.55a8.11,8.11,0,0,1-9.77-7,22.43,22.43,0,0,1-.16-2.84c0-10,0-20,0-30a5.57,5.57,0,0,0-.83-2.77c-5-7.83-10.16-15.62-15.25-23.42-.27-.41-.57-.81-1-1.48-.05.75-.1,1.21-.1,1.67,0,7.43,0,14.85,0,22.28a11.47,11.47,0,0,1-1.59,6.05q-9.69,16.51-19.34,33.07a8.16,8.16,0,0,1-8.2,4.43,7.56,7.56,0,0,1-6.58-5.22c-1-2.6-.39-5,1-7.35q8.12-14,16.14-28a6.15,6.15,0,0,0,.79-3c.06-13.13.11-26.25,0-39.37a15.88,15.88,0,0,1,3.33-9.93C164.07,218.93,165,217.69,166,216.36Zm43-5c-5,6.36-9.62,12.33-14.33,18.35L209,240Zm-47.43-5.92,8.25,6L185.2,191.9a2.85,2.85,0,0,0-.6-.25c-3.79-.12-7.58-.26-11.37-.31a1.78,1.78,0,0,0-1.18.73C168.59,196.45,165.17,200.86,161.57,205.47Z"/>' + '<path d="M205.43,161.57a15.86,15.86,0,0,1,15.81-15.9c8.52,0,15.72,7.43,15.69,16.12A16.11,16.11,0,0,1,221,177.51,15.83,15.83,0,0,1,205.43,161.57Z"/></svg>'; function initMap() { const myLatLng = { lat: -25.363, lng: 131.044 }; const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: myLatLng, }); new google.maps.Marker({ icon: { anchor: new google.maps.Point(16, 16), url: 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg) }, position: myLatLng, map: map, title: "Hello World!", draggable: true, zIndex: 10 }); } /* Always set the map height explicitly to define the size of the div * element that contains the map. */ #map { height: 100%; } /* Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } <!DOCTYPE html> <html> <head> <title>Simple Markers</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <!-- jsFiddle will insert css and js --> </head> <body> <div id="map"></div> <!-- Async script executes immediately and must be after any DOM elements used in callback. --> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap&libraries=&v=weekly" async></script> </body> </html>
Changing the anchor point of marker after it's added
When creating a google maps marker, the performance may differ, when using icon parameter as object or as string. load of: new google.maps.Marker({ position: { lat: this.lat, lng: this.lng }, map: this.map, icon: {url: iconUrl, anchor: anchor: new google.maps.Point(8, 8) }); is much slower than load of this: new google.maps.Marker({ position: { lat: this.lat, lng: this.lng }, map: this.map, icon: iconUrl }); It can be visible when loading big amount of points which gives 4500ms vs 400ms. As the icon used above is 16x16px circle, the anchor should be set in google.maps.Point(8, 8). Is it possible, to set anchor in different way or after the marker init? The only way, I could find in google maps docs, is the way of passing anchor parameter in icon objects which requires url parameter. Example (check the generation time in console): https://jsfiddle.net/ur76jckb/ No matter if icons is in base64, stored locally, extensions it has and the size of it. Just setting the field as object or as string makes a difference. Google maps v3.34.16 Bug reported.
In order to change anchor of the marker icon after marker creation you can use the setOptions() method of the marker. Have a look at the following example that creates a marker and changes its anchor after 3 second delay. function initMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 10, center: new google.maps.LatLng(-33.88, 151.28), mapTypeId: google.maps.MapTypeId.ROADMAP }); var marker = new google.maps.Marker({ position: new google.maps.LatLng(-33.781552, 151.274846), map: map, icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png' }); window.setTimeout(function() { marker.setOptions({ icon: { url:'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png', anchor: new google.maps.Point(16,16) } }); }, 3000); } html, body, #map { height: 100%; width: 100%; margin: 0px; padding: 0px; } <div id="map"></div> <script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initMap" type="text/javascript"></script> I hope this helps!
OpenLayers: Attaching an ground layer image over an large building
I've got the following task: Attaching a ground layer (provided as an jpg-image) over an plant. I thought that I've found an solution. Live-Demo on CodePen: http://codepen.io/mizech/full/dXBoRq/ But it doesn't work as expected. If one zooms into or out the map the image doesn't scale bigger or smaller. Moreover: The image is supposed to rotate with the map. That doesn't work neither. Therefore my question: What do I have to do to make it work the way it should (image scales when zoomed-in and -out, images follows when rotating) ? Or should I choose a complete different approach? Then any hints concerning code-examples are very appreciated. Here my code so far: var layer = new ol.layer.Tile({ source: new ol.source.OSM() }); var control = new ol.control.FullScreen(); var center = ol.proj.transform([6.9690055, 49.2175355], 'EPSG:4326', 'EPSG:3857'); var overlay = new ol.Overlay({ position: center, element: document.getElementById('plant') }); var view = new ol.View({ center: center, zoom: 17 }); var map = new ol.Map({ target: 'map', layers: [layer], controls: [control], overlays: [overlay], view: view }); #plant { width: 1300px; height: 400px; border: 1px solid black; transform: rotate(16.5deg); } #plant img { opacity: 0.6; } <div id="map" class="map"> <div id="plant"><img src="http://placehold.it/1300x400" alt="bild" /></div> </div>
You can try to use another option to accomplish the preferred effect, there are two options I can think of: 1. Use ol.layer.Image(), code sample: var extent = ol.proj.transformExtent([7.2, 49.3, 6.5, 49.1], 'EPSG:4326', 'EPSG:3857'); new ol.layer.Image({ opacity: 0.6, source: new ol.source.ImageStatic({ url: 'http://placehold.it/1300x400', imageExtent: extent }) }) The extent is just a rough estimation yet. 2. Use a vector Layer to style an Icon using your image, already explained here: https://gis.stackexchange.com/questions/130603/how-to-resize-a-feature-and-prevent-it-from-scaling-when-zooming-in-openlayers-3/ To rotate it along with the map use rotateWithView: true in your icon style, like this: var iconStyle = new ol.style.Icon({ src: 'http://placehold.it/1300x400', rotateWithView: true, opacity: 0.6 });
Google maps: Drag the circle only when I click on center and drag [closed]
Closed. This question needs debugging details. It is not currently accepting answers. Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question. Closed 8 years ago. Improve this question I am using Google Map v3 and I have 2 issues. 1) I am drawing a circle on the maps that is draggable According to the documentation,when draggable is set to true the circle can be dragged when i click anywhere inside the circle and drag but i want it to move only when i click on the CENTER and drag.How to do this? 2)How to place a custom icon on the center of the circle?
Put a marker at the center of the circle, make that draggable and bind the center of the circle to it. var circle = new google.maps.Circle({ map:map, center: map.getCenter(), radius: 5000 }); var currMarker = new google.maps.Marker({ position: map.getCenter(), draggable: true, icon: { url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle_blue.png", size: new google.maps.Size(7,7), anchor: new google.maps.Point(4,4) }, map:map }); circle.bindTo('center', currMarker, 'position'); working fiddle code snippet: function initialize() { var mapOptions = { zoom: 10, center: new google.maps.LatLng(47.606209, -122.332069) }; var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); var circle = new google.maps.Circle({ map: map, center: map.getCenter(), radius: 5000 }); var currMarker = new google.maps.Marker({ position: map.getCenter(), draggable: true, icon: { url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle_blue.png", size: new google.maps.Size(7, 7), anchor: new google.maps.Point(4, 4) }, map: map }); circle.bindTo('center', currMarker, 'position'); } google.maps.event.addDomListener(window, 'load', initialize); html, body, #map-canvas { height: 100%; margin: 0px; padding: 0px; } <script src="http://maps.google.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script> <div id='map-canvas'></div>
Why does the google map api render the map partially 2nd time around?
I have this js code to render my map : function loadMap(address) { console.log(address); var geocoder = new google.maps.Geocoder(); geocoder.geocode({ "address": address }, function (results, status) { var pos = new google.maps.LatLng(53.681602, -1.911672); // default. if (status === google.maps.GeocoderStatus.OK) { pos = results[0].geometry.location; } else { alert("Error : Unable to locate!"); } console.log(pos); var mapOptions = { center: pos, zoom: 10, zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.RIGHT_TOP }, mapTypeControl: false, panControl: false, scaleControl: false, streetViewControl: false, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("mapCanvas"), mapOptions); var marker = new google.maps.Marker({ map: map, position: pos, animation: google.maps.Animation.DROP }); }); } Problem is first time it executes the map shows fine, but the 2nd time, the postcode is still the same, the lat/long come out the same yet the map shows partially, with only about a 1/4th of it showing in the top-left of the div. Anything I am doing incorrectly? EDIT: After jterrys suggestions it still looks the same : HTML/CSS : #mapCanvas { width: 655px; height: 472px; border: 1px solid #ccc; } <div id="mapCanvas"></div> I am using JQuery 2.0, I have also had this before when I was using <2.0
Set up the mapoptions and map just once, outside of the geocode callback - then update the marker instead of recreating the entire map. Fiddle showing one geocode, then another, and back to the first... div positioning looks normal. Per the updated question, This Fiddle waits for the actual activation of the second tab before rendering the map... I had the exact same issue when creating my tabbed map. $("#two").click(function() { init(); } This could be much more robust and tie into the tabs events that are fired when users interact with them, but this quick example illustrates the solution. As a side bonus, this also conserves the resources needed to display the map (as well as any quota) until the user actually activates the tab!