ElevationElement
是一个 HTML 元素,用于直观显示单个点或多段线的海拔数据。它显示了
path
属性中设置的路径(包含纬度和经度坐标数组)沿线的海拔图表。系统会在数组的点之间插入线段,因此即使只有少量点,也能生成详细的海拔图表。
使用坐标设置路径海拔
以下示例使用 gmp-elevation
元素渲染由一组坐标选择的两个点之间的路径的海拔。
该元素使用
unit-system
属性配置为进行指标衡量:
<gmp-elevation unit-system="metric"></gmp-elevation>
querySelector
用于选择海拔元素,并使用纬度和经度坐标设置其 path
属性:
/** Maps JS loaded callback */
async function init() {
// Load the Elevation Element from Maps JS
const {ElevationElement} = await google.maps.importLibrary('elevation');
// Specify an elevation path to render
const elevationElement = document.querySelector('gmp-elevation');
elevationElement.path = [
{lat: 37.4523, lng: -122.2645},
{lat: 37.377, lng: -122.4078},
];
}
查看完整代码示例
/** Maps JS loaded callback */
async function init() {
// Load the Elevation Element from Maps JS
const {ElevationElement} = await google.maps.importLibrary('elevation');
// Specify an elevation path to render
const elevationElement = document.querySelector('gmp-elevation');
elevationElement.path = [
{lat: 37.4523, lng: -122.2645},
{lat: 37.377, lng: -122.4078},
];
}
init();
html, body {
margin: 0;
padding: 0;
}
gmp-elevation {
width: 100%;
height: 100%;
}
.overlay {
margin: 20px;
width: 400px;
}
<!DOCTYPE html>
<html>
<head>
<title>Simple Elevation</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Path elevation</h1>
<div class="overlay">
<gmp-elevation unit-system="metric"></gmp-elevation>
</div>
<script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "YOUR_API_KEY",
v: "alpha"
});
</script>
</body>
</html>
使用多段线设置路径海拔
以下示例根据用户绘制的多段线渲染路径的海拔。它使用 polyline.getPath().getArray()
从用户的多段线中获取
path
:
elevationElem.path = polyline.getPath().getArray();
查看完整代码示例
const map = document.querySelector('gmp-map');
const elevationElem = document.querySelector('gmp-elevation');
async function init() {
await google.maps.importLibrary('places');
await google.maps.importLibrary('marker');
await google.maps.importLibrary('elevation');
map.innerMap.setOptions({'mapTypeControl': true, 'clickableIcons': false});
findCurrentLocation();
drawPolyline();
}
async function drawPolyline() {
const {DrawingManager} = await google.maps.importLibrary('drawing');
const drawingManager = new DrawingManager({
drawingMode: google.maps.drawing.OverlayType.POLYLINE,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.POLYLINE]
},
polylineOptions: {geodesic: true, strokeColor: '#5491f5', strokeWeight: 6}
});
drawingManager.setMap(map.innerMap);
drawingManager.addListener('polylinecomplete', (polyline) => {
console.log('complete');
console.log(polyline.getPath().getArray());
elevationElem.path = polyline.getPath().getArray();
polyline.addListener('click', (e) => {
console.log(e);
});
});
}
async function findCurrentLocation() {
const {LatLng} = await google.maps.importLibrary('core');
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
const pos =
new LatLng(position.coords.latitude, position.coords.longitude);
map.innerMap.panTo(pos);
map.innerMap.setZoom(16);
},
() => {
console.log('The Geolocation service failed.');
map.innerMap.setZoom(16);
},
);
} else {
console.log(`Your browser doesn't support geolocation`);
map.innerMap.setZoom(16);
}
}
init();
html, body {
height: 100%;
margin: 0;
}
body {
display: flex;
flex-direction: column;
font-family: Arial, Helvetica, sans-serif;
}
h1 {
font-size: 16px;
text-align: center;
}
gmp-map {
box-sizing: border-box;
margin-top: 20px;
width: 100%;
height: 100%;
}
gmp-elevation {
width: 100%;
height: 300px;
}
.overlay {
width: 800px;
}
<!DOCTYPE html>
<html>
<head>
<title>Path Elevation</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Draw polyline and get path elevation</h1>
<gmp-map center="-37.813,144.963" zoom="12" map-id="DEMO_MAP_ID">
<div id="elevation-container" class="overlay" slot="control-block-end-inline-center">
<gmp-elevation unit-system="metric"></gmp-elevation>
</div>
</gmp-map>
<script>
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "YOUR_API_KEY",
v: "alpha"
});
</script>
</body>
</html>