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

基于Lealfet.js展示Turf.js生成的平滑曲線實(shí)踐

這篇具有很好參考價(jià)值的文章主要介紹了基于Lealfet.js展示Turf.js生成的平滑曲線實(shí)踐。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

前言

一、問(wèn)題的由來(lái)

1、創(chuàng)建網(wǎng)頁(yè)框架

2、創(chuàng)建map對(duì)象

3、構(gòu)建點(diǎn)位,生成路線

?二、Turf.js平滑曲線改造

1、官網(wǎng)方法介紹

2、0.4彎曲度曲線

3、0.85彎曲度曲線

4、0.1度彎曲曲線

5、綜合對(duì)比?

總結(jié)


前言

????????在很多的關(guān)于路線的gis應(yīng)用中,我們經(jīng)常會(huì)有展示路線的需求,比如采集關(guān)鍵點(diǎn)位的經(jīng)緯度,最后連接成一條軌跡線。不知道各位朋友有沒(méi)有遇到這種需求,如果只是在地圖上采集一些關(guān)鍵點(diǎn),得到的線經(jīng)常是比較生硬的,尤其是在拐點(diǎn)的時(shí)候,展示效果更加的明顯。形如下面的這種效果。

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

????????那么有沒(méi)有什么辦法能讓這些拐點(diǎn)練成的曲線實(shí)際效果看上去更加平滑呢?有的小伙會(huì)說(shuō),可以在數(shù)據(jù)采集階段盡可能多的采集多的點(diǎn)位信息,通過(guò)更多點(diǎn)位的采集,形成一條更加平滑的曲線。從技術(shù)的角度來(lái)說(shuō),這種方式是可以的,只要將點(diǎn)采集的更多,那么練成的曲線一定是更加平滑的。但是這樣會(huì)增加采集的工作量。有沒(méi)有辦法在現(xiàn)有的成果之上來(lái)進(jìn)行數(shù)據(jù)的平滑處理呢?

?????????本博客給出一種解決方案,熟悉webgis開(kāi)發(fā)的朋友一定知道多種解決方案。那么本文分享一款webgis的解決方案,基于Turf.js組件來(lái)動(dòng)態(tài)生成平滑曲線,然后在webgis框架中進(jìn)行展示。對(duì)于不熟悉或者沒(méi)用過(guò)turf.js的小伙伴起到拋磚引玉的作用。對(duì)于想在Webgis中開(kāi)發(fā)類似應(yīng)用的小伙伴來(lái)說(shuō),可以看看這篇博客。

一、問(wèn)題的由來(lái)

????????眾所周知,線對(duì)象是由多個(gè)點(diǎn)對(duì)象組合而來(lái),把多個(gè)點(diǎn)兩兩相連即可連成一條線。因此,這里我們首先模擬構(gòu)造一條虛擬的游覽線路。然后使用turf.js組件生成不同程度的平滑曲線。

????????為了展示最原始的線對(duì)象,我們采用Leaflet作為地圖展示組件,再一起回顧一下Leaflet當(dāng)中如何進(jìn)行地圖展示,以及集成Turf.js組件。

1、創(chuàng)建網(wǎng)頁(yè)框架

????????首先創(chuàng)建一個(gè)html頁(yè)面。在頁(yè)面中我們需要引入Leaflet.css和Leaflet.js兩個(gè)基礎(chǔ)組件,同時(shí)引入Turf.js這個(gè)組件。關(guān)鍵代碼如下:

<!DOCTYPE html>
<html>
<head>
	<title>基于Leaflet和Turf生成平滑曲線實(shí)踐</title>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
	<link rel="stylesheet" href="/2d/leaflet/leaflet.css" />
    <script src="/2d/leaflet/leaflet.js?v=1.0.0"></script>
	<!-- 使用unpkg -->
	<script src="https://unpkg.com/@turf/turf/turf.min.js"></script>
	<style>
        #map {
            margin: 0;
            padding: 0;
            position: absolute;
            width: 99%;
            height: 98%;
        }
    </style>
