Google 地图不适用于 android 模拟器离子框架 (navigator.geolocation.getCurrentPosition)
Google maps not working on android emulator ionic framework (navigator.geolocation.getCurrentPosition)
我的应用程序在浏览器上运行良好,但无法在模拟器上呈现 google 地图。
此应用程序基于现有应用程序,该应用程序已有 google 地图在模拟器(和设备)上运行良好
我认为因为 navigator.geolocation.getCurrentPosition 它没有触发。
我用 AndroidManifest.xml 编辑了
但我仍然有这个问题。
这是我的控制器:
.controller('MapsCtrl', function($scope, Service, $ionicLoading, $ionicPopup, $compile) {
$ionicLoading.show();
Service.getSedi().then(function(result){
var sede = result.data[0];
navigator.geolocation.getCurrentPosition(function(pos){
var myPosition = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
var map = new GMaps({
div: '#maps',
lat: pos.coords.latitude,
lng: pos.coords.longitude
});
map.addMarker({
lat: sede.indirizzo.lat,
lng: sede.indirizzo.lng,
title: sede.titolo,
infoWindow: {
content: '<h3>' + sede.titolo+ '</h3><p style="color:black">' + sede.indirizzo.address +'</p>'
}
});
//reverse geocoding (from coordinates get human readable address)
var geocoder = new google.maps.Geocoder();
var opt = {
lat : pos.coords.latitude,
lng : pos.coords.longitude,
callback : function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.log(results[1].formatted_address + ' ' + myPosition);
map.addMarker({
position: myPosition,
infoWindow:{
content: '<h3>Estas aquí</h3><p style="color:black">' + results[1].formatted_address + '</p>'
}
});
}
}
};
GMaps.geocode(opt);
//end reverse geocoding
map.drawRoute({
origin: [pos.coords.latitude,pos.coords.longitude],
destination:[sede.indirizzo.lat,sede.indirizzo.lng],
travelMode: 'driving',
strokeColor: '#131540',
strokeOpacity: 0.6,
strokeWeight: 6
});
//search places
var arrayId = [];
map.addLayer('places', {
location : new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude),
radius : 600,
types : ['cafe', 'bar', 'food'],
search: function (results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
//here I can use place.place_id
arrayId.push(place.place_id);
map.addMarker({
lat: place.geometry.location.lat(),
lng: place.geometry.location.lng(),
title : place.name,
infoWindow : {
content : '<h3>'+place.name+'</h3><p style="color:black">'+(place.vicinity ? place.vicinity : place.formatted_address)+'</p><img src="'+place.icon+'"" height="20px"/>'
}
});
}
}
}
});
//map.zoomOut(5);
//Creo el div y los botones
var node = document.createElement("div");
var text = document.createTextNode("ACA VAN LOS BOTONES");
node.appendChild(text);
node.setAttribute("id", "mapBottom");
document.getElementById("maps").appendChild(node);
},function(error){
$ionicPopup.alert({
title: 'Error',
template: 'code: ' + error.code + '\n' + 'message: ' + error.message + '\n'
});
});
$ionicLoading.hide();
},function(){
$ionicLoading.hide();
$ionicPopup.alert({
title : "Error",
template : "Server Error!<br>Restart Application!"
});
});
})
有什么想法吗?
提前致谢!
这是因为模拟器没有 GPS,无法像您在带有 GPS 的设备上看到的那样进行实时更新。
有一些方法可以在模拟器中测试应用的地理空间功能的行为。不过,您必须为此做一些工作。
这里有一些参考:
对于Android connect emulator through Telnet. (Useful Answer)
我的应用程序在浏览器上运行良好,但无法在模拟器上呈现 google 地图。 此应用程序基于现有应用程序,该应用程序已有 google 地图在模拟器(和设备)上运行良好 我认为因为 navigator.geolocation.getCurrentPosition 它没有触发。 我用 AndroidManifest.xml 编辑了 但我仍然有这个问题。 这是我的控制器:
.controller('MapsCtrl', function($scope, Service, $ionicLoading, $ionicPopup, $compile) {
$ionicLoading.show();
Service.getSedi().then(function(result){
var sede = result.data[0];
navigator.geolocation.getCurrentPosition(function(pos){
var myPosition = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
var map = new GMaps({
div: '#maps',
lat: pos.coords.latitude,
lng: pos.coords.longitude
});
map.addMarker({
lat: sede.indirizzo.lat,
lng: sede.indirizzo.lng,
title: sede.titolo,
infoWindow: {
content: '<h3>' + sede.titolo+ '</h3><p style="color:black">' + sede.indirizzo.address +'</p>'
}
});
//reverse geocoding (from coordinates get human readable address)
var geocoder = new google.maps.Geocoder();
var opt = {
lat : pos.coords.latitude,
lng : pos.coords.longitude,
callback : function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.log(results[1].formatted_address + ' ' + myPosition);
map.addMarker({
position: myPosition,
infoWindow:{
content: '<h3>Estas aquí</h3><p style="color:black">' + results[1].formatted_address + '</p>'
}
});
}
}
};
GMaps.geocode(opt);
//end reverse geocoding
map.drawRoute({
origin: [pos.coords.latitude,pos.coords.longitude],
destination:[sede.indirizzo.lat,sede.indirizzo.lng],
travelMode: 'driving',
strokeColor: '#131540',
strokeOpacity: 0.6,
strokeWeight: 6
});
//search places
var arrayId = [];
map.addLayer('places', {
location : new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude),
radius : 600,
types : ['cafe', 'bar', 'food'],
search: function (results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
//here I can use place.place_id
arrayId.push(place.place_id);
map.addMarker({
lat: place.geometry.location.lat(),
lng: place.geometry.location.lng(),
title : place.name,
infoWindow : {
content : '<h3>'+place.name+'</h3><p style="color:black">'+(place.vicinity ? place.vicinity : place.formatted_address)+'</p><img src="'+place.icon+'"" height="20px"/>'
}
});
}
}
}
});
//map.zoomOut(5);
//Creo el div y los botones
var node = document.createElement("div");
var text = document.createTextNode("ACA VAN LOS BOTONES");
node.appendChild(text);
node.setAttribute("id", "mapBottom");
document.getElementById("maps").appendChild(node);
},function(error){
$ionicPopup.alert({
title: 'Error',
template: 'code: ' + error.code + '\n' + 'message: ' + error.message + '\n'
});
});
$ionicLoading.hide();
},function(){
$ionicLoading.hide();
$ionicPopup.alert({
title : "Error",
template : "Server Error!<br>Restart Application!"
});
});
})
有什么想法吗? 提前致谢!
这是因为模拟器没有 GPS,无法像您在带有 GPS 的设备上看到的那样进行实时更新。
有一些方法可以在模拟器中测试应用的地理空间功能的行为。不过,您必须为此做一些工作。
这里有一些参考:
对于Android connect emulator through Telnet. (Useful Answer)