You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
11 KiB

1 month ago
import{C as e,Ct as t,D as n,E as r,G as i,H as a,I as o,P as s,Qt as c,S as l,T as u,X as d,Y as f,at as p,b as m,d as ee,et as h,ht as g,m as _,ot as v,q as te,rt as y,tn as b,x,z as S}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{_ as C,c as w,l as T,s as E}from"./index-BAoVGmph.js";import{t as D}from"./usePageLoad-DFTLo_Lv.js";import{d as O,h as k,i as A,n as j}from"./assets-BY-4cpKy.js";import{a as M,c as N,f as P,i as F,l as I,n as ne,o as L,s as R,t as z,u as B}from"./tiandituMap-BbTEN0Ou.js";var re={class:`pick-map-wrap`},ie={key:0,class:`pick-search-bar`},V={key:1,class:`pick-search-results`},ae=[`onClick`],oe={key:2,class:`pick-map-error`},se={key:3,class:`pick-map-shell`},ce={key:0,class:`pick-map-loading`},H={key:4,class:`pick-hint`},U=E(n({__name:`TiandituPickMap`,props:s({height:{default:360},defaultKeyword:{default:``}},{longitude:{default:``},longitudeModifiers:{},latitude:{default:``},latitudeModifiers:{}}),emits:[`update:longitude`,`update:latitude`],setup(t){let n=t,s=h(t,`longitude`),d=h(t,`latitude`),v=`tianditu-pick-map-${Math.random().toString(36).slice(2)}`,x=g(null),C=g(``),w=g(!1),E=g(``),D=g(!1),O=g([]),k=null,A=null,j=null,U=null,W=null,G=!1;function K(e){let t=Number(e);return Number.isFinite(t)?t:null}function q(){let e=K(s.value),t=K(d.value);return e!=null&&t!=null?{lng:e,lat:t,zoom:14}:{lng:z.lng,lat:z.lat,zoom:14}}function J(){if(W?.(),W=null,G=!1,k&&A)try{k.removeOverLay(A)}catch{}A=null,k?.destroy?.(),k=null,j=null,x.value&&(x.value.innerHTML=``)}function Y(e,t,n=16){s.value=e.toFixed(6),d.value=t.toFixed(6),k&&U&&(B(k,U,{lng:e,lat:t},n),X(U,e,t))}function X(e,t,n){k&&(A&&=(k.removeOverLay(A),null),A=new e.Marker(new e.LngLat(t,n)),k.addOverLay(A))}function Z(e){!k||!e.LocalSearch||(j=new e.LocalSearch(k,{pageCapacity:10,onSearchComplete:e=>{if(D.value=!1,Number(e.getResultType())!==1){O.value=[],T.warning(`未找到相关地点,请换个关键词试试`);return}let t=N(e.getPois()).filter(e=>!!I(e));O.value=t,t.length||T.warning(`未找到有效坐标的地点,请换个关键词试试`)}}))}function Q(){let e=E.value.trim();if(!e){T.warning(`请输入搜索关键词`);return}if(!j){T.warning(`地图尚未就绪,请稍后再试`);return}D.value=!0,O.value=[],j.search(e)}function le(e){let t=I(e);if(!t){T.warning(`该地点坐标无效,请换一条结果`);return}Y(t.lng,t.lat),O.value=[]}function ue(){G&&(G=!1,n.defaultKeyword.trim()&&(E.value=n.defaultKeyword.trim(),Q()))}function $(){if(!k||!U)return;let e=q();B(k,U,{lng:e.lng,lat:e.lat},e.zoom)}async function de(){await o();let e=x.value;if(e){if(C.value=``,!L()){C.value=`未配置天地图 KeyVITE_TIANDITU_TK`;return}w.value=!0;try{if(J(),!await P(e)){C.value=`地图容器未就绪,请关闭后重试`;return}let t=await R();U=t,e.innerHTML=``,e.id=v,e.style.width=`100%`,e.style.height=`${n.height}px`,k=M(t,v),F(k);let r=q();k.centerAndZoom(new t.LngLat(r.lng,r.lat),r.zoom);let i=K(s.value),a=K(d.value);i!=null&&a!=null?X(t,i,a):X(t,r.lng,r.lat),Z(t),k.addEventListener?.(`click`,e=>{let t=e?.lnglat?.lng,n=e?.lnglat?.lat;t==null||n==null||(Y(t,n),O.value=[])}),k.addEventListener?.(`load`,()=>{if(!k||!U)return;let e=q();B(k,U,{lng:e.lng,lat:e.lat},e.zoom),ue()}),W=ne(e,()=>k),B(k,t,{lng:r.lng,lat:r.lat},r.zoom),window.setTimeout($,300),window.setTimeout($,800),window.setTimeout($,1500),n.defaultKeyword.trim()&&(G=!0)}catch(e){C.value=e instanceof Error?e.message:`地图加载失败`}finally{if(w.value=!1,k&&U){let e=q();B(k,U,{lng:e.lng,lat:e.lat},e.zoom)}}}}return y([s,d],async()=>{let e=K(s.value),t=K(d.value);!k||e==null||t==null||X(await R(),e,t)}),a(()=>{de()}),S(()=>{J(),U=null}),(t,a)=>{let o=f(`el-input`),s=f(`el-button`);return i(),e(`div`,re,[C.value?l(``,!0):(i(),e(`div`,ie,[r(o,{modelValue:E.value,"onUpdate:modelValue":a[0]||=e=>E.value=e,placeholder:`搜索地点,如:复旦大学`,clearable:``,onKeyup:ee(Q,[`enter`])},null,8,[`modelValue`]),r(s,{type:`primary`,loading:D.value,onClick:Q},{default:p(()=>[...a[1]||=[u(`搜索`,-1)]]),_:1},8,[`loading`])])),O.value.length?(i(),e(`ul`,V,[(i(!0),e(_,nu