JSAPI 高德地图应用--关键字搜索、POI搜索定位,获取经纬度

        在高德地图的应用中,地图上总少不了搜索框,用于搜索并定位某一位置,并获取某一定位点的经纬度,类似于这种:

这种搜索方法一般是高德地图的输入提示插件AMap.Autocomplete和POI搜索插件AMap.PlaceSearch结合来实现的;

首先需要定义一个input输入框,并赋予id,id是关键,至于输入框放置位置,可以自己调节

  <input id='tipinput' type="text">

因为这两个都是高德地图的插件,所有需要引入进来

      AMap.plugin([ 'AMap.Autocomplete', 'AMap.PlaceSearch'], () => {
       

        var autoOptions = {
          city: '全国', //city 限定城市,默认全国
          input: 'tipinput',//绑定的输入框id
        }
        const autoComplete = new AMap.Autocomplete(autoOptions)

        placeSearch = new AMap.PlaceSearch({
          city: '全国',
          map: self.map,
          citylimit: true,
          autoFitView: true
        })
        AMap.event.addListener(autoComplete, 'select', (e) => {
          //TODO 针对选中的poi实现自己的功能
          placeSearch.setCity(e.poi.adcode) 
          placeSearch.search(e.poi.name)
        })

      })

        搜索到某一区域后,如果想要在地图上添加某一定位点,需要添加地图的绘制工具:AMap.MouseTool,引入方式跟上方一样,可以添加一个btn来调用drawMarker的方法

   AMap.plugin(['AMap.MouseTool'], () => {
       
       mouseTool = new AMap.MouseTool(map)
      

        // 绘制覆盖物
       mouseTool.on('draw', (e) => {
          overlays.push(e.obj)
           console.log('定位点的经纬度',e.obj.getPosition())
         //获取定位点的经纬度使用e.obj.getPosition()

      })

   // 绘制点
    drawMarker () {
      mouseTool.marker({})
    },

        这个时候就获取到定位点的经纬度了,可以传给后端进行保存,可以添加表单填写其他信息,用于之后初始化定位点,在地图上进行渲染,可以参照之前的文章:JSAPI 高德地图应用---批量初始化点标记、矢量图形

        如果想要绘制其他矢量图形的话,方法类型,但是获取经纬度的方法会有些差距,见代码:

    // 绘制线
    drawPolyline () {
      mouseTool.polyline({
        strokeColor: '#80d8ff',
      })
    },
    // 绘制多边形
    drawPolygon () {
      mouseTool.polygon({
        fillColor: '#f21e2b33' ,//填充颜色
        strokeColor:'#00a4ff',//描边颜色
      })
    },
    // 绘制矩形
    drawRectangle () {
      mouseTool.rectangle({
        fillColor:  '#00a4ff33',
        strokeCollor: '#00a4ff',
      })
    },
    // 绘制圆形
    drawCircle () {
      mouseTool.circle({
        fillColor:  '#f21e2b33',
        strokeCollor:  '#F21E2B',
      })
    },
        // 绘制覆盖物
       mouseTool.on('draw', (e) => {
          overlays.push(e.obj)    
          console.log('获取圆的圆心经纬度',e.obj.getCenter())
          console.log('获取圆的半径,单位是米',e.obj.getRadius())
          console.log('获取多边形、矩形、线的经纬度集合,是一个数组,按点依次排列',e.obj.getPath()) 

        })

上面的overlays是保存绘制覆盖物的数据,如果想要清除绘制的覆盖物直接 map.remove(overlays)即可。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我是AI语言模型,无法提供代码实现。不过,我可以给你提供一些参考和建议。 首先,你需要在Vue3中安装`amap-jsapi-loader`和`amap`。 ```bash npm install amap-jsapi-loader amap --save ``` 然后,在需要使用高德地图的组件中,引入`amap-jsapi-loader`和`amap`。 ```javascript import { AMapLoader } from 'amap-jsapi-loader'; import AMap from 'amap'; export default { name: 'MyMapComponent', data() { return { keyword: '', searchResult: null, map: null, marker: null, }; }, mounted() { AMapLoader.load({ key: 'your_amap_key', version: '2.0', plugins: ['AMap.Geocoder'], }).then((AMap) => { this.map = new AMap.Map('map-container', { zoom: 15, }); }); }, methods: { search() { if (!this.keyword) { return; } AMapLoader.load({ key: 'your_amap_key', version: '2.0', plugins: ['AMap.PlaceSearch'], }).then((AMap) => { const placeSearch = new AMap.PlaceSearch({ pageSize: 1, pageIndex: 1, city: '全国', }); placeSearch.search(this.keyword, (status, result) => { if (status === 'complete' && result.info === 'OK') { const poi = result.poiList.pois[0]; this.searchResult = poi.name + ', ' + poi.address; const lnglat = [poi.location.lng, poi.location.lat]; this.marker = new AMap.Marker({ position: lnglat, map: this.map, }); this.map.setCenter(lnglat); } else { this.searchResult = '无结果'; } }); }); }, }, }; ``` 在上面的代码中,我们使用了`AMapLoader`来异步加载高德地图API和插件。在`mounted`生命周期函数中,我们创建了一个地图实例,并将其挂载到DOM元素中。在`search`方法中,我们通过`AMap.PlaceSearch`来搜索关键词,并将第一个结果的位置和名称显示在地图上。 注意,在使用高德地图API之前,你需要先在高德地图开发者平台申请一个地图API的key,并在代码中替换`your_amap_key`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值