当前位置:   article > 正文

前端 vue 使用高德地图组件:(二)获取鼠标点击位置坐标 和 图标覆盖物拖动后的坐标_高德地图 监控到鼠标插件的坐标点位

高德地图 监控到鼠标插件的坐标点位

上一篇文章,我们已经成功加载了地图并设置了自定义的图标覆盖物,但是在业务开发中,对地图的运用肯定不是到此为止,对地图组件的操作经常需要坐标值的参与,这篇文章就是简单介绍下坐标值的获取

一:我们可以给地图组件绑定单击事件,当鼠标单击时获取对应位置的经纬度:

  1. //绑定地图组件内单击事件
  2. this.mapMain.on('click', (e) => {
  3. this.lngMain = e.lnglat.getLng()
  4. this.latMain = e.lnglat.getLat()
  5. });

注意这里使用了箭头表达式,如果使用 function 的话会因为 this 只想问题而出错,再生成地图前进行 this 的转换也可以同样解决这个问题。

  1. <template>
  2. <div class="app-container">
  3. <div id="title">高德地图组件展示</div>
  4. <div id="mapsearch"></div>
  5. <div id="mapcontainer"></div>
  6. <div id="lnglat">
  7. <input type="text" style="height:30px;width:260px;text-align:center;font-size:16px" v-model="lnglat"></input>
  8. </div>
  9. <div id="footer"></div>
  10. </div>
  11. </template>
  12. <script>
  13. import location from "@/assets/image/location.png";
  14. export default {
  15. data() {
  16. return {
  17. mapMain: null,
  18. lngMain: 0,
  19. latMain: 0,
  20. markerMain: null
  21. };
  22. },
  23. created() {},
  24. mounted() {
  25. this.initMapMain();
  26. },
  27. computed:{
  28. lnglat: function(){
  29. return this.lngMain + "," + this.latMain //计算属性,根据动态的坐标值随时获取新结果
  30. }
  31. },
  32. methods: {
  33. initMapMain() {
  34. //地图组件绑定div进行初始化并赋值给vue的对象
  35. this.mapMain = new AMap.Map("mapcontainer", {
  36. center: [this.lngMain, this.latMain], //设置显示的地图中心坐标
  37. zoom: 8 //设置地图缩放等级
  38. });
  39. //绑定地图组件内单击事件
  40. this.mapMain.on('click', (e) => {
  41. this.lngMain = e.lnglat.getLng()
  42. this.latMain = e.lnglat.getLat()
  43. });
  44. //生成自定义的图标
  45. let icon = new AMap.Icon({
  46. image: location,
  47. size: new AMap.Size(25, 35),
  48. imageSize: new AMap.Size(25, 35)
  49. });
  50. //初始化覆盖物对象并赋值给vue对象
  51. this.markerMain = new AMap.Marker({
  52. icon: icon, //使用自定义的图标
  53. position: [this.lngMain, this.latMain] //覆盖物位置坐标
  54. });
  55. this.mapMain.add(this.markerMain); //添加覆盖物到地图,与下方法同效
  56. // this.markerMain.set(this.mapMain) //添加覆盖物到地图,与上方法同效
  57. this.mapMain.setFitView(); //地图缩放等级和位置等自适应,可以放置折线对象等作为形参也可以为空
  58. }
  59. }
  60. };
  61. </script>
  62. <style scoped>
  63. #mapcontainer {
  64. height: 300px;
  65. width: 500px;
  66. font-size: 13px;
  67. }
  68. </style>

效果:

二:我们还可以对覆盖物的拖动绑定事件:

 设置覆盖物可拖动:

draggable: true, //是否允许拖动

添加拖动事件:

  1. this.markerMain.on('dragend', e => {
  2. this.lngMain = e.lnglat.lng
  3. this.latMain = e.lnglat.lat
  4. })
  1. <template>
  2. <div class="app-container">
  3. <div id="title">高德地图组件展示</div>
  4. <div id="mapsearch"></div>
  5. <div id="mapcontainer"></div>
  6. <div id="lnglat">
  7. <input type="text" style="height:30px;width:260px;text-align:center;font-size:16px" v-model="lnglat"></input>
  8. </div>
  9. <div id="footer"></div>
  10. </div>
  11. </template>
  12. <script>
  13. import location from "@/assets/image/location.png";
  14. export default {
  15. data() {
  16. return {
  17. mapMain: null,
  18. lngMain: 0,
  19. latMain: 0,
  20. markerMain: null
  21. };
  22. },
  23. created() {},
  24. mounted() {
  25. this.initMapMain();
  26. },
  27. computed:{
  28. lnglat: function(){
  29. return this.lngMain + "," + this.latMain //计算属性,根据动态的坐标值随时获取新结果
  30. }
  31. },
  32. methods: {
  33. initMapMain() {
  34. //地图组件绑定div进行初始化并赋值给vue的对象
  35. this.mapMain = new AMap.Map("mapcontainer", {
  36. center: [this.lngMain, this.latMain], //设置显示的地图中心坐标
  37. zoom: 8 //设置地图缩放等级
  38. });
  39. //绑定地图组件内单击事件
  40. this.mapMain.on('click', (e) => {
  41. this.lngMain = e.lnglat.getLng()
  42. this.latMain = e.lnglat.getLat()
  43. });
  44. //生成自定义的图标
  45. let icon = new AMap.Icon({
  46. image: location,
  47. size: new AMap.Size(25, 35),
  48. imageSize: new AMap.Size(25, 35)
  49. });
  50. //初始化覆盖物对象并赋值给vue对象
  51. this.markerMain = new AMap.Marker({
  52. icon: icon, //使用自定义的图标
  53. draggable: true, //是否允许拖动
  54. position: [this.lngMain, this.latMain] //覆盖物位置坐标
  55. });
  56. this.mapMain.add(this.markerMain); //添加覆盖物到地图,与下方法同效
  57. //绑定覆盖物的拖动
  58. this.markerMain.on('dragend', e => {
  59. this.lngMain = e.lnglat.lng
  60. this.latMain = e.lnglat.lat
  61. })
  62. // this.markerMain.set(this.mapMain) //添加覆盖物到地图,与上方法同效
  63. this.mapMain.setFitView(); //地图缩放等级和位置等自适应,可以放置折线对象等作为形参也可以为空
  64. }
  65. }
  66. };
  67. </script>
  68. <style scoped>
  69. #mapcontainer {
  70. height: 300px;
  71. width: 500px;
  72. font-size: 13px;
  73. }
  74. </style>

效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/492628
推荐阅读
相关标签
  

闽ICP备14008679号