</head>
<body>
<div id="map"></div>
<script>
</script>
</body>
</html>

2、創(chuàng)建map對(duì)象

????????在創(chuàng)建了基礎(chǔ)的網(wǎng)頁(yè)模板之后,再來(lái)定義map對(duì)象。以此在界面上綁定地圖展示容器。代碼如下:

var mymap = L.map('map').setView([29.052934, 104.0625], 6);

var tileLayer = L.tileLayer('http://localhost:8086/data/xxgc/q0403/{z}/{x}/{y}.png', {
	maxZoom: 7,
	minZoom:0
});
	
tileLayer.addTo(mymap); 

3、構(gòu)建點(diǎn)位,生成路線

????????這里僅為了演示效果,使用演示數(shù)據(jù)。虛擬場(chǎng)景為,構(gòu)建一個(gè)自駕路線,從云南的保山市出發(fā),依次經(jīng)過(guò)攀枝花、昆明、成都、重慶、貴陽(yáng)、長(zhǎng)沙、贛州,最終到達(dá)福建的福州。以上城市的經(jīng)緯度信息如下:

var cityPoint = new Array();
	cityPoint.push([99.116482, 25.078402]);//保山
	cityPoint.push([101.708392, 26.50289]);//攀枝花
	cityPoint.push([102.780718, 24.915559]);//昆明
	cityPoint.push([104.098757, 30.594412]);//成都
	cityPoint.push([106.559098, 29.452047]);//重慶
	cityPoint.push([106.515163, 26.461228]);//貴陽(yáng)
	cityPoint.push([112.929622, 28.141659]);//長(zhǎng)沙
	cityPoint.push([114.956049, 25.713705]);//贛州
	cityPoint.push([119.344081, 26.027307]);//福州
	

????????然后,我們將這些點(diǎn)位數(shù)據(jù)連成一條線,在地圖上展示出來(lái)。

var linestring = turf.lineString(cityPoint, {name: 'line 1'});

L.geoJSON(linestring,{style:{color:"blue",wight:2,fill:false}}).addTo(mymap);

????????先來(lái)看一下原始的曲線效果,請(qǐng)注意各個(gè)拐點(diǎn)的實(shí)際效果。通過(guò)以下結(jié)果可以看到,原始的路線展示確實(shí)不夠平滑。

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

?二、Turf.js平滑曲線改造

????????首先對(duì)turf.js對(duì)于平滑曲線改造的方法進(jìn)行一個(gè)簡(jiǎn)單的介紹。首先來(lái)看一下Turf.js官網(wǎng)對(duì)多線段平滑的方法說(shuō)明。

1、官網(wǎng)方法介紹

????????turf.js是使用bezierSpline()進(jìn)行多線段平滑的構(gòu)建支持的。其原理是接受一條線,通過(guò)應(yīng)用貝塞爾樣條算法返回一個(gè)彎曲的版本。關(guān)于白塞爾曲線的的創(chuàng)建原理,有興趣的朋友可以去查詢相關(guān)搜索引擎。里面還是有一點(diǎn)知識(shí)點(diǎn)的。

????????我們先來(lái)看一下這個(gè)方法:

????????bezierSpline方法參數(shù)

參數(shù) 類型 描述
line Feature <LineString> input LineString
options Object 可選參數(shù):見(jiàn)下文

????????options選項(xiàng)

屬性 類型 默認(rèn)值 描述
resolution number 10000 點(diǎn)之間的時(shí)間(毫秒)
sharpness number 0.85 衡量樣條路徑應(yīng)該有多彎曲的一個(gè)度量

方法的返回值是Feature <LineString> - 彎曲的線。

2、0.4彎曲度曲線

????????了解了上面的方法后,在我們的應(yīng)用當(dāng)中調(diào)用生成方法。彎曲度的設(shè)置這里,首先我們?cè)O(shè)置成0.4,來(lái)看一下在0.4的彎曲度下,生成的平滑曲線是什么效果。

