国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

這篇具有很好參考價(jià)值的文章主要介紹了記錄--寫一個(gè)高德地圖巡航功能的小DEMO。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識(shí),希望對(duì)大家有所幫助

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

風(fēng)格設(shè)置

加載地圖

使用AMapLoader.load加載地圖,從?控制臺(tái)??申請(qǐng)一個(gè)屬于自己的key

import AMapLoader from '@amap/amap-jsapi-loader';
...

const AMap = await AMapLoader.load({
    "key": "您自己申請(qǐng)的KEY",              // 申請(qǐng)好的Web端開發(fā)者Key,首次調(diào)用 load 時(shí)必填
    "version": "2.0",
    "plugins": ["AMap.Walking", "AMap.Driving"],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    "Loca": {
        version: '2.0.0'
    }
})

使用new AMap.Map實(shí)例化地圖,并設(shè)置mapStyle"amap://styles/grey",也可以在官網(wǎng)上自己設(shè)計(jì)屬于自己的風(fēng)格,主要講的不是這部分所以大概交代一下就過去了,實(shí)例化Map后返回一個(gè)map實(shí)例,后續(xù)的操作都需要用到。

添加GLCustomLayer圖層

new AMap.GLCustomLayer({
    zIndex: 100,
    init:()=>{},
    render: ()=>{}
})

threejs的加載和創(chuàng)建需要在init屬性的方法里操作,render主要是用來渲染一些鏡頭信息和?WebGLRenderer的重繪。

在init方法中創(chuàng)建一個(gè)THREEJS的透視相機(jī)

camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 100, 1 << 30);

鏡頭信息的獲取

前文實(shí)例化Map后獲取一個(gè)map的實(shí)例,其中提供了customCoords數(shù)據(jù)轉(zhuǎn)換的工具,可以從這里獲取到鏡頭信息,后續(xù)轉(zhuǎn)化經(jīng)緯度到3D世界坐標(biāo)時(shí)候也會(huì)用到,轉(zhuǎn)換工具需要提前獲取到,方便后續(xù)的工作。

var { near, far, fov, up, lookAt, position } = customCoords.getCameraParams();

轉(zhuǎn)換工具提供一個(gè)getCameraParams方法,其中包含相機(jī)位置等其他屬性


fov — 攝像機(jī)視錐體垂直視野角度
near — 攝像機(jī)視錐體近端面
far — 攝像機(jī)視錐體遠(yuǎn)端面


其中大部分屬性都和threejs的透視相機(jī)屬性相同,在render方法中更新相機(jī),這樣做的作用就是在后續(xù)做巡航功能時(shí)會(huì)實(shí)時(shí)更新相機(jī)位置

camera.near = near;
camera.far = far;
camera.fov = fov;
camera.position.set(...position);
camera.up.set(...up);
camera.lookAt(...lookAt);
camera.updateProjectionMatrix();

初始化loca

可視化圖層需要用到Loca容器,需要在地圖外繪制的圖層,需要在可視化圖層上繪制,

創(chuàng)建可視化作品前,首先要?jiǎng)?chuàng)建一個(gè) Loca 容器,這個(gè)容器可以幫您加載高德地圖作為底圖,或者幫您關(guān)聯(lián)已有的高德地圖作為底圖。
在使用地圖的時(shí),您可以使用任何一個(gè) JS API 已有的功能,Loca 容器不會(huì)影響原有地圖的任何功能和特性。這里創(chuàng)建的 Loca 容器您可以理解為是可視化圖層的管理器。

注意:創(chuàng)建地圖時(shí)候 Loca 版本要和map的版本一致,否則會(huì)報(bào)錯(cuò)

var loca = new (window as any).Loca.Container({
    map,
    zIndex: 9
});
將創(chuàng)建好的AMap.GLCustomLayer添加到map圖層
    const customLayer = await createGLCustomLayer(AMap, customCoords)
    map.add(customLayer);

