# 地理编码 (Geocoder) 地理编码服务提供了将地址转换为经纬度(正向地理编码)和将经纬度转换为地址(逆向地理编码)的功能。 ## 1. 加载插件 使用 `AMapLoader` 加载时需要包含 `AMap.Geocoder` 插件。 ```javascript AMapLoader.load({ key: '您的Key', version: '2.0', plugins: ['AMap.Geocoder'] // 预加载插件 }).then((AMap) => { // ... }); ``` ## 2. 正向地理编码 (地址 -> 坐标) 将详细的结构化地址转换为经纬度坐标。 ```javascript const geocoder = new AMap.Geocoder({ city: '010', // 城市,默认全国 }); geocoder.getLocation('北京市朝阳区阜通东大街6号', function(status, result) { if (status === 'complete' && result.info === 'OK') { // result.geocodes 是一个数组 const { location, formattedAddress } = result.geocodes[0]; console.log('坐标:', location.lng, location.lat); console.log('规范地址:', formattedAddress); // 在地图上标记 map.setCenter(location); new AMap.Marker({ map: map, position: location }); } else { console.error('地理编码失败'); } }); ``` ## 3. 逆向地理编码 (坐标 -> 地址) 将经纬度坐标转换为详细地址信息。 ```javascript const lnglat = [116.396574, 39.992706]; geocoder.getAddress(lnglat, function(status, result) { if (status === 'complete' && result.info === 'OK') { // result.regeocode 包含详细地址信息 const address = result.regeocode.formattedAddress; console.log('地址:', address); // 获取周边 POI、道路等详细信息 const { roads, pois, aois } = result.regeocode.addressComponent; } else { console.error('逆地理编码失败'); } }); ``` ## 完整示例 ### 地址搜索定位 ```javascript const map = new AMap.Map('container', { zoom: 14, center: [116.397, 39.909] }); const geocoder = new AMap.Geocoder({ city: '北京', extensions: 'all' }); const input = document.getElementById('addressInput'); const btn = document.getElementById('searchBtn'); btn.onclick = function() { const address = input.value.trim(); if (!address) return; geocoder.getLocation(address, function(status, result) { if (status === 'complete' && result.geocodes.length > 0) { const geocode = result.geocodes[0]; // 清除之前的标记 map.clearMap(); // 添加标记 const marker = new AMap.Marker({ map: map, position: geocode.location }); // 信息窗体 const infoWindow = new AMap.InfoWindow({ content: `
坐标: ${geocode.location.lng}, ${geocode.location.lat}
地址: ${address}
坐标: ${lnglat[0].toFixed(6)}, ${lnglat[1].toFixed(6)}