You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中MapBox双击获取坐标的问题排查与解决

问题:双击React-Map-GL地图获取坐标报错

我计划实现用户双击地图位置时显示附近路线的功能,但获取对应坐标时出现问题,当前代码如下:

import React, { useState } from 'react';
import Map from 'react-map-gl';
import { ApolloClient, InMemoryCache, ApolloProvider, gql, useQuery } from '@apollo/client';

const client = new ApolloClient({
  uri: TOKEN,
  cache: new InMemoryCache(),
});

function handleClick(map, event) {
  var lngLat = event.lngLat;
  console.log(lngLat)
}

function App() {

  return (
    <>
      <ApolloProvider client={client}>
      </ApolloProvider>
      
      <Map
        mapboxAccessToken=TOKEN
        initialViewState={{
          longitude: 121.04042520880047,
          latitude: 14.649743779882588,
          zoom: 14
        }}
        style={{ width: window.innerWidth, height: window.innerHeight }}
        mapStyle="mapbox://styles/mapbox/light-v11"
        onDblClick={handleClick}
      ></Map>
    </>
  );
}

export default App

运行代码后出现如下错误:

ERROR
无法读取未定义的属性(读取'lngLat')
TypeError: Cannot read properties of undefined (reading 'lngLat')
at handleClick (http://localhost:3000/main.3e317df54a291f15fa87.hot-update.js:35:22)
at Mapbox._onPointerEvent (http://localhost:3000/static/js/bundle.js:34680:9)
at Map.fire (http://localhost:3000/static/js/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.chunk.js:1007:32)
at Mapbox._fireEvent (http://localhost:3000/static/js/bundle.js:35107:14)
at hr._firePreventable (http://localhost:3000/static/js/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.chunk.js:26089:23)
at hr.dblclick (http://localhost:3000/static/js/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.chunk.js:26068:21)
at Xr.handleEvent (http://localhost:3000/static/js/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.chunk.js:27078:93)


解决方案

错误原因是react-map-gl的onDblClick回调参数顺序不符合你的写法:回调的第一个参数是事件对象,第二个才是地图实例,你把参数顺序写反了,导致event变量实际为undefined,读取lngLat时触发报错。

修改handleClick函数的参数顺序即可解决:

function handleClick(event, map) {
  const lngLat = event.lngLat;
  console.log('双击坐标:', lngLat);
  // 后续可使用该坐标调用路线API,比如Mapbox Directions API,或你的GraphQL接口获取附近路线
}

修改后双击地图就能正确拿到经纬度坐标。若要实现显示附近路线的功能,拿到lngLat后可:

  • 调用Mapbox Directions API(需对应权限),传入该坐标作为起点/终点,获取路线数据后在地图上渲染
  • 若通过自有GraphQL接口获取路线,使用Apollo的useMutation或useQuery发起请求,传入经纬度参数,拿到数据后处理渲染

内容的提问来源于stack exchange,提问作者Ace Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:36:31