Javascript 谷歌地图API应用程序当前位置居中初始地图,并在我的应用程序中用作原点,点击地图的目的地
我在我的应用程序中用粗体显示了我需要更改的内容,我不知道如何使其工作,使用用户在站点上的当前位置将地图居中,并将其用作方向API的原始值,同时我还有一个静态值作为目的地,但我想将其更改为“单击” 基本上,忽略航路点,但我希望它在用户位置加载地图,输入该值作为原点,而不是静态目的地,我希望用户单击,然后它将运行,给出从他们所在位置到他们单击位置的方向Javascript 谷歌地图API应用程序当前位置居中初始地图,并在我的应用程序中用作原点,点击地图的目的地,javascript,google-maps-api-3,geolocation,Javascript,Google Maps Api 3,Geolocation,我在我的应用程序中用粗体显示了我需要更改的内容,我不知道如何使其工作,使用用户在站点上的当前位置将地图居中,并将其用作方向API的原始值,同时我还有一个静态值作为目的地,但我想将其更改为“单击” 基本上,忽略航路点,但我希望它在用户位置加载地图,输入该值作为原点,而不是静态目的地,我希望用户单击,然后它将运行,给出从他们所在位置到他们单击位置的方向 " `var waypts = new Array(); <!-- var directionsService; --> <!--
" `var waypts = new Array();
<!-- var directionsService; -->
<!-- var directionsDisplay; -->
var bool = false, bool1 = false;
function initMap() {
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 6,
center: {lat: CURRENT LOCATION, lng: CURRENT LOCATION}
});
directionsDisplay.setMap(map);
calculateAndDisplayRoute(directionsService, directionsDisplay);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
var locations = new Array(I have waypoints I enter here)
var channel_id = KEY;
var api_key = 'KEY';
var bin = [];
var j=0, k=0;
for(i=1; i<=locations.length; i++){
$.getJSON('http://api.thingspeak.com/channels/' + channel_id + '/field/' + i + '/last',
function(data) {
if(data > 0) {
waypts.push({
location: '' + locations[j++],
stopover: true
});
}
k++; if(k==locations.length) { show(directionsService, directionsDisplay); }
});
}
function show(directionsService, directionsDisplay){
console.log(waypts);
directionsService.route({
origin: 'NEED CURRENT VALUE',
destination: 'CLICK ON MAP',
waypoints: waypts,
optimizeWaypoints: true,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
//document.getElementById('waypoints').innerHTML = response.routes[0].waypoint_order;
directionsDisplay.setDirections(response);
var route = response.routes[0];
var summaryPanel = document.getElementById('directions-panel');
//summaryPanel.innerHTML = '';
// For each route, display summary information.
console.log(route);
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i + 1;
<!-- summaryPanel.innerHTML += Route.legs[i]; -->
<!-- document.getElementById("directions-panel").innerHTML= route.legs[i].start_address + '<br>'; -->
//summaryPanel.innerHTML += '<b>Route Segment: ' + routeSegment +
//'</b><br>';
//document.getElementById("ul_list").innerHTML+= '<li>'+route.legs[i].start_address +'</li>';
for (var j = 0; j < route.legs[i].steps.length; j++) {
document.getElementById("ul_list").innerHTML+= '<li>'+route.legs[i].steps[j].instructions +'</li>';
}
//document.getElementById("ul_list").innerHTML+= '<li>'+route.legs[i].end_address +'<li>';
//document.getElementById("#buttet2").innerHTML= route.legs[i].end_address + '<br>';
//summaryPanel.innerHTML += route.legs[i].distance.text + '<br><br>';
}
document.getElementById("ul_list").innerHTML+= '<li>'+route.legs[i].start_address +'</li>';
} else {
window.alert('Directions request failed due to ' + status);
}
});
bool = true;
}
</script>
</body>
</html>`
“`var waypts=new Array();
var bool=false,bool1=false;
函数initMap(){
var directionsService=新的google.maps.directionsService;
var directionsDisplay=新建google.maps.DirectionsRenderer;
var map=new google.maps.map(document.getElementById('map'){
缩放:6,
中心:{纬度:当前位置,液化天然气:当前位置}
});
方向显示.setMap(地图);
计算显示路线(方向服务、方向显示);
}
函数calculateAndDisplayRoute(方向服务、方向显示){
var位置=新阵列(我在此处输入了航路点)
var信道_id=密钥;
var api_key='key';
var-bin=[];
var j=0,k=0;
对于(i=1;i 0){
推({
位置:“”+位置[j++],
中途停留:对
});
}
k++;if(k==locations.length){show(directionsService,directionsDisplay);}
});
}
功能显示(方向服务、方向显示){
控制台日志(waypts);
方向服务.路线({
来源:“需要当前值”,
目的地:'点击地图',
航路点:航路点,
航路点:对,
travelMode:“驾驶”
},功能(响应、状态){
如果(状态=='OK'){
//document.getElementById('waypoints')。innerHTML=response.routes[0]。waypoint\u order;
方向显示。设置方向(响应);
var route=response.routes[0];
var summaryPanel=document.getElementById('directions-panel');
//summaryPanel.innerHTML='';
//对于每个管线,显示摘要信息。
控制台日志(路由);
对于(var i=0;i”;
//document.getElementById(“ul_列表”).innerHTML+=''+route.legs[i]。起始地址+' ';
对于(var j=0;j'+route.legs[i]。步骤[j]。说明+'';
}
//document.getElementById(“ul_列表”).innerHTML+=''+route.legs[i]。end_地址+' ';
//document.getElementById(“#buttet2”).innerHTML=route.legs[i]。end_address+'
';
//summaryPanel.innerHTML+=route.legs[i].distance.text+'
';
}
document.getElementById(“ul_列表”).innerHTML+=' '+route.legs[i]。起始地址+' ';
}否则{
window.alert('由于'+状态,指示请求失败);
}
});
布尔=真;
}
`
您可以使用获取用户的当前位置(如果浏览器支持,并且用户已授予应用程序使用其位置的权限)作为一个google.maps.LatLng
对象,可以设置为方向请求的origin
。然后可以在google.maps.Map
对象上设置一个侦听器,以获取单击位置的LatLng
,然后调用方向服务的route()
方法
这是一个可以找到用户位置的,但如果地理定位失败,则默认为洛杉矶。原点为绿色圆圈。然后,您可以单击地图上的红色圆圈,然后绘制方向
守则:
<!DOCTYPE html>
<html>
<head>
<title>Geolocation</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
/* 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>
</head>
<body>
<div id="map"></div>
<script>
// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see the error "The Geolocation service
// failed.", it means you probably did not give permission for the browser to
// locate you.
var map;
function initMap() {
var origin = new google.maps.LatLng(34.051659,-118.249085);
map = new google.maps.Map(document.getElementById('map'), {
center: origin,
zoom: 14,
gestureHandling: "greedy"
});
var marker1 = new google.maps.Marker({
icon: {path: google.maps.SymbolPath.CIRCLE,
scale: 5,
strokeColor: '#338833',
strokeOpacity: 0.5
},
animation: google.maps.Animation.BOUNCE,
map: map,
position: origin,
title: "start"
});
var marker2 = new google.maps.Marker({
icon: {path: google.maps.SymbolPath.CIRCLE,
scale: 5,
strokeColor: '#FF0000',
strokeOpacity: 0.5
},
animation: google.maps.Animation.BOUNCE,
map: map,
title: "finish"
});
// Try HTML5 geolocation.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
origin = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(origin);
marker1.setPosition(origin);
}, function() {
alert("Error: The Geolocation service failed. Using default location");
});
} else {
alert("Error: Your browser doesn't support geolocation. Using default location");
}
var directionsService = new google.maps.DirectionsService();
var directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
map.addListener('click', function(event) {
var destination = event.latLng;
marker2.setPosition(destination);
directionsService.route({
origin: origin,
destination: destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?callback=initMap&key=YOUR_KEY">
</script>
</body>
</html>
地理定位
/*始终明确设置贴图高度以定义div的大小
*包含映射的元素*/
#地图{
身高:100%;
}
/*可选:使示例页面填充窗口*/
html,正文{
身高:100%;
保证金:0;
填充:0;
}
//注意:此示例要求您在以下情况下同意位置共享:
//由浏览器提示。如果您看到“地理定位服务”错误
//失败。“,这意味着您可能没有授予浏览器访问的权限
//找到你。
var映射;
函数initMap(){
var origin=new google.maps.LatLng(34.051659,-118.249085);
map=new google.maps.map(document.getElementById('map'){
中心:起源,
缩放:14,
手势处理:“贪婪”
});
var marker1=新的google.maps.Marker({
图标:{path:google.maps.SymbolPath.CIRCLE,
比例:5,
strokeColor:“#338833”,
笔划不透明度:0.5
},
动画:google.maps.animation.BOUNCE,
地图:地图,
位置:原点,
标题:“开始”
});
var marker2=新的google.maps.Marker({
图标:{path:google.maps.SymbolPath.CIRCLE,
比例:5,
strokeColor:“#FF0000”,
笔划不透明度:0.5
},
动画:google.maps.animation.BOUNCE,
地图:地图,
标题:“完成”
});
//试试HTML5地理定位。
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(函数(位置){
origin=new google.maps.LatLng(position.coords.lation,position.coords.longitude);
地图设置中心(原点);
标记1.设置位置(原点);