createGLCustomLayer方法就是之前定義的初始化AMap.GLCustomLayer方法。返回一個(gè)GLCustomLayer實(shí)例,這樣就可以在地圖內(nèi)插入可視化內(nèi)容。

加載模型

回到new AMap.GLCustomLayer提供的init屬性中,創(chuàng)建一個(gè)3d場(chǎng)景并把模型加載到場(chǎng)景中,

renderer = new THREE.WebGLRenderer({
    context: gl,  // 地圖的 gl 上下文
});

// 自動(dòng)清空畫布這里必須設(shè)置為 false,否則地圖底圖將無法顯示
renderer.autoClear = false;

scene = new THREE.Scene();
加載模型方法跟threejs相同,使用gltfloderapi,加載方法返回一個(gè)promise,再使用
// 初始化模型
function initGltf(): Promise<THREE.Object3D> {
    return new Promise((resolve, reject) => {
        var loader = new GLTFLoader();
        loader.load('https://a.amap.com/jsapi_demos/static/gltf/Duck.gltf', (gltf: any) => {
            let object = gltf.scene;
            resolve(object)
        });
    })
}

模型添加到場(chǎng)景

const { x, y, z } = setRotation(new THREE.Vector3(90, 90, 0))

object.scale.set(15, 15, 15);


group.add(object)
group.add(new THREE.AxesHelper(100))
scene.add(group)
object.name = 'duck'

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

我在模型上添加了一個(gè)AxesHelper輔助線,官網(wǎng)上表示藍(lán)色代表z軸,但是放在地圖中發(fā)生了坐標(biāo)方向不一致的問題,threejs的向上方向是y軸,地圖中z是向上方向,這一點(diǎn)可能要注意一下了

用于簡(jiǎn)單模擬3個(gè)坐標(biāo)軸的對(duì)象.
紅色代表 X 軸. 綠色代表 Y 軸. 藍(lán)色代表 Z 軸.

旋轉(zhuǎn)模型

const { x, y, z } = setRotation(new THREE.Vector3(90, -90, 0))
group.rotation.set(x, y, z)
獲取旋轉(zhuǎn)角度的方法
export function setRotation(rotation: THREE.Vector3) {
    var x = Math.PI / 180 * (rotation.x || 0);
    var y = Math.PI / 180 * (rotation.y || 0);
    var z = Math.PI / 180 * (rotation.z || 0);
    return new THREE.Vector3(x, y, z)
}
?

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

計(jì)算軌跡

使用viewControl

現(xiàn)在模型已經(jīng)加載好,接下來就是要獲取軌跡數(shù)據(jù),鏡頭跟蹤在Loca中有相應(yīng)的apiviewControl,使用這個(gè)api調(diào)用addTrackAnimate方法,提供對(duì)應(yīng)參數(shù)即可;

loca.viewControl.addTrackAnimate({
    path: pathArr, // 鏡頭軌跡,二維數(shù)組,支持海拔
    duration: 120000, // 時(shí)長(zhǎng)
    timing: [[0, 0.3], [1, 0.7]], // 速率控制器
    rotationSpeed: 1800, // 每秒旋轉(zhuǎn)多少度
}, function () {
    console.log('完成',);
});
pathArr是一個(gè)軌跡數(shù)組,
const pathArr = [[116.310348, 39.89702], [116.310541, 39.884855], [116.320963, 39.889154], [116.322894, 39.889608], [116.325542, 39.889822], [116.328074, 39.889761], [116.349104, 39.889429], [116.348517, 39.89747], [116.355205, 39.898413], [116.35656, 39.90021], [116.355802, 39.93225]]
為了方便查看,我們?cè)谑褂肔oca提供的繪制引導(dǎo)線功能將這幾個(gè)關(guān)鍵點(diǎn)連接的引導(dǎo)線畫一下
// 導(dǎo)航線
var polyline = new AMap.Polyline({
    path: pathArr,            // 設(shè)置線覆蓋物路徑
    showDir: true,
    strokeColor: '#3366bb',   // 線顏色
    strokeWeight: 10,           // 線寬
    zIndex: 1
});
map.add(polyline)

