【问题标题】:Angular5 and Google Maps v3 Api - Getting coordinations from map "click" eventAngular 5 和 Google Maps v3 Api - 从地图“点击”事件中获取坐标
【发布时间】:2018-01-14 23:58:03
【问题描述】:

我正在尝试从地图上的点击事件中获取坐标

这是我试图得到的结果:Here

这里是我的代码:

import { Component, OnInit } from '@angular/core';
import { ViewChild } from '@angular/core';
import { } from '@types/googlemaps';
import { map } from 'rxjs/operator/map';
import { Input, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-google-map',
  templateUrl: './google-map.component.html',
  styleUrls: ['./google-map.component.css']
})
export class GoogleMapComponent implements OnInit {
  constructor() { }

  markers: Array<Object>
  myLatLng = { lat: 53.131083, lng: 23.154742 };
  latitude: 53.131083;
  longitute: 23.154742;
  googleMap: google.maps.Map;

  ngOnInit() {
    var mapCanvas = document.getElementById("map");
    var myCenter = new google.maps.LatLng(53.131083, 23.154742);
    var mapOptions = {
      center: myCenter,
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    this.googleMap = new google.maps.Map(mapCanvas, mapOptions);
    google.maps.event.addListener(map, 'click', function (event) {
      this.placeMarker(event);
    });
  }

  placeMarker(event) {

    //-------------- i can't get map coords -------------
    var eventLatLng = { lat: event.clientX, lng: event.clientY };
    console.log(eventLatLng);
    var marker = new google.maps.Marker({
      position: this.myLatLng,
      map: this.googleMap
    });

    var infowindow = new google.maps.InfoWindow({
      content: 'Marker Location:' + marker.getPosition()
    });

    infowindow.open(this.googleMap, marker);
  }

  addBicycleLayer() {
    var bikeLayer = new google.maps.BicyclingLayer();
    bikeLayer.setMap(this.googleMap);
  }

  setMapType(mapTypeId: string) {
    this.googleMap.setMapTypeId(mapTypeId)
  }


  setCenter(e: any) {
    e.preventDefault();
    this.googleMap.setCenter(new google.maps.LatLng(this.latitude, this.longitute));
  }
}

HTML 组件:

<div id="map" style="width:100%;height:600px" (click)="placeMarker($event)">
</div>

我不知道如何获得地图坐标。这些在 placeMarker 函数中的坐标只是客户端坐标(未与地图集成) 我找到了一些https://angular-maps.com/,但这将是一个大项目,我不想依赖这个。 我将不胜感激任何帮助:)

干杯

【问题讨论】:

  • 看看 Google Maps JS API,你不应该使用event.latLng 来获取坐标位置Marker(event) (developers.google.com/maps/documentation/javascript/3.exp/…)?
  • 试过了,用简单的语言,角度不知道 event.latLng 是什么,它在 Firefox 中显示了一个错误(你正在谈论的 event.latLng 在这里:w3schools.com/graphics/… 我想要得到相同的结果
  • 我可以从我把自己放在代码中的坐标中添加标记,但很难通过点击事件来实现它并从地图中获取它
  • 我不确定我是否遵循,您正在尝试从点击事件中获取坐标,即事件对象,对吗?如果是这样,Firefox 会为event.latLng 显示什么错误?如果不能,请您进一步解释您要做什么。
  • 我想从地图中获取纬度和经度以制作标记,来自“点击”事件。 (我将点击地图,获取纽约街道的坐标并在地图上做标记)。将代码更改为 event.latLng(请参阅 var 标记中的“位置”)并单击地图后,我收到此错误:ibb.co/hsESGm

标签: javascript angular google-maps typescript google-maps-api-3


【解决方案1】:

Jags之后 帮助我找到了答案! 这是完整且有效的代码:

import { Component, OnInit } from '@angular/core';
import { ViewChild } from '@angular/core';
import { } from '@types/googlemaps';
import { map } from 'rxjs/operator/map';
import { Input, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-google-map',
  templateUrl: './google-map.component.html',
  styleUrls: ['./google-map.component.css']
})
export class GoogleMapComponent implements OnInit {
  constructor() { }

  markers: Array<Object>
  myLatLng = { lat: 53.131083, lng: 23.154742 };
  latitude: 53.131083;
  longitute: 23.154742;
  googleMap: google.maps.Map;

  ngOnInit() {
    var mapCanvas = document.getElementById("map");
    var myCenter = new google.maps.LatLng(53.131083, 23.154742);
    var mapOptions = {
      center: myCenter,
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    this.googleMap = new google.maps.Map(mapCanvas, mapOptions);
    google.maps.event.addListener(this.googleMap, 'click', (event) => {
      this.placeMarker(event);
    });
  }

  placeMarker(event) {

    var marker = new google.maps.Marker({
      position: event.latLng,
      map: this.googleMap
    });
    console.log(event.latLng.lat() +" "+ event.latLng.lng());
  }

  addBicycleLayer() {
    var bikeLayer = new google.maps.BicyclingLayer();
    bikeLayer.setMap(this.googleMap);
  }

  setMapType(mapTypeId: string) {
    this.googleMap.setMapTypeId(mapTypeId)
  }


  setCenter(e: any) {
    e.preventDefault();
    this.googleMap.setCenter(new google.maps.LatLng(this.latitude, this.longitute));
  }
}

Here is a picture of working code :)

【讨论】:

    【解决方案2】:

    根据我的评论,删除(click)="placeMarker($event)",因为这不是你想要做的。

    尝试在点击事件中记录this。这可能不是您所追求的环境。相反,您应该使用粗箭头将正确的上下文传递给您的函数。

    google.maps.event.addListener(this.googleMap, 'click', (event) => {
      this.placeMarker(event);
    });
    

    现在您应该在 placeMarker 函数中拥有正确的 event。你应该可以从event调用latlng

    【讨论】:

    • 正如你所说,我删除了点击事件并更改了 addListener 函数,但现在点击地图后没有任何反应
    • 将listner对象更改为this.googleMap我会更新我的答案以反映
    • 您的eventLatLng 现在将在placeMarker 事件中失败。这是因为您现在得到的是 google 事件而不是 click 事件。你应该可以从这里弄清楚。
    • 我认为这个位置:event.LatLng,应该可以工作,但它说它未定义
    • 如果你使用 console.log(event) 会得到什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多