Ionic/Angular JS - 从Reverse Geolocation获取特定值

And*_*rei 5 geolocation angularjs ionic-framework

我正在使用Ionic/Angular JS构建一个App.在特定标签中,该应用可以自动填写某些表单字段,如街道名称,街道号码等.我的问题是,在某些情况下,街道号码不可用,data[0].address_components[0].long_name而是填写街道名称.

这是我使用的代码:

.controller('PetitionsCtrl', function($scope, $cordovaGeolocation, $cordovaCamera, $log, $ionicLoading, $http, $timeout, $compile, Upload) {


  $scope.getLocation = function() {
    $ionicLoading.show({
      templateUrl: 'loading.html',
      hideOnStateChange: true
    });
      var posOptions = {timeout: 15000, enableHighAccuracy: true};
      $cordovaGeolocation
      .getCurrentPosition(posOptions)
      .then(function (position) {
        $scope.lat = position.coords.latitude;
        $scope.lng = position.coords.longitude;
        $scope.pLat = {value: $scope.lat};
        $scope.pLng = {value: $scope.lng};

        var geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng($scope.lat, $scope.lng);
        var request = {
          latLng: latlng
        };

        geocoder.geocode(request, function(data, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (data[0] != null) {
              $scope.$apply(function () {
                $scope.pStreet = {value: data[0].address_components[1].long_name};
                $scope.pNumber = {value: data[0].address_components[0].long_name};
                $scope.pCity = {value: data[0].address_components[2].long_name};
                $scope.pAddress = {value: data[0].formatted_address};
                setTimeout(function () {
                  $ionicLoading.hide();
                }, 500);
              });
            } else {
              $log.log("Adresa indisponibila");
              setTimeout(function () {
                $ionicLoading.hide();
              }, 500);
            }
          }
        })
      });
    };
})
Run Code Online (Sandbox Code Playgroud)

以下是Google的示例回复:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Pkwy",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}
Run Code Online (Sandbox Code Playgroud)

如何更改我的代码,以便"types"在读取值之前检查该值,如果不可用则将其留空.为了更加特别,而不是data[0].address_components[0].long_name用来获得街道号码,我想得到如果"types"谷值"street_number".

Rya*_*ker 0

我的理解是,如果类型值等于street_number您想要获取该值,否则您想要将空作为值''

geocoder.geocode(request, function(data, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (data[0] != null) {
              $scope.$apply(function () {
                $scope.pStreet = {value: data[0].address_components[1].long_name};
                $scope.pNumber = {value: data[0].address_components[0].types[0] === 'street_number' ? data[0].address_components[0].long_name : ''};
                $scope.pCity = {value: data[0].address_components[2].long_name};
                $scope.pAddress = {value: data[0].formatted_address};
                setTimeout(function () {
                  $ionicLoading.hide();
                }, 500);
              });
            } else {
              $log.log("Adresa indisponibila");
              setTimeout(function () {
                $ionicLoading.hide();
              }, 500);
            }
          }
        })
Run Code Online (Sandbox Code Playgroud)