This example creates three different presentation styles for a dataset from the USGS recent earthquakes feed.
Check out the reference documentation for the data layer.
Default style
Default style: map
Default style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); }
JavaScript
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); }
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; }
HTML
<!DOCTYPE html> <html> <head> <title>Default Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script src="./index.js"></script> </head> <body> <div id="map"></div> </body> </html>
All
<!DOCTYPE html> <html> <head> <title>Default Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <style type="text/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; } </style> <script> let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } </script> </head> <body> <div id="map"></div> </body> </html>
let map;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 20, lng: -160 },
zoom: 2,
});
// Get the earthquake data (JSONP format)
// This feed is a copy from the USGS feed, you can find the originals here:
// http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php
const script = document.createElement("script");
script.setAttribute(
"src",
"https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json"
);
document.getElementsByTagName("head")[0].appendChild(script);
}
// Defines the callback function referenced in the jsonp file.
function eqfeed_callback(data) {
map.data.addGeoJson(data);
}
/* 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>Default Data Layer: Earthquakes</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBIwzALxUPNbatRBj3Xi1Uhp0fFzwWNBkE&callback=initMap&libraries=&v=weekly"
defer
></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>
Simple style
Simple style: map
Simple style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); // Add a basic style. map.data.setStyle((feature) => { const mag = Math.exp(parseFloat(feature.getProperty("mag"))) * 0.1; return /** @type {google.maps.Data.StyleOptions} */ { icon: { path: google.maps.SymbolPath.CIRCLE, scale: mag, fillColor: "#f00", fillOpacity: 0.35, strokeWeight: 0, }, }; }); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); }
JavaScript
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); // Add a basic style. map.data.setStyle((feature) => { const mag = Math.exp(parseFloat(feature.getProperty("mag"))) * 0.1; return /** @type {google.maps.Data.StyleOptions} */ { icon: { path: google.maps.SymbolPath.CIRCLE, scale: mag, fillColor: "#f00", fillOpacity: 0.35, strokeWeight: 0, }, }; }); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); }
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; }
HTML
<!DOCTYPE html> <html> <head> <title>Simple Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script src="./index.js"></script> </head> <body> <div id="map"></div> </body> </html>
All
<!DOCTYPE html> <html> <head> <title>Simple Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <style type="text/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; } </style> <script> let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, }); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); // Add a basic style. map.data.setStyle((feature) => { const mag = Math.exp(parseFloat(feature.getProperty("mag"))) * 0.1; return /** @type {google.maps.Data.StyleOptions} */ { icon: { path: google.maps.SymbolPath.CIRCLE, scale: mag, fillColor: "#f00", fillOpacity: 0.35, strokeWeight: 0, }, }; }); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } </script> </head> <body> <div id="map"></div> </body> </html>
let map;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 20, lng: -160 },
zoom: 2,
});
// Get the earthquake data (JSONP format)
// This feed is a copy from the USGS feed, you can find the originals here:
// http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php
const script = document.createElement("script");
script.setAttribute(
"src",
"https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json"
);
document.getElementsByTagName("head")[0].appendChild(script);
// Add a basic style.
map.data.setStyle((feature) => {
const mag = Math.exp(parseFloat(feature.getProperty("mag"))) * 0.1;
return /** @type {google.maps.Data.StyleOptions} */ {
icon: {
path: google.maps.SymbolPath.CIRCLE,
scale: mag,
fillColor: "#f00",
fillOpacity: 0.35,
strokeWeight: 0,
},
};
});
}
// Defines the callback function referenced in the jsonp file.
function eqfeed_callback(data) {
map.data.addGeoJson(data);
}
/* 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 Data Layer: Earthquakes</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBIwzALxUPNbatRBj3Xi1Uhp0fFzwWNBkE&callback=initMap&libraries=&v=weekly"
defer
></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>
Advanced style
Advanced style: map
Advanced style: code example
TypeScript
let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { center: { lat: 20, lng: -160 }, zoom: 2, styles: mapStyle, }); map.data.setStyle(styleFeature); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data: any) { map.data.addGeoJson(data); } function styleFeature(feature: google.maps.Data.Feature) { const low = [151, 83, 34]; // color of mag 1.0 const high = [5, 69, 54]; // color of mag 6.0 and above const minMag = 1.0; const maxMag = 6.0; // fraction represents where the value sits between the min and max const fraction = (Math.min(feature.getProperty("mag"), maxMag) - minMag) / (maxMag - minMag); const color = interpolateHsl(low, high, fraction); return { icon: { path: google.maps.SymbolPath.CIRCLE, strokeWeight: 0.5, strokeColor: "#fff", fillColor: color, fillOpacity: 2 / feature.getProperty("mag"), // while an exponent would technically be correct, quadratic looks nicer scale: Math.pow(feature.getProperty("mag"), 2), }, zIndex: Math.floor(feature.getProperty("mag")), }; } function interpolateHsl(lowHsl: number[], highHsl: number[], fraction: number) { const color: number[] = []; for (let i = 0; i < 3; i++) { // Calculate color based on the fraction. color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]); } return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)"; } const mapStyle: google.maps.MapTypeStyle[] = [ { featureType: "all", elementType: "all", stylers: [{ visibility: "off" }], }, { featureType: "landscape", elementType: "geometry", stylers: [{ visibility: "on" }, { color: "#fcfcfc" }], }, { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }], }, { featureType: "water", elementType: "geometry", stylers: [{ visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }], }, ];
JavaScript
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, styles: mapStyle, }); map.data.setStyle(styleFeature); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } function styleFeature(feature) { const low = [151, 83, 34]; // color of mag 1.0 const high = [5, 69, 54]; // color of mag 6.0 and above const minMag = 1.0; const maxMag = 6.0; // fraction represents where the value sits between the min and max const fraction = (Math.min(feature.getProperty("mag"), maxMag) - minMag) / (maxMag - minMag); const color = interpolateHsl(low, high, fraction); return { icon: { path: google.maps.SymbolPath.CIRCLE, strokeWeight: 0.5, strokeColor: "#fff", fillColor: color, fillOpacity: 2 / feature.getProperty("mag"), // while an exponent would technically be correct, quadratic looks nicer scale: Math.pow(feature.getProperty("mag"), 2), }, zIndex: Math.floor(feature.getProperty("mag")), }; } function interpolateHsl(lowHsl, highHsl, fraction) { const color = []; for (let i = 0; i < 3; i++) { // Calculate color based on the fraction. color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]); } return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)"; } const mapStyle = [ { featureType: "all", elementType: "all", stylers: [{ visibility: "off" }], }, { featureType: "landscape", elementType: "geometry", stylers: [{ visibility: "on" }, { color: "#fcfcfc" }], }, { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }], }, { featureType: "water", elementType: "geometry", stylers: [{ visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }], }, ];
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; }
HTML
<!DOCTYPE html> <html> <head> <title>Advanced Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <link rel="stylesheet" type="text/css" href="./style.css" /> <script src="./index.js"></script> </head> <body> <div id="map"></div> </body> </html>
All
<!DOCTYPE html> <html> <head> <title>Advanced Data Layer: Earthquakes</title> <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script> <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=&v=weekly" defer ></script> <style type="text/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; } </style> <script> let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20, lng: -160 }, zoom: 2, styles: mapStyle, }); map.data.setStyle(styleFeature); // Get the earthquake data (JSONP format) // This feed is a copy from the USGS feed, you can find the originals here: // http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php const script = document.createElement("script"); script.setAttribute( "src", "https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json" ); document.getElementsByTagName("head")[0].appendChild(script); } // Defines the callback function referenced in the jsonp file. function eqfeed_callback(data) { map.data.addGeoJson(data); } function styleFeature(feature) { const low = [151, 83, 34]; // color of mag 1.0 const high = [5, 69, 54]; // color of mag 6.0 and above const minMag = 1.0; const maxMag = 6.0; // fraction represents where the value sits between the min and max const fraction = (Math.min(feature.getProperty("mag"), maxMag) - minMag) / (maxMag - minMag); const color = interpolateHsl(low, high, fraction); return { icon: { path: google.maps.SymbolPath.CIRCLE, strokeWeight: 0.5, strokeColor: "#fff", fillColor: color, fillOpacity: 2 / feature.getProperty("mag"), // while an exponent would technically be correct, quadratic looks nicer scale: Math.pow(feature.getProperty("mag"), 2), }, zIndex: Math.floor(feature.getProperty("mag")), }; } function interpolateHsl(lowHsl, highHsl, fraction) { const color = []; for (let i = 0; i < 3; i++) { // Calculate color based on the fraction. color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]); } return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)"; } const mapStyle = [ { featureType: "all", elementType: "all", stylers: [{ visibility: "off" }], }, { featureType: "landscape", elementType: "geometry", stylers: [{ visibility: "on" }, { color: "#fcfcfc" }], }, { featureType: "water", elementType: "labels", stylers: [{ visibility: "off" }], }, { featureType: "water", elementType: "geometry", stylers: [ { visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }, ], }, ]; </script> </head> <body> <div id="map"></div> </body> </html>
let map;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 20, lng: -160 },
zoom: 2,
styles: mapStyle,
});
map.data.setStyle(styleFeature);
// Get the earthquake data (JSONP format)
// This feed is a copy from the USGS feed, you can find the originals here:
// http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php
const script = document.createElement("script");
script.setAttribute(
"src",
"https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json"
);
document.getElementsByTagName("head")[0].appendChild(script);
}
// Defines the callback function referenced in the jsonp file.
function eqfeed_callback(data) {
map.data.addGeoJson(data);
}
function styleFeature(feature) {
const low = [151, 83, 34]; // color of mag 1.0
const high = [5, 69, 54]; // color of mag 6.0 and above
const minMag = 1.0;
const maxMag = 6.0;
// fraction represents where the value sits between the min and max
const fraction =
(Math.min(feature.getProperty("mag"), maxMag) - minMag) / (maxMag - minMag);
const color = interpolateHsl(low, high, fraction);
return {
icon: {
path: google.maps.SymbolPath.CIRCLE,
strokeWeight: 0.5,
strokeColor: "#fff",
fillColor: color,
fillOpacity: 2 / feature.getProperty("mag"),
// while an exponent would technically be correct, quadratic looks nicer
scale: Math.pow(feature.getProperty("mag"), 2),
},
zIndex: Math.floor(feature.getProperty("mag")),
};
}
function interpolateHsl(lowHsl, highHsl, fraction) {
const color = [];
for (let i = 0; i < 3; i++) {
// Calculate color based on the fraction.
color.push((highHsl[i] - lowHsl[i]) * fraction + lowHsl[i]);
}
return "hsl(" + color[0] + "," + color[1] + "%," + color[2] + "%)";
}
const mapStyle = [
{
featureType: "all",
elementType: "all",
stylers: [{ visibility: "off" }],
},
{
featureType: "landscape",
elementType: "geometry",
stylers: [{ visibility: "on" }, { color: "#fcfcfc" }],
},
{
featureType: "water",
elementType: "labels",
stylers: [{ visibility: "off" }],
},
{
featureType: "water",
elementType: "geometry",
stylers: [{ visibility: "on" }, { hue: "#5f94ff" }, { lightness: 60 }],
},
];
/* 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>Advanced Data Layer: Earthquakes</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBIwzALxUPNbatRBj3Xi1Uhp0fFzwWNBkE&callback=initMap&libraries=&v=weekly"
defer
></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>