地理编码API是将地址转换为地理坐标(经度/纬度)或将地理坐标转换为地址的服务。Google Maps API V3是该服务的第三个主要版本。
Google地理编码API V3不再返回JavaScript函数结果的主要原因是出于安全考虑和API设计原则:
现代实现应使用标准的JSON响应并通过XMLHttpRequest或fetch API处理:
// 使用fetch API示例
async function geocodeAddress(address) {
const apiKey = 'YOUR_API_KEY';
const encodedAddress = encodeURIComponent(address);
const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}&key=${apiKey}`;
try {
const response = await fetch(url);
const data = await response.json();
if (data.status === 'OK') {
console.log('坐标:', data.results[0].geometry.location);
} else {
console.error('地理编码失败:', data.status);
}
} catch (error) {
console.error('请求失败:', error);
}
}
如果需要更集成的解决方案,可以使用完整的Google Maps JavaScript API:
function initMap() {
const geocoder = new google.maps.Geocoder();
const address = "1600 Amphitheatre Parkway, Mountain View, CA";
geocoder.geocode({ 'address': address }, function(results, status) {
if (status === 'OK') {
console.log('坐标:', results[0].geometry.location);
} else {
console.error('地理编码失败:', status);
}
});
}
如果遇到跨域问题,可以设置服务器端代理:
// Node.js代理示例
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/api/geocode', async (req, res) => {
try {
const { address } = req.query;
const response = await axios.get('https://maps.googleapis.com/maps/api/geocode/json', {
params: {
address,
key: 'YOUR_API_KEY'
}
});
res.json(response.data);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000);
status
字段如果Google API的限制成为问题,可以考虑其他地理编码服务,如OpenStreetMap Nominatim或Mapbox Geocoding API,它们也提供类似的RESTful接口。
没有搜到相关的文章