2 lines
7.0 KiB
JavaScript
2 lines
7.0 KiB
JavaScript
import{g as l,e as a,f as e,c as t,w as n,i as s,o,a as u,n as i,u as c,b as d,t as r,h as f,j as p,s as g,k as v,l as m,d as h,I as _,M as b}from"./index-CbyVXjCs.js";import{_ as y}from"./ic_back.BKIFUCMS.js";import{o as k}from"./uni-app.es.DonsXiwp.js";import{o as V}from"./navigation.CTXUhgsb.js";import{_ as x}from"./_plugin-vue_export-helper.BCo6x5W8.js";const M=x({__name:"index",setup(x){const M=l().statusBarHeight||0,$=a(""),A=a(""),F=a(""),w=a(""),C=a(0),j=a([]),E=a(""),S=a(null),U=a(!1),I=a(!1),P=e({lat:39.9042,lng:116.4074}),R=a(12),Y=a([]),L=a([]);function W(){p()}function z(l){return l>=1e3?(l/1e3).toFixed(2)+" km":l+" m"}async function q(){if($.value&&A.value&&F.value&&w.value){I.value=!0,S.value=null;try{const e=`${$.value},${A.value}`,t=`${F.value},${w.value}`,n=await(l="https://restapi.amap.com/v3/direction/driving",a={key:"YOUR_AMAP_WEB_SERVICE_KEY",origin:e,destination:t,extensions:"all"},new Promise(((e,t)=>{const n=Object.entries(a).map((([l,a])=>`${l}=${encodeURIComponent(a)}`)).join("&");v({url:`${l}?${n}`,method:"GET",timeout:15e3,success(l){e(l.data)},fail(l){t(l)}})})));if("1"===n.status&&n.route&&n.route.paths&&n.route.paths.length>0){const l=n.route.paths[0];C.value=parseInt(l.distance)||0;const a=[];for(const e of l.steps){const l=e.polyline.split(";");for(const e of l){const[l,t]=e.split(",");a.push({lng:parseFloat(l),lat:parseFloat(t)})}}j.value=a,function(l){if(!l||0===l.length)return;U.value=!0;const a=Math.floor(l.length/2);P.lat=l[a].lat,P.lng=l[a].lng;const e=l[0],t=l[l.length-1];Y.value=[{id:1,latitude:e.lat,longitude:e.lng,title:"起点",iconPath:"/static/images/ic_back.png",width:30,height:30,callout:{content:"起点",display:"ALWAYS",fontSize:12,borderRadius:4,padding:4}},{id:2,latitude:t.lat,longitude:t.lng,title:"终点",iconPath:"/static/images/ic_back.png",width:30,height:30,callout:{content:"终点",display:"ALWAYS",fontSize:12,borderRadius:4,padding:4}}],L.value=[{points:l.map((l=>({latitude:l.lat,longitude:l.lng}))),color:"#1A73EC",width:6,arrowLine:!0}]}(a)}else{const l=n.infocode||"",a=n.info||"路线规划失败";g({title:`路线规划失败: ${a}(${l})`,icon:"none",duration:3e3})}}catch(e){g({title:"网络异常或服务不可用,请稍后重试",icon:"none",duration:3e3})}finally{I.value=!1}var l,a}else g({title:"请输入完整的起终点坐标",icon:"none"})}function B(){const l=parseFloat(E.value);if(isNaN(l)||l<0)return void g({title:"请输入有效的距离值",icon:"none"});if(l>C.value)return void g({title:"距离超出路线总长度",icon:"none"});if(j.value.length<2)return void g({title:"路线数据不足",icon:"none"});const a=function(l,a){if(!l||l.length<2)return null;if(a<=0)return{lng:l[0].lng,lat:l[0].lat};let e=0;for(let t=0;t<l.length-1;t++){const n=N(l[t],l[t+1]);if(e+n>=a){const s=(a-e)/n;return{lng:l[t].lng+(l[t+1].lng-l[t].lng)*s,lat:l[t].lat+(l[t+1].lat-l[t].lat)*s}}e+=n}return{lng:l[l.length-1].lng,lat:l[l.length-1].lat}}(j.value,l);a&&(S.value={lng:a.lng.toFixed(6),lat:a.lat.toFixed(6)},function(l){const a=Y.value.filter((l=>l.id<=2));a.push({id:3,latitude:l.lat,longitude:l.lng,title:"定位点",iconPath:"/static/images/ic_back.png",width:30,height:30,callout:{content:`距起点 ${z(parseFloat(E.value))}`,display:"ALWAYS",fontSize:12,borderRadius:4,padding:4,bgColor:"#1A73EC",color:"#fff"}}),Y.value=a,P.lat=l.lat,P.lng=l.lng}(a))}function N(l,a){const e=l=>l*Math.PI/180,t=e(a.lat-l.lat),n=e(a.lng-l.lng),s=Math.sin(t/2)**2+Math.cos(e(l.lat))*Math.cos(e(a.lat))*Math.sin(n/2)**2;return 6371e3*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))}function O(){S.value&&V(parseFloat(S.value.lat),parseFloat(S.value.lng),"路线定位点")}return k((()=>{})),(l,a)=>{const e=m,p=h,g=s,v=_,k=b;return o(),t(g,{class:"route-plan-page"},{default:n((()=>[u(g,{class:"content"},{default:n((()=>[u(g,{class:"nav-bar",style:i({paddingTop:c(M)+"px"})},{default:n((()=>[u(g,{class:"nav-bar-inner"},{default:n((()=>[u(e,{class:"nav-icon",src:y,mode:"aspectFit",onClick:W}),u(p,{class:"nav-title"},{default:n((()=>[d("路线规划")])),_:1}),u(g,{class:"nav-icon-placeholder"})])),_:1})])),_:1},8,["style"]),u(g,{class:"form-area"},{default:n((()=>[u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[d("起点经度")])),_:1}),u(v,{class:"form-input",type:"digit",modelValue:$.value,"onUpdate:modelValue":a[0]||(a[0]=l=>$.value=l),placeholder:"请输入起点经度"},null,8,["modelValue"])])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[d("起点纬度")])),_:1}),u(v,{class:"form-input",type:"digit",modelValue:A.value,"onUpdate:modelValue":a[1]||(a[1]=l=>A.value=l),placeholder:"请输入起点纬度"},null,8,["modelValue"])])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[d("终点经度")])),_:1}),u(v,{class:"form-input",type:"digit",modelValue:F.value,"onUpdate:modelValue":a[2]||(a[2]=l=>F.value=l),placeholder:"请输入终点经度"},null,8,["modelValue"])])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[d("终点纬度")])),_:1}),u(v,{class:"form-input",type:"digit",modelValue:w.value,"onUpdate:modelValue":a[3]||(a[3]=l=>w.value=l),placeholder:"请输入终点纬度"},null,8,["modelValue"])])),_:1}),u(g,{class:"plan-btn",onClick:q},{default:n((()=>[u(p,{class:"plan-btn-text"},{default:n((()=>[d("规划路线")])),_:1})])),_:1})])),_:1}),C.value>0?(o(),t(g,{key:0,class:"result-area"},{default:n((()=>[u(g,{class:"result-card"},{default:n((()=>[u(p,{class:"result-label"},{default:n((()=>[d("路线总长度")])),_:1}),u(p,{class:"result-value"},{default:n((()=>[d(r(z(C.value)),1)])),_:1})])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[d("输入距离(米)")])),_:1}),u(v,{class:"form-input",type:"digit",modelValue:E.value,"onUpdate:modelValue":a[4]||(a[4]=l=>E.value=l),placeholder:"请输入距离值"},null,8,["modelValue"])])),_:1}),u(g,{class:"plan-btn",onClick:B},{default:n((()=>[u(p,{class:"plan-btn-text"},{default:n((()=>[d("定位坐标")])),_:1})])),_:1}),S.value?(o(),t(g,{key:0,class:"result-card"},{default:n((()=>[u(p,{class:"result-label"},{default:n((()=>[d("定位坐标")])),_:1}),u(p,{class:"result-value"},{default:n((()=>[d("经度: "+r(S.value.lng)+",纬度: "+r(S.value.lat),1)])),_:1})])),_:1})):f("",!0)])),_:1})):f("",!0),U.value?(o(),t(g,{key:1,class:"map-area"},{default:n((()=>[u(k,{id:"routeMap",class:"route-map",latitude:P.lat,longitude:P.lng,scale:R.value,markers:Y.value,polyline:L.value,"show-location":""},null,8,["latitude","longitude","scale","markers","polyline"])])),_:1})):f("",!0),S.value?(o(),t(g,{key:2,class:"bottom-bar"},{default:n((()=>[u(g,{class:"navigate-btn",onClick:O},{default:n((()=>[u(p,{class:"navigate-btn-text"},{default:n((()=>[d("导航至该位置")])),_:1})])),_:1})])),_:1})):f("",!0)])),_:1}),I.value?(o(),t(g,{key:0,class:"loading-mask"},{default:n((()=>[u(p,{class:"loading-text"},{default:n((()=>[d("路线规划中...")])),_:1})])),_:1})):f("",!0)])),_:1})}}},[["__scopeId","data-v-169919d4"]]);export{M as default};
|