var curved = turf.bezierSpline(linestring,{sharpness:0.4,resolution:10000});//0.4的彎曲度
	
L.geoJSON(curved,{style:{color:"red",wight:2,fill:false}}).addTo(mymap);

????????為了與原始的路線進(jìn)行差異對(duì)比,我們將0.4彎曲度的路線設(shè)置為紅色。在瀏覽器中查看實(shí)際效果。很明顯可以看到,與原始路線相比,整條路線看起來(lái)平滑多了。

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

3、0.85彎曲度曲線

????????在彎曲度0.4的情況下,曲線已經(jīng)明顯發(fā)生光滑。來(lái)看一下0.85的彎曲度下是什么效果。

L.geoJSON(turf.bezierSpline(linestring,{sharpness:0.85,resolution:10000}),{style:{color:"green",wight:2,fill:false}}).addTo(mymap);//0.85的彎曲度

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

????????我們發(fā)現(xiàn)0.85的曲線,其彎曲度處理的更大了,與實(shí)際效果有一定的差異。?

4、0.1度彎曲曲線

????????最后再來(lái)看一下0.1度彎曲的曲線是什么效果。

L.geoJSON(turf.bezierSpline(linestring,{sharpness:0.1,resolution:10000}),{style:{color:"yellow",wight:2,fill:false}}).addTo(mymap);//0.1的彎曲度
	

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

5、綜合對(duì)比?

????????為了比較不同彎曲度下,曲線的平滑程度。為了直觀的展示效果,將三種平滑度同時(shí)疊加。

unpkg turf,leaflet,turf.js平滑曲線生成,webgis平滑曲線實(shí)踐

?????????通過(guò)效果可以看到,彎曲度系數(shù)越大,曲線的平滑程度也是比較大。黃色表示0.1的彎曲度,紅色表示0.4的彎曲度,綠色表示0.85的彎曲度。

序號(hào) 彎曲度 實(shí)際效果
1 0.1 與原始擬合
2 0.4 有一定彎曲
3 0.85 彎曲較大

????????最后給出完整的示例代碼,請(qǐng)注意在運(yùn)行時(shí)替換本地圖源地址。

<!DOCTYPE html>
<html>
<head>
	<title>基于Leaflet和Turf生成平滑曲線實(shí)踐</title>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
	<link rel="stylesheet" href="/2d/leaflet/leaflet.css" />
    <script src="/2d/leaflet/leaflet.js?v=1.0.0"></script>
	<!-- 使用unpkg -->
	<script src="https://unpkg.com/@turf/turf/turf.min.js"></script>
	<style>
        #map {
            margin: 0;
            padding: 0;
            position: absolute;
            width: 99%;
            height: 98%;
        }
    </style>
</head>
<body>
<div id="map"></div>
<script>
    var mymap = L.map('map').setView([29.052934, 104.0625], 6);

	var tileLayer = L.tileLayer('http://localhost:8086/data/xxgc/q0403/{z}/{x}/{y}.png', {
		maxZoom: 7,
		minZoom:0
	});
	
    tileLayer.addTo(mymap); 
	
	var cityPoint = new Array();
		cityPoint.push([99.116482, 25.078402]);
		cityPoint.push([101.708392, 26.50289]);
		cityPoint.push([102.780718, 24.915559]);
		cityPoint.push([104.098757, 30.594412]);
		cityPoint.push([106.559098, 29.452047]);
		cityPoint.push([106.515163, 26.461228]);
		cityPoint.push([112.929622, 28.141659]);
		cityPoint.push([114.956049, 25.713705]);
		cityPoint.push([119.344081, 26.027307]);
	
	var linestring = turf.lineString(cityPoint, {name: 'line 1'});
	
	L.geoJSON(linestring,{style:{color:"blue",wight:2,fill:false}}).addTo(mymap);
	
	var curved = turf.bezierSpline(linestring,{sharpness:0.4,resolution:10000});//0.4的彎曲度
	
	L.geoJSON(curved,{style:{color:"red",wight:2,fill:false}}).addTo(mymap);
	
	L.geoJSON(turf.bezierSpline(linestring,{sharpness:0.85,resolution:10000}),{style:{color:"green",wight:2,fill:false}}).addTo(mymap);//0.85的彎曲度
	
	L.geoJSON(turf.bezierSpline(linestring,{sharpness:0.1,resolution:10000}),{style:{color:"yellow",wight:2,fill:false}}).addTo(mymap);//0.1的彎曲度
	