以上工作做完后,需要調(diào)用一下loca.animate.start();方法,否則可視化圖層不會(huì)更新,相應(yīng)數(shù)據(jù)也獲取不到,現(xiàn)在畫面變成這樣了

記錄--寫一個(gè)高德地圖巡航功能的小DEMO


除了以上這種方法去實(shí)現(xiàn)鏡頭的移動(dòng),還可以通過插入坐標(biāo)的方式去實(shí)現(xiàn),也是傳統(tǒng)threejs中使用的方法,就是利用tweenjs的動(dòng)畫,運(yùn)動(dòng)過程中改變map.setCenter,實(shí)現(xiàn)跟蹤,這部分代碼在changeObject方法中,感興趣的可以去 倉庫 查看,

鏡頭跟蹤

移動(dòng)模型

利用requestAnimationFrame函數(shù)寫一個(gè)循環(huán)渲染的方法,在調(diào)用的同時(shí)獲取鏡頭中心坐標(biāo),通過customCoords轉(zhuǎn)換工具將經(jīng)緯度轉(zhuǎn)為3D世界的坐標(biāo),并將該坐標(biāo)賦值給object模型,再通過map提供的getRotation方法,獲取地圖的旋轉(zhuǎn)角度,并將該角度賦值給object模型的y軸,使模型沿著y軸旋轉(zhuǎn),至于旋轉(zhuǎn)的速度,在前面定義addTrackAnimate時(shí)的rotationSpeed屬性定義的

const render = () => {
    requestAnimationFrame(() => {
        render()
    })
    if (object) {
        const center = map.getCenter()
        var position = customCoords.lngLatsToCoords([
            [center.lng, center.lat]
        ])[0];
        const v3 = new THREE.Vector3(position[1], 0, position[0])
        object.position.copy(v3)
        const rotation = map.getRotation()

        object.rotation.y = rotation * Math.PI / 180
    }
    map.render();
    TWEEN && TWEEN.update()
}

以上文章內(nèi)容有一些關(guān)于threejs的基礎(chǔ)知識(shí),可以先提前了解一下,否則有很多好玩有趣的效果實(shí)現(xiàn)不出來。

記錄--寫一個(gè)高德地圖巡航功能的小DEMO

其他

關(guān)于飛線,只是作為裝飾,顯得畫面不那么呆板,在官網(wǎng)上也有案例,簡(jiǎn)單貼一個(gè)代碼吧

 // 飛線
var geo = new (window as any).Loca.GeoJSONSource({
    url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/bj_bus.json',
});

var layer = new (window as any).Loca.PulseLineLayer({
    // loca,
    zIndex: 10,
    opacity: 1,
    visible: true,
    zooms: [1, 30],
});

var headColors = ['#EFBB51', '#7F3CFF', '#4CC19B', '#0B5D74', '#E06AC4', '#223F9B', '#F15C1A', '#7A0FA6'];

layer.setSource(geo);

layer.setStyle({
    altitude: 0,
    lineWidth: 2,
    // 脈沖頭顏色
    headColor: (_, feature) => {
        return headColors[feature.properties.type - 1];
    },
    // 脈沖尾顏色
    trailColor: 'rgba(128, 128, 128, 0.5)',
    // 脈沖長(zhǎng)度,0.25 表示一段脈沖占整條路的 1/4
    interval: 0.25,
    // 脈沖線的速度,幾秒鐘跑完整段路,可以通過計(jì)算距離動(dòng)態(tài)改變時(shí)間
    duration: 5000,
});
// 飛線結(jié)束

loca.add(layer);

本文轉(zhuǎn)載于:

https://juejin.cn/post/7242145254056673335

如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。

?記錄--寫一個(gè)高德地圖巡航功能的小DEMO文章來源地址http://www.zghlxwxcb.cn/news/detail-508792.html

