Showing pixel and tile coordinates
by PhilQ
HTML
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCwSwPtKq7zuB3xZ1HJww7BPUcJqxMj4_0&callback=initMap">
</script>
CSS
/* 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;
}
JavaScript
function initMap() {
var groningen = new google.maps.LatLng(53.21828861684781,6.5527167727859625);
var map = new google.maps.Map(document.getElementById('map'), {
center: groningen,
zoom: 16
});
var coordInfoWindow = new google.maps.InfoWindow();
coordInfoWindow.setContent(createInfoWindowContent(groningen, map.getZoom()));
coordInfoWindow.setPosition(groningen);
coordInfoWindow.open(map);
map.addListener('zoom_changed', function() {
coordInfoWindow.setContent(createInfoWindowContent(groningen, map.getZoom()));
coordInfoWindow.open(map);
});
}
var TILE_SIZE = 512;
function fromLatLngToPoint(latLng) {
var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
return {
x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
y: TILE_SIZE / 2 * (1 + mercator / Math.PI)
};
}
function fromLatLngToTileCoord(latLng, zoom) {
var point = fromLatLngToPoint(latLng);
var scale = Math.pow(2, zoom);
return {
x: Math.floor(point.x * scale / TILE_SIZE),
y: Math.floor(point.y * scale / TILE_SIZE),
z: zoom
};
}
function createInfoWindowContent(latLng, zoom) {
var scale = 1 << zoom;
var worldCoordinate = project(latLng);
var pixelCoordinate = new google.maps.Point(
Math.floor(worldCoordinate.x * scale),
Math.floor(worldCoordinate.y * scale));
var tileCoordinate = new google.maps.Point(
Math.floor(worldCoordinate.x * scale / TILE_SIZE),
Math.floor(worldCoordinate.y * scale / TILE_SIZE));
return [
'Chicago, IL',
'LatLng: ' + latLng,
'Zoom level: ' + zoom,
'World Coordinate: ' + worldCoordinate,
'Pixel Coordinate: ' + pixelCoordinate,
'Tile Coordinate: ' + tileCoordinate
].join('<br>');
}
// The mapping between latitude, longitude and pixels is defined by the web
// mercator projection.
function project(latLng) {
var siny = Math.sin(latLng.lat() * Math.PI / 180);
// Truncating to 0.9999 effectively limits latitude to 89.189. This is
//...