|
|
|
|
|
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-BKGTVidA.js";import{n as D,t as O}from"./usePageLoad-D9c6HmVf.js";import{g as k,i as A,n as j,u as M}from"./assets-Dso48Xrt.js";import{c as N,d as P,f as F,h as I,i as L,l as ne,o as R,p as z,t as B,u as V}from"./tiandituMap-B0Q-vV8c.js";var re={class:`pick-map-wrap`},ie={key:0,class:`pick-search-bar`},ae={key:1,class:`pick-search-results`},oe=[`onClick`],se={key:2,class:`pick-map-error`},ce={key:3,class:`pick-map-shell`},le={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,M=null,U=null,W=!1;function G(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function K(){let e=G(s.value),t=G(d.value);return e!=null&&t!=null?{lng:e,lat:t,zoom:14}:{lng:B.lng,lat:B.lat,zoom:14}}function q(){if(U?.(),U=null,W=!1,k&&A)try{k.removeOverLay(A)}catch{}A=null,k?.destroy?.(),k=null,j=null,x.value&&(x.value.innerHTML=``)}function J(e,t,n=16){s.value=e.toFixed(6),d.value=t.toFixed(6),k&&M&&(z(k,M,{lng:e,lat:t},n),Y(M,e,t))}function Y(e,t,n){k&&(A&&=(k.removeOverLay(A),null),A=new e.Marker(new e.LngLat(t,n)),k.addOverLay(A))}function ue(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=P(e.getPois()).filter(e=>!!F(e));O.value=t,t.length||T.warning(`未找到有效坐标的地点,请换个关键词试试`)}}))}function X(){let e=E.value.trim();if(!e){T.warning(`请输入搜索关键词`);return}if(!j){T.warning(`地图尚未就绪,请稍后再试`);return}D.value=!0,O.value=[],j.search(e)}function Z(e){let t=F(e);if(!t){T.warning(`该地点坐标无效,请换一条结果`);return}J(t.lng,t.lat),O.value=[]}function de(){W&&(W=!1,n.defaultKeyword.trim()&&(E.value=n.defaultKeyword.trim(),X()))}function Q(){if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}async function $(){await o();let e=x.value;if(e){if(C.value=``,!ne()){C.value=`未配置天地图 Key(VITE_TIANDITU_TK)`;return}w.value=!0;try{if(q(),!await I(e)){C.value=`地图容器未就绪,请关闭后重试`;return}let t=await V();M=t,e.innerHTML=``,e.id=v,e.style.width=`100%`,e.style.height=`${n.height}px`,k=N(t,v),R(k);let r=K();k.centerAndZoom(new t.LngLat(r.lng,r.lat),r.zoom);let i=G(s.value),a=G(d.value);i!=null&&a!=null?Y(t,i,a):Y(t,r.lng,r.lat),ue(t),k.addEventListener?.(`click`,e=>{let t=e?.lnglat?.lng,n=e?.lnglat?.lat;t==null||n==null||(J(t,n),O.value=[])}),k.addEventListener?.(`load`,()=>{if(!k||!M)return;let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom),de()}),U=L(e,()=>k),z(k,t,{lng:r.lng,lat:r.lat},r.zoom),window.setTimeout(Q,300),window.setTimeout(Q,800),window.setTimeout(Q,1500),n.defaultKeyword.trim()&&(W=!0)}catch(e){C.value=e instanceof Error?e.message:`地图加载失败`}finally{if(w.value=!1,k&&M){let e=K();z(k,M,{lng:e.lng,lat:e.lat},e.zoom)}}}}return y([s,d],async()=>{let e=G(s.value),t=G(d.value);!k||e==null||t==null||Y(await V(),e,t)}),a(()=>{$()}),S(()=>{q(),M=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(X,[`enter`])},null,8,[`modelValue`]),r(s,{type:`primary`,loading:D.value,onClick:X},{default:p(()=>[...a[1]||=[u(`搜索`,-1)]]),_:1},8,[`load
|