当前位置: 首页 > article >正文

vue集成高德地图API实现坐标拾取功能

安装与配置:

组件 | vue-amapDescriptionicon-default.png?t=O83Ahttps://elemefe.github.io/vue-amap/#/zh-cn/introduction/install简介 | @vuemap/vue-amap简介icon-default.png?t=O83Ahttps://vue-amap.guyixi.cn/zh-cn/introduction/introduction.html        ​​​​我的应用 | 高德控制台高德开放平台官网控制台提供了高德开发者Key管理,Key可视化分析等功能。icon-default.png?t=O83Ahttps://console.amap.com/dev/key/app        

页面设计与引用

<template>
    <div class="amap-wrapper">

        <el-amap class="amap-box"  :vid="'amap-vue'"  :bubble="true" :center="center" :zoom="zoom" :events="events">
            <!-- 搜索框 -->
            <el-amap-search-box
                class="searchBox"
                :search-option="searchOption"
                :on-search-result="onSearchResult"
            />
            <!-- 标注点 -->
            <el-amap-marker :position="center" ></el-amap-marker>
            <!-- tootip -->
            <el-amap-text
                :position="mark"
                :text="mark.toString()"
                :offset="[100,-20]"
            >
            </el-amap-text>
            <!-- 信息窗体-->
            <el-amap-info-window
                :position="center"
                :offset="[0,-30]"
            >
                <div style="margin: 15px 5px 0">{{ centerAddress.formattedAddress }}</div>
            </el-amap-info-window>
        </el-amap>
    </div>
</template>
<script>
    export default {
        name: 'siteinfo',
        data() {
            return {
                zoom: 10,//初始缩放比例
                center: [104.077448,30.624161],//初始中心点
                mark: [104.077448,30.624161],//初始标记点
                centerAddress: {//中心点位置信息
                    city: "全国",
                    district: "全国",
                    province: "全国",
                    township: "",
                    formattedAddress: "全国",
                },
                markAddress: {//标记点位置信息
                    city: "全国",
                    district: "全国",
                    province: "全国",
                    township: "",
                    formattedAddress: "全国",
                },
                searchOption:{
                    city:"全国",
                    citylimit:true,
                },
                events: {
                    // init: (e) => {
                    //     // this.center=[101.722732,26.580607]
                    //     this.getAddress(this.center);
                    // },
                    click: (e) => {
                        this.center = [e.lnglat.lng, e.lnglat.lat]
                        this.getAddress(this.center);

                    },
                    mousemove: (e) => {
                        this.mark = [e.lnglat.lng, e.lnglat.lat]
                    }

                }
            }
        },
        methods: {
            
            // 使用AMap服务获取地址
            getAddress(latLong){
                var geocoder;
                AMap.plugin("AMap.Geocoder",function(){

                    geocoder = new AMap.Geocoder({
                        radius: 1000,
                        extensions: 'all'
                    });

                })
                geocoder.getAddress(latLong, (status, result) => {

                    console.log("address", result)
                    if (status === 'complete' && result.info === 'OK') {
                        // 获取当前点名称
                        const address = result.regeocode.formattedAddress;
                        this.centerAddress = {
                            city: result.regeocode.addressComponent.city,
                            district: result.regeocode.addressComponent.district,
                            province: result.regeocode.addressComponent.province,
                            township: result.regeocode.addressComponent.township,
                            formattedAddress: address,
                        }
                        // console.log("address", result)
                    }
                });
            },

            // 地图搜索回调
            onSearchResult(pois) {
               

                if( pois.length !== 0){
                    this.center=[pois[0].lng, pois[0].lat];
                    this.getAddress(this.center);
                }
                console.log("地图回调", pois);

            },
            //修改时将当前坐标赋值
            rowEdit(row, index){
                console.log("row",row)
                this.center=row.latLong.split(',').map(Number)
                this.getAddress(this.center);

                this.$refs.crud.rowEdit(row,index)

            },

            //新增时给个初始位置
            rowAdd(){
                this.center=[104.077448,30.624161];
                this.getAddress(this.center);
            },

            // 更新
            handleUpdate: function (row, index, done,loading) {

                row.province = this.centerAddress.province
                row.city = this.centerAddress.city
                row.disrict = this.centerAddress.district
                row.addressDetail = this.centerAddress.formattedAddress
                row.latLong = this.center.toString()
                console.log(row)

                if( row.latLong ){
                    putObj(row).then(data => {
                        this.$message.success('修改成功')
                        done()
                        this.searchForm = {}
                        this.getList(this.page)
                    }).catch(() => {
                        loading();
                    });
                }else {
                    this.$message.error('请选择筛查地点')
                }

            },
            // 保存
            handleSave: function (row, done,loading) {
                row.province = this.centerAddress.province
                row.city = this.centerAddress.city
                row.disrict = this.centerAddress.district
                row.addressDetail = this.centerAddress.formattedAddress
                row.latLong = this.center.toString()

                console.log(row)


                addObj(row).then(data => {
                    this.$message.success('添加成功')
                    done()
                    this.searchForm = {}

                    this.getList(this.page)
                }).catch(() => {
                    loading();
                });
            },
           
        }
    }
</script>

<style scoped>
.amap-wrapper {
    width: 100%;
    height: 75Vh;
    position: relative;
    .searchBox{
        position: absolute;
        top: 20px;
        left: 20px;
    }
}
</style>


http://www.kler.cn/a/508530.html

相关文章:

  • LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
  • Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal
  • Linux网络 TCP socket
  • 【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
  • 我的世界-与门、或门、非门等基本门电路实现
  • lwip单网卡多ip的实现
  • 快速开发:用AI构造AI —— 打造属于个人的Copilot(M-聪明AI)
  • 为AI聊天工具添加一个知识系统 之46 蒙板程序设计(第一版):Facet六边形【意识形态:操纵】
  • 【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题
  • 5步打造完善的物联网IoT测试体系
  • 【机器学习实战】kaggle 欺诈检测---使用生成对抗网络(GAN)解决欺诈数据中正负样本极度不平衡问题
  • React 第二十一节 useDeferredValue 开发中用法注意事项
  • Web3 数字资产如何更有趣?解锁 Ultiland 融合 MeMe 与 RWA 的技术路径
  • Cyber Security 101-Defensive Security-Digital Forensics Fundamentals(数字取证基础知识)
  • Linux下进程间通信方式 进程间传递文件描述符——sockpair()函数
  • Golang——包的循环引用问题(import cycle not allowed)和匿名导入
  • c++入门——引用和内联函数
  • 【机器学习】鲁棒(健壮)回归-Theil-Sen估计(Theil-Sen Estimator)
  • Docker与虚拟机的区别及常用指令详解
  • 【Leetcode 热题 100】121. 买卖股票的最佳时机
  • 在职研生活学习--20250109~管理经济学
  • 智能新浪潮:亚马逊云科技发布Amazon Nova模型
  • 几个Linux系统安装体验(续): 银河麒麟桌面系统
  • redis 的 SDS 内存分配
  • salesforce flow如何实现延时
  • qBittorent访问webui时提示unauthorized解决方法