| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // 初始化地图
- const map = L.map('map').setView([31.2304, 121.4737], 13); // 上海坐标
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
- maxZoom: 19,
- attribution: '© OpenStreetMap'
- }).addTo(map);
-
- let markers = [];
- let routeLine = null;
-
- // 点击地图添加起点/终点
- map.on('click', async (e) => {
- const { lat, lng } = e.latlng;
-
- if (markers.length >= 1) {
- // 重置
- markers.forEach(m => map.removeLayer(m));
- markers = [];
- if (routeLine) {
- map.removeLayer(routeLine);
- routeLine = null;
- }
- }
-
- const marker = L.marker([lat, lng]).addTo(map);
- markers.push(marker);
-
-
- const url = `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`;
- const res = await fetch(url);
- const data = await res.json();
- console.log(data);
-
- marker.bindPopup(`📍 当前位置:<br>纬度:${lat}<br>经度:${lng}<br>${data.display_name}`).openPopup();
-
- console.log("选择的坐标:", lat, lng);
-
- if (markers.length === 2) {
- const start = markers[0].getLatLng();
- const end = markers[1].getLatLng();
-
- // 请求 OSRM 路线 API
- const url = `https://router.project-osrm.org/route/v1/driving/${start.lng},${start.lat};${end.lng},${end.lat}?overview=full&geometries=geojson`;
-
- const response = await fetch(url);
- const json = await response.json();
-
- if (json.code === 'Ok') {
- const coords = json.routes[0].geometry.coordinates.map(c => [c[1], c[0]]);
- routeLine = L.polyline(coords, { color: 'blue', weight: 5 }).addTo(map);
- map.fitBounds(routeLine.getBounds());
-
- const distance = (json.routes[0].distance / 1000).toFixed(2);
- const duration = (json.routes[0].duration / 60).toFixed(1);
- alert(`路线规划完成:\n距离:${distance} 公里\n预计时间:${duration} 分钟`);
- } else {
- alert('路线规划失败');
- }
- }
- });
-
- document.addEventListener('UniAppJSBridgeReady', function() {
- function initMap() {
- uni.postMessage({
- data: {
- mark:"initMap"
- }
- });
- }
-
- window.initMap = initMap;
- });
-
-
-
|