使用AngularJS将标记添加到Google地图

4

我正在尝试使用Angular将JSON数据作为标记添加到谷歌地图中,但是遇到了问题。我的JSON数据如下:

 [
  {
    "_id": "TRK45679101121",
    "timestamp": "2015-02-03T09:18:02.989Z",
    "status": 1,
    "path": [
      {
        "timestamp": 51422955082989,
        "speed": 30,
        "direction": 45.510029,
        "longitude": 81.510029,
        "latitude": 8.675009
      }
    ]
  },
  {
    "_id": "TRK456799",
    "timestamp": "2015-02-03T09:18:02.989Z",
    "status": 1,
    "path": [
      {
        "timestamp": 51422955082989,
        "speed": 30,
        "direction": 45.510029,
        "longitude": 81.510029,
        "latitude": 8.675009
      }
    ]
  },
  {
    "_id": null,
    "timestamp": "2016-01-22T08:10:43.238Z",
    "status": null,
    "path": null
  }
]

您知道如何通过JavaScript读取这个信息然后集成到Google Maps API中吗?非常感谢您的帮助。

注意:我只需要实现纬度和经度。如果标记被点击,"_id"和"status"需要显示,这是我稍后要研究的内容。

1个回答

1
这是一个例子。Angular控制器使用全局变量mydata中包含的JSON数据,并将其用于向地图添加一些标记。标记的信息也可以在Angular $scope中获得。

var mydata = [{
  "_id": "TRK45679101121",
  "timestamp": "2015-02-03T09:18:02.989Z",
  "status": 1,
  "path": [{
    "timestamp": 51422955082989,
    "speed": 30,
    "direction": 45.510029,
    "longitude": 31.510029,
    "latitude": 8.675009
  }]
}, {
  "_id": "TRK456799",
  "timestamp": "2015-02-03T09:18:02.989Z",
  "status": 1,
  "path": [{
    "timestamp": 51422955082989,
    "speed": 30,
    "direction": 45.510029,
    "longitude": 32.510029,
    "latitude": 12.675009
  }]
}];

//Angular App Module and Controller
angular.module('mapsApp', [])
  .controller('MapCtrl', function($scope,$http) {

    var mapOptions = {
      zoom: 4,
      center: new google.maps.LatLng(31, 8),
      mapTypeId: google.maps.MapTypeId.TERRAIN
    }

    $scope.map = new google.maps.Map(document.getElementById('map'), mapOptions);

    $scope.markers = [];

    var infoWindow = new google.maps.InfoWindow();

    var createMarker = function(lat, lng) {

      var marker = new google.maps.Marker({
        map: $scope.map,
        position: new google.maps.LatLng(lat, lng),
        title: "lat: " + lat + ",lng: " + lng
      });

      $scope.markers.push(marker);

    }
    
    $http({method: 'GET', url: "http://maps.google.com/maps/api/geocode/json?address=Canada&sensor=true&region=USA"}).
        success(function(data, status) {
          $scope.status = status;
          $scope.JSONdata = data;
          console.log(JSON.stringify(data));
        }).
        error(function(data, status) {
          $scope.JSONdata = data || "Request failed";
          $scope.status = status;
          console.log($scope.data+$scope.status);
      });
    

    for (i = 0; i < mydata.length; i++) {
      console.log(mydata[i]["path"][0]["longitude"], mydata[i]["path"][0]["latitude"]);
      createMarker(mydata[i]["path"][0]["longitude"],mydata[i]["path"][0]["latitude"]);
    }

  });
#map {
  height: 420px;
}
<script src="https://maps.googleapis.com/maps/api/js?key=&sensor=false&extension=.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="mapsApp" ng-controller="MapCtrl">
  <H3>
Markers
</H3>
  <div id="class" ng-repeat="marker in markers | orderBy : 'title'">
    {{marker.position}}
  </div>
</div>

<div id="map"></div>

编辑:要从远程HTTP服务器检索JSON数据,请使用Angular的$http。在示例中,响应数据保存在$scope.JSONdata中,并可用于替代mydata


谢谢!这正是我所需要的。:) 不过,我有一个数据在 API 端点返回。有没有办法从端点调用数据到 Angular 脚本中? - Aashir shukla
糟糕,我的错。抱歉! - Aashir shukla
能否使用AngularJS从数据库响应数据来显示标记?我正在使用相同的代码,但是在AngularJS函数中作为响应从数据库获取数据。这是我的问题链接:https://stackoverflow.com/questions/46461477/loading-address-data-into-google-maps-from-database-using-angularjs/46462236?noredirect=1#comment79880086_46462236 - Sachin HR
如果你有时间,请浏览一下。这会非常有帮助。 - Sachin HR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接