我是Gmap的新手。我试图在HTML中加载可能的地图。但是只显示了一个灰色的div。看到这张图片:image 我知道有很多解决方案,而我几乎都尝试过。因为我认为这是因为在加载Google地图时,我的dom并未完全加载。例如我正在尝试使用google.maps.event.addDomListener(window,'load',initialize_map); 但是我想要某种可以监听我特定div的东西来加载。 这是我的html:
<div ng-init=initMainMap()>
<div ng-show="selectMap" class="row" id="mapLoaded">
<!--<div class="sevenmargin" ng-include="'view/getAddress.html'"></div>-->
<!--<div id="yourMap"></div>-->
<div id="mapGoogle" style="height: 800px;
width: 1000px;
margin-right: 2%;
overflow: hidden;"></div>
<br>
<div class="form-group row">
<label class="col-lg-2 col-form-label">آدرس </label>
<div class="col-lg-10 input-group-check"
valid="{{!account.buy_address_map.$invalid}}">
<input type="text" name="buy_address_map" ng-model="buy_address_map"
ng-minlength="3" class="form-control controlinput"
placeholder="آدرس ">
</div>
</div>
</div>
</div>
和我的js:
$scope.initMainMap = function () {
$scope.getFavoriteAddress()
var marker;
$scope.buy_address_map;
$scope.myLatLng = new google.maps.LatLng(32.64654244393823,51.66769295233155)
var shopLatLng = {
lat: parseFloat(JSON.parse(localStorage.getItem('shop_lat'))),
lng: parseFloat(JSON.parse(localStorage.getItem('shop_long')))
};
// var map = null;
var geocoder = null;
var directionsService = null;
var info;
var marker;
var mapOptions = {
center: shopLatLng,
zoom: 13,
mapTypeControl: false,
streetViewControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('mapGoogle'), mapOptions)
geocoder = new google.maps.Geocoder();
google.maps.event.addListenerOnce(map, 'idle', function(){
console.log("loaded")
});
//////// muliple autoroute multiple waypoints, multiple service //////////////
var routeService = "GOOGLE" //or OSM_YOURS
var routeMode = "drive" //bicycle, foot, ,motorcar //Google = BICYCLING
var routeMarkers = []; // for route legs/steps
var routeMarkersArray = []; //keep all routemarkers of differnt routes
var routeLinesArray = []; //keep all routeLines of differnt routes
addMarker(shopLatLng, false)
var setRM = 0;
setRouteMarker()
function setRouteMarker() {
if (setRM == 0) { //start a new route
// var prop = {};
// prop.style.color = "red";
// prop.style.fontWeight = "bold";
var temp = google.maps.event.addListener(map, 'click', function (event) {
addMarker(event.latLng, true)
});
directionsService = new google.maps.DirectionsService();
map.setOptions({draggableCursor: 'crosshair'});
setRM = 1;
} else { //finish a route
map.setOptions({draggableCursor: null});
google.maps.event.removeListener(temp);
routeMarkersArray.push(routeMarkers)
routeMarkers = [];
routeLinesArray.push(routeLines)
routeLinesArray = [];
var routeKM = 0;
setRM = 0;
}
}
var pinRed = {
url: 'http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_red.png',
};
var pinYellow = {
url: 'http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_yellow.png',
};
// OSM YOURS DIRECTION Service//
function addMarker(latlng, drag) {
var mTitle = "wp: " + routeMarkers.length;
marker = new google.maps.Marker({
position: latlng,
icon: pinRed,
map: map,
//title: mTitle, //latlng.toUrlValue(6),
draggable: drag
})
marker.uid = routeMarkers.length;
addRouteMarkerListener();
routeMarkers.push(marker);
routeService = "GOOGLE"
routeMode = "drive";
if (routeMarkers.length > 1) {
if (routeService == "GOOGLE") {
calcGoogleRoute()
}
;
}
}
function addRouteMarkerListener() {
google.maps.event.addListener(marker, 'dragend', function (e) {
uid = this.uid;
console.log("wp:" + uid);
if (uid > 0) { //move route for middle and last marker
console.log("Route1")
moveRoute(uid - 1); // call sube for calc
if (uid < routeMarkers.length - 1) {
moveRoute(uid);
}
}
//move route for first point
if (uid == 0) {
routeLine = routeLines[0];
routeKM = routeKM - routeLine.km
routeLine.setMap(null);
if (routeService == "GOOGLE") {
calcGoogleRoute(1)
}
;
}
}); //< dragend
google.maps.event.addListener(marker, 'rightclick', function (e) {
uid = this.uid;
console.log("remove wp:" + uid);
if (uid == 0) {
console.log("do nothing")
}
else if (uid == routeMarkers.length - 1) {
routeMarkers[uid].setMap(null);
routeMarkers.splice(uid, 1); //delete first element
routeLine = routeLines[uid - 1];
routeKM = routeKM - routeLine.km
routeLine.setMap(null);
if (routeLines.length == 1) {
routeLines = [];
routeKM = 0;
// info.innerHTML = routeKM + " km / " + routeMarkers.length + " wpts";
} else {
routeLines.splice(uid - 1, 1);
}
}
// middle Marker (uid), del route before and after (uid - 1), calc new route
if (uid > 0 && uid < routeMarkers.length - 1) {
routeMarkers[uid].setMap(null);
routeMarkers.splice(uid, 1); //delete first element
//entfernt nachfolgende Route
console.log("Del nachfolgende Route: " + uid + " von gesamt Routen: " + routeLines.length)
routeLine = routeLines[uid];
routeKM = routeKM - routeLine.km
routeLine.setMap(null);
routeLines.splice(uid, 1);
renumber();
console.log("Del/Replace vorhergehende Route: " + (uid - 1) + " von gesamt Routen: " + routeLines.length);
routeLine = routeLines[uid - 1];
routeKM = routeKM - routeLine.km
routeLine.setMap(null);
console.log("calc neue Route: " + (uid - 1));
if (routeService == "GOOGLE") {
calcGoogleRoute(uid)
}
;
}
}); //< rightclick
} //< end routeMarkerListener
function renumber() {
console.log("renumber");
for (var i = 0; i < routeMarkers.length; i++) {
console.log("renumber Marker:" + i);
routeMarkers[i].uid = i;
routeMarkers[i].setTitle = "wp: " + i;
}
for (var i = 0; i < routeLines.length; i++) {
console.log("renumber Lines: " + i);
routeLine = routeLines[i]
routeLines.uid = i;
}
}
function moveRoute(uid) { //sub for dragend routemarker
console.log("Route2"); //routline after Marker
routeLine = routeLines[uid];
routeKM = routeKM - routeLine.km;
routeLine.setMap(null);
if (routeService == "GOOGLE") {
calcGoogleRoute(uid + 1)
}
;
}
function wait(ms) { //not in use
var start = new Date().getTime();
var end = start;
while (end < start + ms) {
end = new Date().getTime();
}
}
function httpGet(theUrl) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", theUrl, false); //asyncron = true doesn't work correct.
xhttp.send();
var result = xhttp.responseText;
console.log("result", result)
return result;
//Notes from:http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
//Using async=false is not recommended, but for a few small requests this can be ok.
//Remember that the JavaScript will NOT continue to execute, until the server response is ready.
//If the server is busy or slow, the application will hang or stop.
//Note: When you use async=false, do NOT write an onreadystatechange function -
// just put the code after the send() statement:
}
function calcGoogleRoute(index) {
if (typeof(index) == 'undefined') {
index = "new";
var rStart = routeMarkers[routeMarkers.length - 2].getPosition();
var rEnd = routeMarkers[routeMarkers.length - 1].getPosition();
} else {
var rStart = routeMarkers[index - 1].getPosition();
var rEnd = routeMarkers[index - 0].getPosition();
}
request = {
origin: rStart,
destination: rEnd
};
if (routeMode == "drive") {
request.travelMode = google.maps.DirectionsTravelMode.DRIVING
}
directionsService.route(request, function (result, status) {
if (status == google.maps.DirectionsStatus.OK) {
path = result.routes[0].overview_path
var sumKM = 0;
var sumTime = 0;
var myroute = result.routes[0];
for (var i = 0; i < myroute.legs.length; i++) {
sumKM += myroute.legs[i].distance.value;
sumTime += myroute.legs[i].duration.value;
}
sumKM = sumKM / 1000;
console.log("Route calculated, write the route")
writeRoute(path, sumKM, index, sumTime)
} else if (status == google.maps.DirectionsStatus.ZERO_RESULTS) {
// alert("Could not find a route between these points");
} else {
// alert("Directions request failed");
}
});
}
var routeLine = null;
var routeLines = [];
var routeKM = 0;
var routeTime = 0;
function writeRoute(path, routekm, index, routetime) {
console.log("Write Route: " + (index - 1));
color = "grey"
if (routeService == "GOOGLE") {
color = 'blue'
}
;
if (routeService == "OSM_YOURS") {
color = 'grey'
}
;
var polyOptions = {
map: map,
path: path,
strokeColor: color,
strokeOpacity: 1.0,
strokeWeight: 3,
editable: false
};
routeLine = new google.maps.Polyline(polyOptions);
routeLine.km = routekm;
routeLine.service = routeService;
routeLine.mode = routeMode;
routeLine.uid = routeLines.length;
addRouteLineListener();
if (index == "new") {
console.log("new route:" + (routeLines.length));
routeLines.push(routeLine);
} else {
console.log("replace route:" + (index - 1));
routeLine.uid = index - 1;
routeLines[index - 1] = routeLine;
}
routeKM += routekm;
routeTime += routetime;
//u r ganna need this
// info.innerHTML = routeKM + " km / " + routeMarkers.length + " wpts / " + routeTime + " time";
var distance = routekm;
console.log("distance", distance);
}
var tempMarker = null;
function addRouteLineListener() {
google.maps.event.addListener(routeLine, 'click', function (event) {
//set temp marker and save route line id
lid = this.uid
latlng = event.latLng
geocoder.geocode({'latLng': latlng}, function (results, status) {
console.log("result for geocode", results[0].formatted_address)
if (status == google.maps.GeocoderStatus.Ok) {
if (result[0]) {
$('#latitude,#longitude').show();
$('#address').val(results[0].formatted_address);
$('#latitude').val(marker.getPosition().lat());
$('#longitude').val(marker.getPosition().lng());
infowindow.setContent(results[0].formatted_address);
infowindow.open(map, marker);
$scope.buy_address_map = results[0].formatted_address
}
}
});
if (tempMarker) tempMarker.setMap(null);
tempMarker = new google.maps.Marker({
position: latlng,
icon: pinYellow,
map: map,
title: "Remove to insert Route",
draggable: true
})
tempMarker.lid = lid;
// set listener for temp marker
// rightclick del tempmarker
google.maps.event.addListener(tempMarker, 'rightclick', function () {
tempMarker.setMap(null);
})
//dragend replace temmarker und calc inserted routes
google.maps.event.addListener(tempMarker, 'dragend', function (e) {
//replace marker
lid = this.lid
latlng = e.latLng
if (tempMarker) tempMarker.setMap(null);
marker = new google.maps.Marker({
position: latlng,
icon: pinRed,
map: map,
//title: mTitle, //latlng.toUrlValue(6),
draggable: true
})
marker.uid = lid + 1;
addRouteMarkerListener();
routeMarkers.splice(lid + 1, 0, marker);
renumber();
// write first route
routeLine = routeLines[lid];
routeKM = routeKM - routeLine.km
routeLine.setMap(null);
routeService = document.getElementById("rtService").value;
routeMode = document.getElementById("rtMode").value;
if (routeService == "GOOGLE") {
calcGoogleRoute(lid + 1)
}
;
// write second route
routeLines.splice(lid + 1, 0, routeLines[lid]); //insert new item
renumber();
if (routeService == "GOOGLE") {
calcGoogleRoute(lid + 2)
}
;
console.log("routlines: " + routeLines.length);
})
});
}
}