不断更新谷歌地图与用户位置
Continuously updating Google Maps with user location
我对Web开发和构建具有Google地图的Web应用程序非常陌生,并希望使用用户位置不断更新地图。我能够正确地从我的数据库中读取值,并且可以在地图上显示它,但只有一次。我在任何地方都找不到如何不断更新位置(希望不要重新加载页面)。有人可以帮助提供有关如何解决此问题的一些指导吗?以下是我的一些代码供参考:
<?php include_once('location.php') ?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>My GeoLocation</title>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
var map;
function initialize() {
var myLatlng = new google.maps.LatLng(<?php echo $current_lat ?>, <?php echo $current_long ?>);
var mapOptions = {
zoom: 14,
center: myLatlng
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'TEST'
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
//READ FROM CLIENT (POST)
$content = file_get_contents('php://input');
$post_data = json_decode($content , true);
$lat = $post_data['lat'];
$long = $post_data['long'];
$speed = $post_data['speed'];
$hacc = $post_data['hacc'];
$vacc = $post_data['vacc'];
$timestamp = $post_data['timestampe'];
//CONNECT TO MYSQL
$con1 = mysql_connect("localhost", "xxxxxxxx", "bbbbbb", "yyyyyy");
if ($con1->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$db_selected = mysql_select_db('yyyyyy');
if (!$db_selected) {
die ('Can''t use foo : ' . mysql_error());
}
if (!empty($lat)) {
$sql = "INSERT INTO LocationInfo (latitude, longitude, speed, hor_acc, ver_acc, d)
VALUES ('$lat', '$long', '$speed', '$hacc', '$vacc', '$timestamp');";
mysql_query($sql) or die ('Error updating database: ' . mysql_error());
}
$read_query = "SELECT * FROM LocationInfo;";
$results = mysql_query($read_query) or die ('Error reading from database: ' . mysql_error());
$column = array();
while($row = mysql_fetch_array($results)){
$column[] = $row;
}
$current_lat = $column[sizeof($column) - 1]['latitude'];
$current_long = $column[sizeof($column) - 1]['longitude'];
?>
Google Maps JavaScript 参考
您可以使用 marker.setPosition( new LatLng(...) )
更新标记,或者换句话说,只需分配一个新位置。在我看来,您是在输入字段中放置您的位置,而不是提交、读取字段并设置标记并将位置保存在数据库中。如果要更新标记的位置,可以再次使用输入字段,使用 JavaScript 读取字段值,然后更新标记的位置(使用 marker.setPosition())。如果要再次将其传递给数据库,可以使用 AJAX 另外将数据传递给脚本。这取决于你在做什么,想做什么。
评论后编辑
您可以设置一个JavaScript函数,该函数将向PHP脚本发出AJAX请求,并在获取数据后更新位置。然后每隔 x 秒调用一次脚本。使用 setTimeout
创建延迟,然后在获取数据后使函数使用另一个超时调用自身。省去麻烦,使用库来处理AJAX调用 - jQuery间接为您提供了很多支持,因为很多人都在使用它。你还需要确保你的PHP脚本除了位置信息之外不会给你任何回报,而不是像现在这样给你整个html文件。所以简化了这样的事情:你有一个PHP文件,它以JSON的形式发送lat/lng对,这个脚本大约每10秒从浏览器调用一次。当然,可能会冒出一些小东西...请注意,我不做PHP。
get_position.php
...
$latLng = array('lat' => $lat, 'lng' => $lng);
echo json_encode($latLng);
JS, using jQuery.ajax
var marker = ....
var delay = 10000; // 10 second delay
function updatePosition() {
$.ajax({
url: path/to/get_position.php,
dataType: 'json'
})
.done(function callDone(data) {
// update marker position
var latLng = new google.maps.LatLng( data.lat, data.lng );
marker.setPosition( latLng );
// call the function again
setTimeout( updatePosition, delay );
});
}
// call the function initally
setTimeout( updatePosition, delay );
- 获取用户位置并将坐标保存在数据库中
- Phonegap通过WiFi和移动网络而非GPS获取用户位置
- 谷歌地图:使用自定义标记显示当前用户位置
- 如何在地图上显示用户位置以及我的标记
- 如何使用“地图”在谷歌地图上显示用户位置;onclick”;作用
- 将 JavaScript 与 GWT 结合使用来获取用户位置,但变量不会被传递
- 在表单中提交用户位置
- 如何在脸书 API 中获取用户位置和用户家乡
- 如何使用jQuery或JavaScript从用户位置返回3个最近的位置
- 现在允许 GPS 时获取用户位置
- 如何使用谷歌地图跟踪用户位置和路线
- 如何使用 IP 地址 + 地理位置获取用户位置 Asp.Net.
- 使用Facebook Javascript SDK访问用户位置数据
- 转换特定日期&基于用户位置的时间到utc日期&时间
- 返回离用户位置(地理位置)最近的3个位置,并列出这些位置
- 地理定位api没有给出准确的用户位置
- JS-Can'找不到用户位置
- 为locationpicker.jquery.js设置当前用户位置
- 获取用户位置时,应用程序是科多瓦android应用程序的背景
- Jquery谷歌地图用户位置