話不多説,上步驟實現,先別問為啥,做就完事了。
實現手段上有兩種,一種是script標籤引入sdk(此處不做介紹),第二種使用高德AsMap包
- 安裝npm包
npm i @amap/amap-jsapi-loader --save
- 考慮複用性,建議封裝成組件使用,故創建組件自定義文件
import React, { useEffect, useState } from 'react';
import AMapLoader from '@amap/amap-jsapi-loader';
// 標註①:此處很重要,必配置
window._AMapSecurityConfig = {
securityJsCode: "標註②:你自己的安全密鑰",
};
const BizGeocoder= () => {
const [address, setAddress] = useState('');
const [geocoder, setGeocoder] = useState(null);
useEffect(() => {
// html5方法調用獲取經緯度,注意獲得的經緯度需要截取保留小數點後六位,否則高德接口不支持
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
const latitude = position.coords.latitude; // 緯度
const longitude = position.coords.longitude; // 經度
console.log("緯度:", latitude);
console.log("經度:", longitude);
},
(error) => {
console.error("獲取位置失敗:", error.message);
}
);
} else {
console.error("瀏覽器不支持 Geolocation API");
}
// 初始化高德接口
const initMap = async () => {
try {
const AMap = await AMapLoader.load({
key: "標註③:你自己的key", // 高德測試Key
version: "2.0",
plugins: ['AMap.Geocoder'],
});// 初始化地理編碼器
const geocoderInstance = new AMap.Geocoder({
city: "全國"
});
setGeocoder(() => geocoderInstance); // 使用函數式更新確保引用正確
} catch (error) {
console.error('地圖加載失敗:', error);
}
};
initMap();
}, []);
// 示例:逆地理編碼方法
const getReverseGeocode = (lnglat) => {
if (!geocoder) return;
geocoder.getAddress(lnglat, (status, result) => {
if (status === 'complete' && result.regeocode) {
setAddress(result.regeocode.formattedAddress);
} else {
console.error('逆地理編碼失敗:', result);
}
});
};
return (
<div>
// 此處我偷懶,經緯度地址應該換成你上述調取獲得的東西,不應該寫死的
<button onClick={() => getReverseGeocode([120.178447, 30.315514])}>
獲取座標地址
</button>
<div>解析結果:{address}</div>
</div>
);
};
export default BizGeocoder;
- 解釋一下上述幾個備註,你要在高德地圖開放平台上,註冊成為開發者,然後創建應用,然後添加key,創建的key綁定的服務一定要是web端(jsSdk),這個是給前端用的,也是使用amap包時調用的服務,別選擇web服務端。然後域名白名單,不配置就是默認隨便一個都可以調用,不做限制。然後保存就可以看到生成了一個key和一個密鑰code,把它塞到標註②和③那裏
- 這時候就可以引入這個組件獲取地址信息了,非常粗略的版本,你要問我為什麼我也不知道
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。