HTML 5 學習心得
HTML 5 學習心得
#第八週
#第八週
今天學習如何做一個地圖
今天學習如何做一個地圖
- 地圖;除了MapBox以外,還有一個是大家熟知的Google Map,但是因為Google Map的條約關係以及付費問題,所以這裡暫時不引用Google Map的例子
- 要做的:輸入GPS 經緯度,彈出位置信息在地圖上
1. 輸入GPS 經緯度
1. 輸入GPS 經緯度
2. 顯示地圖上GPS 位置坐標
2. 顯示地圖上GPS 位置坐標
part-1
part-1
輸入界面
輸入界面
- 跟上期的設計方法一樣,這回是讀取兩個值,並在剛開始的輸入欄裡放入一個預設的初始值
#第10排的file location也可以替換成Website Address
第二部分相較於第一部分複雜許多,我們先從<body>部分開始理解,比較容易
第二部分相較於第一部分複雜許多,我們先從<body>部分開始理解,比較容易
part-2
part-2
- 首先<body> 一開始的部分是針對Marker的Style 設的一些參數
- 接下來就是執行一連串的程式,其中比較特別的概念是"container",就像字面意義上的那樣,我們這回設好空間並命名ID後,這個空間就變成了一個container,後續我們將執行好的內容裝回去這個"container"裡
這是draggable: true的效果
這是draggable: true的效果
回到<head>的部分
回到<head>的部分
#當中第11排是一個很重要的東西,待會兒還會再提到
程式流程
程式流程
- <input> ;讓使用者從界面輸入經緯度
- 按下button以後,程式從界面中讀取用戶輸入的資料,並將資料與預設好的link結合,並打開新鏈接在新網頁
- 從網址中讀取參數『經緯度』,並將參數丟進程式中
- 獲得參數,再運用上mapbox的功能,顯示出地圖
#以上是大致流程,mapbox裡還有其他許多其他的功能,這裡並沒有一一敘述,想深入研究,可以上mapbox的官網學習
補充說明:顯示多個地圖在同一個網頁上
補充說明:顯示多個地圖在同一個網頁上
- 其實在一個網頁上要實現展示多個地圖,無疑就是將程式多Copy幾份就可以了,這裡我是想要補充說明mapbox地圖命名時要注意的事項
在Copy的時候,記得要將名字也改一改『圖片中二個的Id name,以及container name』
在Copy的時候,記得要將名字也改一改『圖片中二個的Id name,以及container name』
#這裡我將名字改成"aaa"
總結:到了這一期,學的東西也越來越多,加上期末要到了,個人網頁要想辦法弄出來了,現在開始有點壓力了。雖然學了很多東西跟技巧,但是要將自己所學過的東西全部整合在一起,並加以設計及使用,對我目前而言還是有很大挑戰性的,接下里來會按部就班開始一點點做個人網頁了。Mapbox這個資源,其實我也是第一次去接觸,對它還不是很熟悉,包括它的指令集,也還沒了解完畢,不過已經有先設想好要怎麼使用這個資源了,希望我有時間來得及了解mapbox哈哈哈
文件一『檔案名:demo.html』
文件一『檔案名:demo.html』
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Search</title>
<script>
function myFunction(){
var x = document.getElementById("myText1").value;
var y = document.getElementById("myText2").value;
window.open("file:///G:/Pycharm/HTML-Practice/demo.html?x=" + x +"&y="+ y);
}
</script>
</head>
<body style="background-color:#FFCCBC;">
<h1>Search:</h1>
<h1>Longitude <input type="text" id="myText1" value="111.832806"></h1>
<h1>Latitude <input type="text" id="myText2" value="2.286118"></h1>
<button onclick="myFunction()">Try it</button>
</body>
</html>
文件二『檔案名:demo2.html』
文件二『檔案名:demo2.html』
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>Create a draggable Marker</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.5.0/mapbox-gl.css' rel='stylesheet' />
<style>
body { margin: 0; padding: 0; }
#aaa { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
<script type="text/javascript">
function GetUrlVar(VarName)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + VarName + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if (results == null)
return "";
else
return results[1];
}
var x = decodeURIComponent(GetUrlVar('x'));
var y = decodeURIComponent(GetUrlVar('y'));
</script>
</head>
<body>
<style>
.coordinates {
background: rgba(0,0,0,0.5);
color: #fff;
position: absolute;
bottom: 40px;
left: 10px;
padding:5px 10px;
margin: 0;
font-size: 11px;
line-height: 18px;
border-radius: 3px;
display: none;
}
</style>
<div id='aaa'></div>
<pre id='coordinates' class='coordinates'></pre>
<script>
mapboxgl.accessToken = 'pk.eyJ1IjoiY2hlbnl1eWkiLCJhIjoiY2l1ZWoxemx6MDAweTJ5cHI3NHNnajR2NiJ9.cNpWK-0HoYbcumuQ8yvbjQ';
var coordinates = document.getElementById('coordinates');
var map = new mapboxgl.Map({
container: 'aaa',
style: 'mapbox://styles/mapbox/streets-v11',
center: [x,y],
zoom: 15
});
var marker = new mapboxgl.Marker({draggable: true});
marker.setLngLat([x,y]);
marker.addTo(map);
function onDragEnd() {
var lngLat = marker.getLngLat();
coordinates.style.display = 'block';
coordinates.innerHTML = 'Longitude: ' + lngLat.lng + '<br />Latitude: ' + lngLat.lat;
}
marker.on('dragend', onDragEnd);
</script>
</body>
</html>