【问题标题】:Directions markers for Google Maps in AngularJSAngularJS中谷歌地图的方向标记
【发布时间】:2015-11-30 12:10:50
【问题描述】:

我一直在互联网上寻找解决方案 - 但没有运气。 我正在 Umbraco (AngularJS) 中建立一个网站 - 我使用 UI-Google-Map 插件 - 效果很好!

我已经实现了路线指示,它就像一个魅力 - 我唯一的问题是,当路线显示在地图上时,我无法更改“A”和“B”图标。

这是我的作用域的样子:

$scope.map = {
            center: {
                latitude: 55.711898,
                longitude: 9.5387363
            },
            zoom: 12,
            events: {
                'tilesloaded': function (map) {
                    if (load) {
                        $timeout(function () {
                            maps.event.trigger(map, "resize");
                            var marker = new maps.Marker({
                                position: center,
                                map: map,
                                icon: biscuitIcon
                            });
                            marker.setMap(map);
                            map.setCenter(marker.getPosition());
                            directionsDisplay.setMap(map);
                        }, 500);
                        load = false;
                    } else {
                        maps.event.trigger(map, "resize");
                    }
                }
            },
            options: {
                disableDefaultUI: true,
                zoomControl: false,
                styles: [{'featureType':'water','elementType':'all','stylers':[{'color':'#f0f0f0'}]},{'featureType':'landscape','elementType':'geometry','stylers':[{'color':'#cccccc'}]},{'featureType':'road.highway','elementType':'geometry','stylers':[{'color':'#000000'}]},{'featureType':'road.arterial','elementType':'geometry.fill','stylers':[{'color':'#363636'}]},{'featureType':'poi.park','elementType':'geometry','stylers':[{'color':'#cccccc'}]},{'featureType':'poi.attraction','elementType':'geometry.fill','stylers':[{'color':'#cccccc'}]}]
            },
            control: {}
        };

当您填写“发件人”-“收件人”表格时,会发生以下情况:

$scope.getDirections = function(){
            directionsService.route({
                origin: $scope.startlocation,
                destination: $scope.endlocation,
                optimizeWaypoints: true,
                travelMode: google.maps.TravelMode.DRIVING
            }, function(response, status) {
                if (status === google.maps.DirectionsStatus.OK) {
                    directionsDisplay.setDirections(response);
                    var route = response.routes[0].legs[0];
                  directionsDisplay.setPanel(document.getElementById('directions-panel'));
                } else {
                    if(status === 'NOT_FOUND') {
                        window.alert('No results - Please try again');
                    }
                }
            });
        }

我已经尝试过“makeMarker”方法(@​​987654321@)但没有运气。你们谁能指出我的头撞墙的地方吗?

哦,顺便说一句。我在使用“makeMarker”时尝试“console.log”信息 - 所有信息都显示在我的控制台中,但它没有出现在我的地图上:(我现在非常绝望......

提前致谢! / 咕咕

【问题讨论】:

    标签: javascript angularjs google-maps google-maps-api-3


    【解决方案1】:

    对于放置标记,您可以使用ui-gmap-markers 指令。以下示例显示了如何打印路线和设置结束/开始样式标记:

    var appMaps = angular.module('appMaps', ['uiGmapgoogle-maps']);
    appMaps.controller('mainCtrl', function ($scope, uiGmapIsReady, $log) {
    
        $scope.startlocation = 'New York, NY';
        $scope.endlocation = 'San Diego, California';
        $scope.markers = [];
        $scope.icons = {
            start: {
                url: 'http://maps.google.com/mapfiles/ms/micons/blue.png',
                size: { width: 44, height: 32 },
                origin: { x: 0, y: 0 },
                anchor: { x: 22, y: 32 }
            },
            end: {
                url: 'http://maps.google.com/mapfiles/ms/micons/green.png',
                size: { width: 44, height: 32 },
                origin: { x: 0, y: 0 },
                anchor: { x: 22, y: 32 }
            }
        };
        $scope.map = {
            center: {
                latitude: 55.711898,
                longitude: 9.5387363
            },
            zoom: 12,
            options: {
                disableDefaultUI: true,
                zoomControl: false,
                styles: [{ 'featureType': 'water', 'elementType': 'all', 'stylers': [{ 'color': '#f0f0f0' }] }, { 'featureType': 'landscape', 'elementType': 'geometry', 'stylers': [{ 'color': '#cccccc' }] }, { 'featureType': 'road.highway', 'elementType': 'geometry', 'stylers': [{ 'color': '#000000' }] }, { 'featureType': 'road.arterial', 'elementType': 'geometry.fill', 'stylers': [{ 'color': '#363636' }] }, { 'featureType': 'poi.park', 'elementType': 'geometry', 'stylers': [{ 'color': '#cccccc' }] }, { 'featureType': 'poi.attraction', 'elementType': 'geometry.fill', 'stylers': [{ 'color': '#cccccc' }] }]
            },
            control: {}
        };
    
        
    
    
        uiGmapIsReady.promise()
        .then(function (instances) {
            printRoute();
        });
    
    
    
        var printRoute = function () {
    
            var directionsService = new google.maps.DirectionsService();
            var directionsRequest = {
                origin: $scope.startlocation,
                destination: $scope.endlocation,
                optimizeWaypoints: true,
                travelMode: google.maps.TravelMode.DRIVING
            };
    
            directionsService.route(directionsRequest, function (response, status) {
                if (status === google.maps.DirectionsStatus.OK) {
                    var map = $scope.map.control.getGMap();
                    var directionsDisplay = new google.maps.DirectionsRenderer({
                        map: map,
                        directions: response,
                        suppressMarkers: true
                    });
    
                    var leg = response.routes[0].legs[0];
                    setMarker(0,leg.start_location, $scope.icons.start, 'title');
                    setMarker(1,leg.end_location, $scope.icons.end, 'title');
    
                } else {
                    $log.error('Request failed: ' + status);
                }
            });
        }
    
    
        var setMarker = function (id,latLng, icon, title) {
            var markerInfo = {
                id: id,
                latitude: latLng.lat(),
                longitude: latLng.lng(),
                title: title,
                icon: icon
            };
            $scope.markers.push(markerInfo);
        };
    
    
    });
    .angular-google-map-container {
        position: absolute;
        top: 0;
        bottom: 0;
        right: 0;
        left: 0;
    }
    <script src="https://code.angularjs.org/1.3.14/angular.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
    <script src="http://rawgit.com/angular-ui/angular-google-maps/2.0.X/dist/angular-google-maps.js"></script>
    <div id="map_canvas" ng-app="appMaps" ng-controller="mainCtrl">
            <ui-gmap-google-map center="map.center" zoom="map.zoom" control="map.control" options="map.options" events="map.events">
                <ui-gmap-markers models="markers" coords="'self'" icon="'icon'">
                </ui-gmap-markers>
            </ui-gmap-google-map>
    </div>

    Plunker

    【讨论】:

    • 嗨瓦迪姆!是的——终于!伟大的工作 - 非常感谢你!现在我有一个小问题 - 当我在其中一个字段中输入我的地址时,它会完美地找到路线。但是当我输入一个新地址时 - 旧路线仍然存在(!)......有什么想法吗?我现在会尝试调查它 - 如果我找到答案,我会确保发布它:)
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多