Отобразить имя пользователя в подсказке к маркеру Карт Google?
У меня есть домашнее задание, в котором я должен отображать имя пользователя, который взаимодействует и сохраняет местоположение маркера Google Map. Мне трудно понять, как подойти к проблеме - я дошел до того, что получил заголовок / подсказку маркера, чтобы отобразить текущее имя пользователя для всех маркеров, но не могу понять, как я могу получить подсказку маркера, чтобы отобразить имя пользователя, который вошел в систему, который переместил его.
Вот код (я редактирую код, предоставленный профессором):
<?php
require_once "../../config.php";
require_once $CFG->dirroot."/pdo.php";
require_once $CFG->dirroot."/lib/lms_lib.php";
session_start();
// Sanity checks
$LTI = requireData(array('user_id', 'link_id', 'role','context_id'));
$instructor = isset($LTI['role']) && $LTI['role'] == 1 ;
$p = $CFG->dbprefix;
if ( isset($_POST['lat']) && isset($_POST['lng']) ) {
if ( abs($_POST['lat']) > 85 || abs($_POST['lng']) > 180 ) {
$_SESSION['error'] = "Latitude or longitude out of range";
header( 'Location: '.sessionize('index.php') ) ;
return;
}
$sql = "INSERT INTO {$p}sample_map
(context_id, user_id, lat, lng, displayname, updated_at)
VALUES ( :CID, :UID, :LAT, :LNG, :DN, NOW() )
ON DUPLICATE KEY
UPDATE lat = :LAT, lng = :LNG, displayname = :DN, updated_at = NOW()";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
':CID' => $LTI['context_id'],
':UID' => $LTI['user_id'],
':LAT' => $_POST['lat'],
':LNG' => $_POST['lng'],
':DN' => $LTI['displayname']));
$_SESSION['success'] = 'Location updated...';
header( 'Location: '.sessionize('index.php') ) ;
return;
}
// Retrieve our row
$stmt = $pdo->prepare("SELECT lat,lng FROM {$p}sample_map
WHERE context_id = :CID AND user_id = :UID");
$stmt->execute(array(":CID" => $LTI['context_id'], ":UID" => $LTI['user_id']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// The default for latitude and longitude
$lat = 42.279070216140425;
$lng = -83.73981015789798;
if ( $row !== false ) {
if ( abs($row['lat']) <= 90 ) $lat = $row['lat'];
if ( abs($row['lng']) <= 180 ) $lng = $row['lng'];
}
//Retrieve the other rows. Retrieve all the points other than you
//Add them to the points array. Made each row an array. Dump em out.
$stmt = $pdo->prepare("SELECT lat,lng,displayname FROM {$p}sample_map
JOIN {$p}lti_user
ON {$p}sample_map.user_id = {$p}lti_user.user_id
WHERE context_id = :CID AND {$p}sample_map.user_id <> :UID");
$stmt->execute(array(":CID" => $LTI['context_id'], ":UID" => $LTI['user_id']));
$points = array();
while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
if ( abs($row['lat']) > 90 ) $row['lat'] = 89;
if ( abs($row['lng']) > 180 ) $row['lng'] = 179;
$points[] = array($row['lat']+0.0,$row['lng']+0.0);
}
?>
<html><head><title>Map for
<?php echo($LTI['context_title']); ?>
</title>
<script src="//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript">
var map;
// https://developers.google.com/maps/documentation/javascript/reference
function initialize_map() {
var myLatlng = new google.maps.LatLng(<?php echo($lat.", ".$lng); ?>);
window.console && console.log("Building map...");
var myOptions = {
zoom: 2,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var marker = new google.maps.Marker({
draggable: true,
position: myLatlng,
map: map,
title: "Your location"
});
google.maps.event.addListener(marker, 'dragend', function (event) {
// getPosition returns a google.maps.LatLng class for
// for the dropped marker
window.console && console.log(this.getPosition());
// TODO: Fix these next two lines - search the web for a solution
document.getElementById("latbox").value = this.getPosition().lat();
document.getElementById("lngbox").value = this.getPosition().lng();
});
// Add the other points
window.console && console.log("Loading "+other_points.length+" points");
for ( var i = 0; i < other_points.length; i++ ) {
var row = other_points[i];
// if ( i < 3 ) { alert(row); }
var newLatlng = new google.maps.LatLng(row[0], row[1]);
var iconpath = '<?php echo($CFG->staticroot); ?>/static/img/icons/';
var icon = 'green.png';
var displayname = '<?php echo($LTI['user_displayname']) ?>';
var marker = new google.maps.Marker({
position: newLatlng,
map: map,
icon: iconpath + icon,
// TODO: See if you can get the user's displayname here
title : displayname,
});
}
}
// Load the other points
other_points =
<?php echo( json_encode($points));?>
;
</script>
</head>
<body style="font-family: sans-serif;" onload="initialize_map();">
<?php
if ( isset($_SESSION['error']) ) {
echo '<p style="color:red">'.$_SESSION['error']."</p>\n";
unset($_SESSION['error']);
}
if ( isset($_SESSION['success']) ) {
echo '<p style="color:green">'.$_SESSION['success']."</p>\n";
unset($_SESSION['success']);
}
?>
<div id="map_canvas" style="margin: 10px; width:500px; max-width: 100%; height:500px"></div>
<form method="post">
Latitude: <input size="30" type="text" id="latbox" name="lat"
<?php echo(' value="'.htmlent_utf8($lat).'" '); ?> >
Longitude: <input size="30" type="text" id="lngbox" name="lng"
<?php echo(' value="'.htmlent_utf8($lng).'" '); ?> >
<button type="submit">Save Location</button>
</form>
<?php
footerContent();
1 ответ
Эй, я не уверен, что вы в SI 364 или SI664, но в любом случае я сейчас работаю над тем же назначением. Что Сомеш (GSI) сказал мне сделать, это создать новый массив php, такой как массив для точек, и вставить display_names в этот массив. Затем найдите переменную other_points в коде и используйте аналогичную переменную javascript для имен. Затем посмотрите, как читаются other_points, и аналогичным образом прочитайте переменную для имени в функции карты Google. На самом деле я еще не понял, но, возможно, это может помочь вам.