// 查询 OSM 周边所有 POI(不限制类型) export function getOSMAround(lat, lon, radius = 500) { // Overpass Query const query = ` [out:json]; ( node(around:${radius},${lat},${lon})["amenity"]; node(around:${radius},${lat},${lon})["shop"]; node(around:${radius},${lat},${lon})["tourism"]; node(around:${radius},${lat},${lon})["leisure"]; node(around:${radius},${lat},${lon})["public_transport"]; ); out center; `; return new Promise((resolve, reject) => { uni.request({ url: "https://overpass-api.de/api/interpreter", method: "POST", header: { "Content-Type": "application/x-www-form-urlencoded" }, data: query, success: (res) => { if (res.data && res.data.elements) { resolve(res.data.elements); // 返回 OSM 对象列表 } else { resolve([]); } }, fail: (err) => { reject(err); } }); }); }; export function geoByName(keyword) { return new Promise((resolve, reject) => { uni.request({ url: "https://nominatim.openstreetmap.org/search", method: "GET", data: { q: keyword, // 地名 format: "jsonv2", // 返回 JSON 格式 addressdetails: 1 // 返回详细地址 }, header: { "User-Agent": "uni-app - OSM Demo" }, success: (res) => { if (res.data && res.data.length > 0) { resolve(res.data[0]); // 返回最匹配项 } else { resolve(null); } }, fail: (err) => reject(err) }); }); };