到了這里,關(guān)于記錄--寫一個(gè)高德地圖巡航功能的小DEMO的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 申請(qǐng)高德地圖API【流程記錄】

    申請(qǐng)高德地圖API【流程記錄】

    現(xiàn)在我們需要使用高德地圖的api進(jìn)行功能的實(shí)現(xiàn),這就需要我們申請(qǐng)一個(gè)高德地圖的key 1.進(jìn)入官網(wǎng) 登錄賬號(hào) 點(diǎn)擊高德開放平臺(tái) | 高德地圖API (amap.com)。進(jìn)行登錄 選擇控制臺(tái) 注冊(cè)為開發(fā)者 填寫郵箱獲取驗(yàn)證碼后,進(jìn)行支付寶掃碼進(jìn)行實(shí)名認(rèn)證 注冊(cè)完成 點(diǎn)擊確認(rèn)即可 2.申請(qǐng)

    2024年01月17日
    瀏覽(21)
  • 記錄--在高德地圖實(shí)現(xiàn)卷簾效果

    記錄--在高德地圖實(shí)現(xiàn)卷簾效果

    今天介紹一個(gè)非常簡(jiǎn)單的入門級(jí)小案例,就是地圖的卷簾效果實(shí)現(xiàn),各大地圖引擎供應(yīng)商都有相關(guān)示例,很奇怪高德居然沒有,我看了下文檔發(fā)現(xiàn)其實(shí)也是可以簡(jiǎn)單實(shí)現(xiàn)的,演示代碼放到文末。本文用到了圖層掩模,即圖層遮罩,讓圖層只在指定范圍內(nèi)顯示。 1.創(chuàng)建目標(biāo)圖層

    2024年02月13日
    瀏覽(21)
  • 記錄--在高德地圖實(shí)現(xiàn)流動(dòng)的線圖層

    記錄--在高德地圖實(shí)現(xiàn)流動(dòng)的線圖層

    有朋友反饋說最近分享的內(nèi)容不太好理解,那么今天來分享個(gè)早前開發(fā)的圖層制作過程,基于GIS數(shù)據(jù)代碼生成流動(dòng)的車行線,上手很簡(jiǎn)單。下面我將在實(shí)現(xiàn)思路、具體開發(fā)、數(shù)據(jù)來源這幾方面逐步講解,希望讀者能從中獲取對(duì)數(shù)據(jù)可視化開發(fā)的興趣。文中使用到高德地圖JSA

    2024年02月06日
    瀏覽(48)
  • Android中集成高德地圖SDK實(shí)現(xiàn)地圖定位和導(dǎo)航功能(二)

    Android中集成高德地圖SDK實(shí)現(xiàn)地圖定位和導(dǎo)航功能(二)

    我們接著上一篇文章開始繼續(xù)實(shí)現(xiàn)android中集成高德地圖的SDK實(shí)現(xiàn)地圖 定位,搜索,導(dǎo)航的功能 可以參考官方文檔 android6.0以后需要?jiǎng)討B(tài)申請(qǐng)權(quán)限 這里我就不做詳細(xì)解釋了 在androidMainfest文件的appliation 標(biāo)簽中添加之前在高的開發(fā)者平臺(tái)上的key,代碼如下 我的key是ba63b… 首先要

    2024年02月09日
    瀏覽(26)
  • Android中集成高德地圖SDK實(shí)現(xiàn)地圖定位和導(dǎo)航功能(一)

    Android中集成高德地圖SDK實(shí)現(xiàn)地圖定位和導(dǎo)航功能(一)

    名稱和應(yīng)用類型隨便填 1.添加key 2.獲取SHA1值 2.1.使用windwos+R 輸入cmd 打開控制窗口 輸入 where keytool 獲取keytool的路徑 2.2.在環(huán)境變量中配置keytools 的路徑 2.3 然后接著cmd窗口中輸入 keytool -v -list -keystore 后面是你簽名證書的我的是keytool -v -list -keystore C:Users86181.androiddebug.keystor

    2024年02月12日
    瀏覽(30)
  • Android高德地圖定位實(shí)現(xiàn)簽到打卡功能(全網(wǎng)最詳細(xì)+收藏)

    Android高德地圖定位實(shí)現(xiàn)簽到打卡功能(全網(wǎng)最詳細(xì)+收藏)

    前言 ? ? ? ? 本章根據(jù)高德地圖API,實(shí)現(xiàn)打卡簽到功能。用到了定位SDK 和地圖SDK、覆蓋物。打卡范圍圖形可以支持多種形狀,如: 圓形 、 長(zhǎng)方形 、 多邊形。 核心邏輯: ? ? 獲取當(dāng)前定位信息,然后通過Marker繪制小圖標(biāo)進(jìn)行展示,并在onLocationChanged回調(diào)方法中不斷重新繪

    2024年02月03日
    瀏覽(25)
  • flutter實(shí)現(xiàn)調(diào)用原生安卓的高德地圖導(dǎo)航功能(插件化)

    flutter實(shí)現(xiàn)調(diào)用原生安卓的高德地圖導(dǎo)航功能(插件化)

    查看了高德地圖flutter插件的文檔,都沒有能支持導(dǎo)航的功能,并且flutter的高德插件支持的功能特別少,沒辦法,只能使用安卓原生的導(dǎo)航,flutter去調(diào)用了,具體實(shí)現(xiàn)方式如下: 創(chuàng)建 Flutter 插件 使用--template=plugin 聲明創(chuàng)建的是同時(shí)包含了 iOS 和 Android 代碼的 plugin; 使用--o

    2024年02月16日
    瀏覽(20)
  • Unity 關(guān)于制作一個(gè)2D的小地圖

    Unity 關(guān)于制作一個(gè)2D的小地圖

    實(shí)際效果: ? 需求:1.實(shí)現(xiàn)右上角小地圖,實(shí)現(xiàn)同步本地地圖 ? ? ? ? ? 2.實(shí)現(xiàn)小地圖內(nèi)的角色圖標(biāo)和實(shí)際角色同步 實(shí)現(xiàn)原理: 1.在所需要的地圖上劃分為一下結(jié)構(gòu) 圖層Tilemap6_Minimap的Layer為Minimap 同時(shí)這里說一個(gè)問題,在同層級(jí)的圖片,序列越晚渲染越上層 2.使用另一個(gè)攝像

    2024年02月14日
    瀏覽(30)
  • 高德地圖API使用~Web開發(fā)~從創(chuàng)建到具體功能展示

    高德地圖API使用~Web開發(fā)~從創(chuàng)建到具體功能展示

    首先在擁有一個(gè)自己賬號(hào),其次高德開放平臺(tái)注冊(cè)一個(gè)自己的key值和密鑰 ?然后在publicindex.html文件下,放上這段代碼 然后找一個(gè)頁面, ?放上去。刷新,于是你就得到了一個(gè)這樣的地圖。 ?需要注意的點(diǎn),初始化加載地圖的時(shí)候,調(diào)用方法應(yīng)該寫在mounted而不是created中。其

    2024年02月06日
    瀏覽(22)
  • 記錄下uniapp開發(fā)結(jié)合webview調(diào)用高德地圖(路線規(guī)劃,多路選擇,雙向通信)

    記錄下uniapp開發(fā)結(jié)合webview調(diào)用高德地圖(路線規(guī)劃,多路選擇,雙向通信)

    uniapp結(jié)合webview實(shí)現(xiàn)(微信和app上)簡(jiǎn)單版導(dǎo)航打車應(yīng)用,總體實(shí)現(xiàn)方案是 在uniapp上嵌入web網(wǎng)頁,在web網(wǎng)頁上調(diào)用高德地圖api實(shí)現(xiàn)渲染地圖及路線 去高德開放平臺(tái)注冊(cè)賬號(hào)并創(chuàng)建web應(yīng)用,再生成web安全密鑰和key 如果需要運(yùn)行到微信上則需要開通微信公眾平臺(tái)上應(yīng)用需要的定位

    2024年02月19日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包