【问题标题】:Google Map API - ReferenceError: google is not defined谷歌地图 API - ReferenceError:谷歌未定义
【发布时间】:2020-09-20 20:22:00
【问题描述】:

我正在通过学​​习谷歌的基本示例来学习创建谷歌地图。 我使用 Angular Google Maps 在我的 Angular 9 应用程序中显示谷歌地图。 我在控制台中收到错误(未捕获的 ReferenceError: google is not defined)。我只想计算地图中点之间的距离。

home.component.ts

import { Component, OnInit } from '@angular/core';
declare var google: any;
@Component({

selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']

})
export class HomeComponent implements OnInit {



location: Location
selectedMarker: Marker
origin: any;
destination: any;
distance: String;



ngOnInit(){


this.distance = this.calculateDistance(this.origin, this.destination);



this.origin = { 
  lat: 32.6950, 
  lng: 35.2820 
};
this.destination = { 
  lat: 32.6050, 
  lng: 35.2020 
};

this.location = {
  latitude: 32.6950,
  longitude: 35.2820,
  zoom: 15,
  markers: [
      {
          lat: 32.6950,
          lng: 35.2820
      }
  ]
  }



 this.loadScript('assets/js/jquery-3.3.1.min.js');
 this.loadScript('assets/vendors/appear/jquery.appear.min.js');
 this.loadScript('assets/vendors/jquery.easing/jquery.easing.min.js');
 this.loadScript('assets/js/popper.min.js');
 this.loadScript('assets/js/bootstrap.min.js');
 this.loadScript('assets/vendors/common/common.min.js');
 this.loadScript('assets/vendors/fancybox/jquery.fancybox.min.js');
 this.loadScript('assets/vendors/menu/src/main.menu.js');
 this.loadScript('assets/vendors/owl.carousel/owl.carousel.min.js');
 this.loadScript('assets/vendors/animated-headline/js/animated-headline.js');
 this.loadScript('assets/js/main.js');
 this.loadScript('assets/js/theme.init.js');
 this.loadScript('assets/js/custom.js');


 }

 public loadScript(url: string) {
 const body = <HTMLDivElement> document.body;
 const script = document.createElement('script');
 script.innerHTML = '';
 script.src = url;
 script.async = false;
 script.defer = true;
 body.appendChild(script);
 }


addMarker(lat: number, lng: number) {
this.location.markers.push({
    lat,
    lng
 })
 }

selectMarker(event) {
this.selectedMarker = {
    lat: event.latitude,
    lng: event.longitude
 }
 } 


calculateDistance(point1, point2) {


const p1 = new google.maps.LatLng(
point1.lat,
point1.lng
);
const p2 = new google.maps.LatLng(
point2.lat,
point2.lng
);

return (
google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/1000
).toFixed(2);
}


}

interface Marker {
lat: number;
lng: number;
}

interface Location {
latitude: number;
longitude: number;
zoom: number;
markers: Array<Marker>;
}

home.component.html

<agm-map [latitude]="location.latitude" [longitude]="location.longitude" 
[zoom]="location.zoom" (mapClick)="addMarker($event.coords.lat, $event.coords.lng)">
<!-- ... -->
<agm-direction 
    [origin]="origin" 
    [destination]="destination"
></agm-direction>
</agm-map>
<div>
 Distance: {{distance}}
 </div>
 <!-- ... -->

【问题讨论】:

    标签: javascript angular api maps


    【解决方案1】:

    我找到了解决方案,这是更新的代码

    home.component.ts

    import { Component, OnInit ,ViewChild} from '@angular/core';
    import { MapsAPILoader, AgmMap } from '@agm/core';
    declare var google: any;
    
    
    
    @Component({
    
      selector: 'app-home',
      templateUrl: './home.component.html',
      styleUrls: ['./home.component.css']
    
    })
    export class HomeComponent implements OnInit {
    
    
    
      location: Location
      selectedMarker: Marker
      origin: any;
      destination: any;
      distance: String;
      geocoder: any;
    
    
       ngOnInit(){
    
        this.origin = { 
          lat: 32.6950, 
          lng: 35.2820 
        };
      this.destination = { 
          lat: 32.6050, 
          lng: 35.2020 
       };
    
        this.location = {
          latitude: 32.6950,
          longitude: 35.2820,
          zoom: 15,
          markers: [
              {
                  lat: 32.6950,
                  lng: 35.2820
              }
          ]
      }
    
         this.loadScript('assets/js/jquery-3.3.1.min.js');
         this.loadScript('assets/vendors/appear/jquery.appear.min.js');
         this.loadScript('assets/vendors/jquery.easing/jquery.easing.min.js');
         this.loadScript('assets/js/popper.min.js');
         this.loadScript('assets/js/bootstrap.min.js');
         this.loadScript('assets/vendors/common/common.min.js');
         this.loadScript('assets/vendors/fancybox/jquery.fancybox.min.js');
         this.loadScript('assets/vendors/menu/src/main.menu.js');
         this.loadScript('assets/vendors/owl.carousel/owl.carousel.min.js');
         this.loadScript('assets/vendors/animated-headline/js/animated-headline.js');
         this.loadScript('assets/js/main.js');
         this.loadScript('assets/js/theme.init.js');
         this.loadScript('assets/js/custom.js');
      }
    
      @ViewChild(AgmMap, { static: true }) map: AgmMap;
    
      constructor(public mapsApiLoader: MapsAPILoader) {
        this.mapsApiLoader = mapsApiLoader;
    
        this.mapsApiLoader.load().then(() => {
          this.geocoder = new google.maps.Geocoder();
          this.distance = this.calculateDistance(this.origin, this.destination);
        });
      }
    
      public loadScript(url: string) {
        const body = <HTMLDivElement> document.body;
        const script = document.createElement('script');
        script.innerHTML = '';
        script.src = url;
        script.async = false;
        script.defer = true;
        body.appendChild(script);
      }
    
    
      addMarker(lat: number, lng: number) {
        this.location.markers.push({
            lat,
            lng
        })
      }
    
      selectMarker(event) {
        this.selectedMarker = {
            lat: event.latitude,
            lng: event.longitude
        }
      } 
    
    
      calculateDistance(point1, point2) {
    
    
        const p1 = new google.maps.LatLng(
        point1.lat,
        point1.lng
        );
        const p2 = new google.maps.LatLng(
        point2.lat,
        point2.lng
        );
    
        return (
        google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/1000
        ).toFixed(2);
    }
    
    
    }
    
    interface Marker {
    lat: number;
    lng: number;
    }
    
    interface Location {
    latitude: number;
    longitude: number;
    zoom: number;
    markers: Array<Marker>;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-02
      • 2018-11-30
      • 2019-06-13
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2016-07-07
      相关资源
      最近更新 更多