| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // 查询 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)
- });
- });
- };
|