以下是一个使用高德地图API实现弹框选点并返回详细地址和经纬度的示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>高德地图选点示例</title>
<style>
/* 弹窗样式 */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 999;
}
.modal-content {
position: relative;
width: 80%;
height: 70%;
margin: 5% auto;
padding: 20px;
background: white;
}
#mapContainer {
width: 100%;
height: 90%;
}
.button-container {
margin-top: 10px;
text-align: right;
}
</style>
</head>
<body>
<button onclick="showMapPicker()">选择位置</button>
<div id="result" style="margin-top: 20px;">
<p>经纬度:<span id="coordinates">-</span></p>
<p>详细地址:<span id="address">-</span></p>
</div>
<!-- 地图弹窗 -->
<div id="mapModal" class="modal">
<div class="modal-content">
<div id="mapContainer"></div>
<div class="button-container">
<button onclick="confirmSelection()">确认</button>
<button onclick="closeMapPicker()">取消</button>
</div>
</div>
</div>
<!-- 高德地图API -->
<script src="https://webapi.amap.com/maps?v=2.0&key=您的高德地图key"></script>
<script>
let map = null;
let marker = null;
let selectedPosition = null;
let geocoder = null; // 地理编码服务
// 显示地图选择器
function showMapPicker() {
document.getElementById('mapModal').style.display = 'block';
initMap();
}
// 初始化地图
function initMap() {
if (!map) {
// 初始化地图实例
map = new AMap.Map('mapContainer', {
zoom: 13,
center: [116.397428, 39.90923] // 默认北京中心
});
// 初始化地理编码服务
geocoder = new AMap.Geocoder({
city: "全国"
});
// 绑定地图点击事件
map.on('click', function(e) {
updateMarker(e.lnglat);
getAddress(e.lnglat);
});
}
}
// 更新标记位置
function updateMarker(lnglat) {
if (!marker) {
marker = new AMap.Marker({
position: lnglat,
map: map
});
} else {
marker.setPosition(lnglat);
}
selectedPosition = lnglat;
}
// 获取详细地址
function getAddress(lnglat) {
geocoder.getAddress(lnglat, function(status, result) {
if (status === 'complete' && result.regeocode) {
selectedPosition.address = result.regeocode.formattedAddress;
} else {
console.error('获取地址失败');
}
});
}
// 确认选择
function confirmSelection() {
if (selectedPosition && selectedPosition.address) {
document.getElementById('coordinates').textContent =
`${selectedPosition.lng.toFixed(6)}, ${selectedPosition.lat.toFixed(6)}`;
document.getElementById('address').textContent = selectedPosition.address;
closeMapPicker();
} else {
alert('请先在地图上点击选择位置');
}
}
// 关闭地图选择器
function closeMapPicker() {
document.getElementById('mapModal').style.display = 'none';
}
</script>
</body>
</html>
使用说明:
- 前往高德开放平台注册并获取Web服务的Key
- 替换代码中的
您的高德地图key
为实际申请的Key - 保存为HTML文件并在浏览器中打开
主要功能特点:
- 地图交互:
- 点击地图任意位置放置标记
- 支持拖动浏览地图
- 自动居中到默认位置(北京)
- 数据返回:
- 返回精确到小数点后6位的经纬度
- 返回结构化地址信息
- 实时显示选择结果
- 技术实现:
- 使用高德地图JavaScript API
- 集成地理逆编码服务
- 异步地址查询处理
- 标记位置动态更新
- 扩展建议:
// 可以在getAddress回调中添加更多地址信息解析:
if (result.regeocode) {
const addressComponent = result.regeocode.addressComponent;
selectedPosition.detail = {
province: addressComponent.province,
city: addressComponent.city,
district: addressComponent.district,
street: addressComponent.streetNumber.street,
number: addressComponent.streetNumber.number
}
}
注意事项:
- 需要有效的互联网连接
- 高德Key需要正确配置JS API权限
- 地址查询成功率依赖高德的数据覆盖
- 生产环境需要处理API加载失败的情况
高级功能扩展方向:
- 添加搜索框进行地址搜索定位
- 支持拖动标记实时更新位置
- 添加行政区划边界显示
- 集成周边POI查询功能
- 添加坐标系统转换功能