</script>

</body>
</html>

總結(jié)

????????以上就是本文的主要內(nèi)容,那么本文分享一款webgis的解決方案,基于Turf.js組件來(lái)動(dòng)態(tài)生成平滑曲線,然后在webgis框架中進(jìn)行展示。對(duì)于不熟悉或者沒(méi)用過(guò)turf.js的小伙伴起到拋磚引玉的作用。如果您對(duì)在webgis中如何展示平滑曲線有一定的處理需求,不妨來(lái)看看這篇博客。行文倉(cāng)促,難免有不當(dāng)之處,歡迎各位小伙伴,各位專家批評(píng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-845271.html

到了這里,關(guān)于基于Lealfet.js展示Turf.js生成的平滑曲線實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • c++計(jì)算貝塞爾曲線(折線平滑為曲線)坐標(biāo)方法

    效果可查看上一篇博文: js手動(dòng)畫平滑曲線,貝塞爾曲線擬合 【代碼】js手動(dòng)畫平滑曲線,貝塞爾曲線擬合。 https://blog.csdn.net/qiufeng_xinqing/article/details/131711963?spm=1001.2014.3001.5502 代碼如下:

    2024年02月16日
    瀏覽(25)
  • echarts折線圖流動(dòng)特效的實(shí)現(xiàn)(非平滑曲線)

    echarts折線圖流動(dòng)特效的實(shí)現(xiàn)(非平滑曲線)

    echarts官網(wǎng):series-lines 注意:流動(dòng)特效只支持非平滑曲線(smooth:false) series-lines路徑圖 : 用于帶有起點(diǎn)和終點(diǎn)信息的線數(shù)據(jù)的繪制,主要用于地圖上的航線,路線的可視化。 ECharts 2.x 里會(huì)用地圖上的 markLine 去繪制遷徙效果,在 ECharts 3 里建議使用單獨(dú)的 lines 類型圖表。

    2024年02月14日
    瀏覽(23)
  • 區(qū)塊鏈系統(tǒng)探索之路:基于橢圓曲線的私鑰與公鑰生成

    前兩節(jié)我們探討了抽象代數(shù)的重要概念:有限域,然后研究了基于橢圓曲線上點(diǎn)的怪異”+“操作,兩者表面看起來(lái)牛馬不相及,實(shí)際上兩者在邏輯上有著緊密的聯(lián)系,簡(jiǎn)單來(lái)說(shuō)如果我們?cè)跈E圓曲線上取一點(diǎn)G,然后讓它跟自己做”+“操作,那么所得結(jié)果形成的集合就會(huì)構(gòu)成有限

    2024年02月02日
    瀏覽(29)
  • 【unity小技巧】使用貝塞爾曲線實(shí)現(xiàn)導(dǎo)彈隨機(jī)攻擊敵人,也可以用于平滑拾取物品

    參考原視頻鏈接: 【視頻】:https://www.bilibili.com/video/BV1aU4y1v7yM/ 注意 :本文為學(xué)習(xí)筆記記錄,推薦支持原作者,去看原視頻自己手敲代碼理解更加深入

    2024年02月13日
    瀏覽(25)
  • 在SpringBoot中基于CanvasLabel的地震基礎(chǔ)信息展示實(shí)踐

    在SpringBoot中基于CanvasLabel的地震基礎(chǔ)信息展示實(shí)踐

    目錄 前言 一、數(shù)據(jù)庫(kù)設(shè)計(jì) 1、數(shù)據(jù)庫(kù)設(shè)計(jì) 2、sql腳本? 3、數(shù)據(jù)記錄 二、SpringBoot后臺(tái)設(shè)計(jì)與實(shí)現(xiàn) 1、Mapper訪問(wèn)層及實(shí)體定義 2、Service層實(shí)現(xiàn) 3、控制層實(shí)現(xiàn) 三、地震信息展示 1、展示數(shù)據(jù)接入?? 2、最終效果 總結(jié) ????????在上一篇博客中,對(duì)于在Leaflet中進(jìn)行矢量數(shù)據(jù)進(jìn)行

    2024年01月25日
    瀏覽(21)
  • uni-app map路線軌跡回放功能及turf.js實(shí)現(xiàn)緩沖區(qū)渲染(微信小程序)

    uni-app map路線軌跡回放功能及turf.js實(shí)現(xiàn)緩沖區(qū)渲染(微信小程序)

    使用uni-app中 map組件實(shí)現(xiàn)路線軌跡回放功能。? 1、通過(guò)接口獲取返回的軌跡點(diǎn)。 2、地圖的坐標(biāo)系與軌跡點(diǎn)的坐標(biāo)系要保持一致,否則軌跡有偏差。點(diǎn)經(jīng)緯度轉(zhuǎn)換,wgs84togcj02 =》js工具類合集(utils.js) 3、繪制開(kāi)始結(jié)束點(diǎn),設(shè)置地圖經(jīng)緯度。 4、polyline,繪制路線點(diǎn),屬性:[

    2024年02月11日
    瀏覽(108)
  • 基于大數(shù)據(jù)的可視化:數(shù)據(jù)分析和展示的最佳實(shí)踐

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 隨著互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)等技術(shù)的廣泛應(yīng)用,用戶對(duì)于各種各樣的數(shù)據(jù)已經(jīng)產(chǎn)生了海量的需求。數(shù)據(jù)呈現(xiàn)的形式也變得越來(lái)越多樣化,包括報(bào)表、圖表、地圖、流程圖、模型等。而如何將這些數(shù)據(jù)可視化、交流和傳播,是一個(gè)重要的方

    2024年02月09日
    瀏覽(21)
  • 曲線生成 | 基于多項(xiàng)式插值的軌跡規(guī)劃(附ROS C++/Python/Matlab仿真)

    ??附C++/Python/Matlab全套代碼??課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)、創(chuàng)新競(jìng)賽必備!詳細(xì)介紹全局規(guī)劃(圖搜索、采樣法、智能算法等);局部規(guī)劃(DWA、APF等);曲線優(yōu)化(貝塞爾曲線、B樣條曲線等)。 ??詳情:圖解自動(dòng)駕駛中的運(yùn)動(dòng)規(guī)劃(Motion Planning),附幾十種規(guī)劃算法 多項(xiàng)式插值(polynomial

    2024年02月03日
    瀏覽(29)
  • 基于小程序的商品展示+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說(shuō)明文檔ppt

    基于小程序的商品展示+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說(shuō)明文檔ppt

    ?? 博主介紹 :?CSDN特邀作者、985計(jì)算機(jī)專業(yè)畢業(yè)、某互聯(lián)網(wǎng)大廠高級(jí)全棧開(kāi)發(fā)程序員、碼云/掘金/華為云/阿里云/InfoQ/StackOverflow/github等平臺(tái)優(yōu)質(zhì)作者、專注于Java、小程序、前端、python等技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn),以及程序定制化開(kāi)發(fā)、全棧講解、就業(yè)輔導(dǎo)、面試輔導(dǎo)、簡(jiǎn)

    2024年02月20日
    瀏覽(27)
  • Three.js -相機(jī)平滑移動(dòng)

    一、安裝 二、引入 三、使用 最后不要忘了在render中執(zhí)行 TWEEN.update();

    2024年02月13日
    瀏覽(90)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包