2 lines
7.1 KiB
JavaScript
2 lines
7.1 KiB
JavaScript
import{j as l,e as a,z as e,c as t,w as n,i as s,o,a as u,n as i,u as c,b as r,t as d,g as f,q as p,s as g,J as m,h as v,d as _,I as h,N as b}from"./index-Cr_ht7z3.js";import{_ as y}from"./home_bg.BmQJoAoC.js";import{_ as k}from"./ic_back.BKIFUCMS.js";import{o as V}from"./uni-app.es.yixCAkvl.js";import{o as x}from"./navigation.Bxm8NwPW.js";import{_ as F}from"./_plugin-vue_export-helper.BCo6x5W8.js";const M=F({__name:"index",setup(F){const M=l().statusBarHeight||0,$=a(""),A=a(""),j=a(""),w=a(""),C=a(0),E=a([]),S=a(""),U=a(null),I=a(!1),P=a(!1),R=e({lat:39.9042,lng:116.4074}),Y=a(12),z=a([]),L=a([]);function W(){p()}function q(l){return l>=1e3?(l/1e3).toFixed(2)+" km":l+" m"}async function N(){if($.value&&A.value&&j.value&&w.value){P.value=!0,U.value=null;try{const e=`${$.value},${A.value}`,t=`${j.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("&");m({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)})}}E.value=a,function(l){if(!l||0===l.length)return;I.value=!0;const a=Math.floor(l.length/2);R.lat=l[a].lat,R.lng=l[a].lng;const e=l[0],t=l[l.length-1];z.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{P.value=!1}var l,a}else g({title:"请输入完整的起终点坐标",icon:"none"})}function B(){const l=parseFloat(S.value);if(isNaN(l)||l<0)return void g({title:"请输入有效的距离值",icon:"none"});if(l>C.value)return void g({title:"距离超出路线总长度",icon:"none"});if(E.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=O(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}}(E.value,l);a&&(U.value={lng:a.lng.toFixed(6),lat:a.lat.toFixed(6)},function(l){const a=z.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:`距起点 ${q(parseFloat(S.value))}`,display:"ALWAYS",fontSize:12,borderRadius:4,padding:4,bgColor:"#1A73EC",color:"#fff"}}),z.value=a,R.lat=l.lat,R.lng=l.lng}(a))}function O(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 T(){U.value&&x(parseFloat(U.value.lat),parseFloat(U.value.lng),"路线定位点")}return V((()=>{})),(l,a)=>{const e=v,p=_,g=s,m=h,V=b;return o(),t(g,{class:"route-plan-page"},{default:n((()=>[u(e,{class:"bg-image",src:y,mode:"aspectFill"}),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:k,mode:"aspectFit",onClick:W}),u(p,{class:"nav-title"},{default:n((()=>[r("路线规划")])),_: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((()=>[r("起点经度")])),_:1}),u(m,{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((()=>[r("起点纬度")])),_:1}),u(m,{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((()=>[r("终点经度")])),_:1}),u(m,{class:"form-input",type:"digit",modelValue:j.value,"onUpdate:modelValue":a[2]||(a[2]=l=>j.value=l),placeholder:"请输入终点经度"},null,8,["modelValue"])])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[r("终点纬度")])),_:1}),u(m,{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:N},{default:n((()=>[u(p,{class:"plan-btn-text"},{default:n((()=>[r("规划路线")])),_: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((()=>[r("路线总长度")])),_:1}),u(p,{class:"result-value"},{default:n((()=>[r(d(q(C.value)),1)])),_:1})])),_:1}),u(g,{class:"form-group"},{default:n((()=>[u(p,{class:"form-label"},{default:n((()=>[r("输入距离(米)")])),_:1}),u(m,{class:"form-input",type:"digit",modelValue:S.value,"onUpdate:modelValue":a[4]||(a[4]=l=>S.value=l),placeholder:"请输入距离值"},null,8,["modelValue"])])),_:1}),u(g,{class:"plan-btn",onClick:B},{default:n((()=>[u(p,{class:"plan-btn-text"},{default:n((()=>[r("定位坐标")])),_:1})])),_:1}),U.value?(o(),t(g,{key:0,class:"result-card"},{default:n((()=>[u(p,{class:"result-label"},{default:n((()=>[r("定位坐标")])),_:1}),u(p,{class:"result-value"},{default:n((()=>[r("经度: "+d(U.value.lng)+",纬度: "+d(U.value.lat),1)])),_:1})])),_:1})):f("",!0)])),_:1})):f("",!0),I.value?(o(),t(g,{key:1,class:"map-area"},{default:n((()=>[u(V,{id:"routeMap",class:"route-map",latitude:R.lat,longitude:R.lng,scale:Y.value,markers:z.value,polyline:L.value,"show-location":""},null,8,["latitude","longitude","scale","markers","polyline"])])),_:1})):f("",!0),U.value?(o(),t(g,{key:2,class:"bottom-bar"},{default:n((()=>[u(g,{class:"navigate-btn",onClick:T},{default:n((()=>[u(p,{class:"navigate-btn-text"},{default:n((()=>[r("导航至该位置")])),_:1})])),_:1})])),_:1})):f("",!0)])),_:1}),P.value?(o(),t(g,{key:0,class:"loading-mask"},{default:n((()=>[u(p,{class:"loading-text"},{default:n((()=>[r("路线规划中...")])),_:1})])),_:1})):f("",!0)])),_:1})}}},[["__scopeId","data-v-ed9d5487"]]);export{M as default};
|