Я сейчас пользуюсь расширение EGmap для Yii. и мне было интересно, как получить текущую геолокацию пользователей при загрузке карты?
Вот мой код:
Yii::app()->clientScript->registerScript('filterscript',"if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
alert(initialLocation)
//map.setCenter(initialLocation);
}, function() {
alert(initialLocation); //alerts the lat lng
});
}
// Browser doesn't support Geolocation
else {
alert('fail');
}
",CClientScript::POS_READY);
Yii::import('ext.EGMap.*');
$gMap = new EGMap();
$gMap->zoom = 5;
$gMap->width = '100%';
$gMap->height = 200;
$mapTypeControlOptions = array(
'position'=> EGMapControlPosition::RIGHT_TOP,
'style'=>EGMap::MAPTYPECONTROL_STYLE_DEFAULT,
);
$gMap->mapTypeId = EGMap::TYPE_HYBRID;
$gMap->mapTypeControlOptions= $mapTypeControlOptions;
// Create geocoded lat and lng here
$lat = $lng ='';
// Center the map on geocoded address
$gMap->setCenter($lat, $lng);
// Add marker on geocoded address
$gMap->addMarker(
new EGMapMarker($lat, $lng)
);
$gMap->renderMap();
Если расширение не используется, заставьте его работать с этим. (учебник со страницы API Google Map)
var map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
// Try W3C Geolocation (Preferred)
if(navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
map.setCenter(initialLocation);
}, function() {
handleNoGeolocation(browserSupportFlag);
});
}
// Browser doesn't support Geolocation
else {
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
как поместить маркер lat lang пользователей на карту, так как это сделано вне расширения? Я даже делаю это правильно?
Первый набор jsName:
$gMap->setJsName('test_map');
Затем добавьте afterInit
код для renderMap
вызов, включая имя из предыдущего шага:
$script = "if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
alert(initialLocation)
test_map.setCenter(initialLocation); // <-- HERE: put name from setJsName() call
}, function() {
alert(initialLocation); //alerts the lat lng
});
}
// Browser doesn't support Geolocation
else {
alert('fail');
}
";
Параметр Fistst является массивом дополнительных скриптов инициализации:
$gMap->renderMap(array($script));
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Не проверено, но должно указывать правильное направление 🙂
Других решений пока нет …