Javascript 谷歌地图渲染不正确

Javascript 谷歌地图渲染不正确,javascript,html,angularjs,google-maps,Javascript,Html,Angularjs,Google Maps,我是Gmap新手。我正在尝试在我的html中加载may map。但是只显示了一个灰色的div。请参见此图: 我知道有很多解决方案,我几乎都试过了。因为我认为这是因为在加载google地图时,我的dom没有完全加载。例如,我试图使用google.maps.event.addDomListener(窗口“加载”,初始化映射); 但是我想要一些能够监听我的特定div的东西来加载,而不是我所有的html。 这是我的html: <div ng-init=initMainMap()>

我是Gmap新手。我正在尝试在我的html中加载may map。但是只显示了一个灰色的div。请参见此图: 我知道有很多解决方案,我几乎都试过了。因为我认为这是因为在加载google地图时,我的dom没有完全加载。例如,我试图使用google.maps.event.addDomListener(窗口“加载”,初始化映射); 但是我想要一些能够监听我的特定div的东西来加载,而不是我所有的html。 这是我的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);

                        })
                    });
                }


            }
$scope.initMainMap=函数(){
$scope.getFavoriteAddress()
var标记;
$scope.buy\地址\地图;
$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信息;
var标记;
变量映射选项={
中心:购物中心,
缩放:13,
mapTypeControl:false,
街景控制:错误,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById('mapGoogle')、mapOptions)
geocoder=新的google.maps.geocoder();
google.maps.event.addListenerOnce(map'idle',function(){
控制台日志(“已加载”)
});
////////多自动路线多航路点,多服务//////////////
var routeService=“谷歌”//或OSM\u您的
var routeMode=“drive”/bicycle,foot,motorcar//Google=骑自行车
var routeMarkers=[];//用于路线分支/步骤
var RouteMarkerArray=[];//保留不同路由的所有RouteMarker
var routeLinesArray=[];//保留不同路由的所有路由
addMarker(购物,假)
var-setRM=0;
setRouteMarker()
函数setRouteMarker(){
如果(setRM==0){//启动新路由
//var prop={};
//prop.style.color=“红色”;
//prop.style.fontwweight=“bold”;
var temp=google.maps.event.addListener(映射,'click',函数(事件){
添加标记(event.latLng,true)
});
directionsService=new google.maps.directionsService();
setOptions({draggableCursor:'crosshair'});
setRM=1;
}否则{//完成一条路线
setOptions({draggableCursor:null});
google.maps.event.removeListener(temp);
routeMarkersArray.push(routeMarkers)
路由标记=[];
路线排列。推(路线)
路由阵列=[];
var-routeKM=0;
setRM=0;
}
}
var pinRed={
网址:'http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_red.png',
};
变量pinYellow={
网址:'http://maps.gstatic.com/mapfiles/ridefinder-images/mm_20_yellow.png',
};
//你的方向服务//
功能添加标记(板条、拖动){
var mTitle=“wp:”+routeMarkers.length;
marker=新的google.maps.marker({
位置:latlng,
图标:品红色,
地图:地图,
//标题:mTitle,//latlng.toUrlValue(6),
可拖动:拖动
})
marker.uid=routeMarkers.length;
addRouteMarkerListener();
路线标记器。推(标记器);
routeService=“谷歌”
routeMode=“驱动器”;
如果(routeMarkers.length>1){
如果(routeService==“谷歌”){
calcGoogleRoute()
}
;
}
}
函数addRouteMarkerListener(){
google.maps.event.addListener(标记'dragend',函数(e){
uid=this.uid;
console.log(“wp:+uid”);
如果(uid>0){//移动中间和最后一个标记的路径
控制台日志(“路由1”)
moveRoute(uid-1);//调用sube进行计算
如果(uid