最後修改日期|Aug 04, 2021
撰文時版本 |1.7.1
DowYuu言
最近滿常用到Leaflet,順手來記錄一下。
地圖初始化
1 |
|
移除地圖
移除後即可重新進行初始化動作。
1 |
|
經緯位置資訊 LatLng
地圖中所有的經緯度位置都可以任意切換成如下的格式:
- [lat, lon]
- { lat: lat, lon: lon }
- { lon: lon, lat: lat }
- L.latLng(lat, lon)
PS. Latitude
是緯度,Longitude
是經度。
設置視圖
同時設置經緯位置與縮放等級。
1 |
|
只設置經緯位置資訊
只要設置經緯位置,延伸自setView
。
1 |
|
只設置縮放等級(Zoom)
只設置縮放等級,延伸自setView
。
1 |
|
取得地圖資訊狀態
官方文件 Methods for Getting Map State
取得地圖中心點座標
1 |
|
取得地圖縮放級別
1 |
|
取得地圖邊界點
會回傳東北點及西南點的座標。
1 |
|
地圖事件
點擊地圖取得該點資訊
1 |
|
開始地圖拖動
1 |
|
結束地圖拖動
1 |
|
圖層群組
將圖層群組加至地圖中
1 |
|
移除圖層群組
1 |
|
清除圖層群組
會將此圖層內所有圖層(例如你加到此群組中的Marker
)清除。
1 |
|
圖層控制器
1 |
|
注意原本map
有設定layers
還是不能拿掉,layers
設定中的圖層會成為預設載入圖層。
1 |
|
底圖圖層baseLayers
會被設置為radio
供使用者點選,疊加圖層overlays
會被設置為checkbox
供使用者點選。
該底圖圖層在不支援的縮放等級時,會被設置disabled
。
像下方範例,目前在縮放等級20,中間三個底圖圖層是支援到20的,其餘上下兩個底圖圖層不支援,radio
就會被設置disabled
。
顯示圖層名稱
顯示的圖層名稱可以包含HTML
。
1 |
|
新增底圖圖層baseLayer
要注意參數是先layer
再圖層名稱。
1 |
|
新增疊加圖層overlay
要注意參數是先layer
再圖層名稱。
1 |
|
地圖比例尺
1 |
|
預設公制單位(m/km)和英制單位(mi/ft)都會顯示,可在option
中設置。
1 |
|
瀏覽器支援、版本判斷
Leaflet
也有提供瀏覽器支援、版本判斷方法,有是否支援某元素(如是否支援svg
),或是瀏覽器版本判斷(是否為ie
),相當方便。
使用上就是用L.Browser.<Properties>
,回傳皆為boolean
值,<Properties>
列表與回傳值代表含意請詳見官方文件 Browser.Properties。
1 |
|
Marker標誌
1 |
|
這邊範例是把Marker
加到圖層群組markersLayer
中,當然你要直接加到地圖裡也可以。
1 |
|
Icon
預設的Marker
會是一個藍色的icon,這邊也可以用圖片自訂。
1 |
|
要用類似預設標點但是帶icon圖示的話,可以參考Leaflet.awesome-markers。
Popup彈出窗
簡易設定:
1 |
|
進階設定:
1 |
|
綁定至Marker、開啟Popup、關閉Popup
Popup
的開關是取決於綁定的Marker
上。
1 |
|
讓Popup的開啟時不會關掉其他Popup
預設點了一個Popup
就會關掉原本開啟的Popup
。
所以這邊可以設置autoClose: false
和closeOnClick: false
,這樣Popup
的開關就不會影響到其他的Popup
。
1 |
|
讓Popup維持顯示無法關閉
可以用CSS把Popup
上的關閉按鈕隱藏,並且用javascript
設置點擊Marker
時會把Popup
關閉,這樣關掉後觸發反向就會又自動開起來。
1 |
|
1 |
|
免費地圖圖資
※ 這只是個人整理,使用上勞煩自行查證細讀各圖資使用之版權、授權條款,有糾紛不負責RRR
這邊放上OpenStreetMap開放街圖、國土測繪中心 國土測繪圖資服務雲、以及地理資訊科學研究專題中心所提供的部分圖資,下方也有簡介與介接說明。
OpenStreetMap開放街圖
是自由而且開源的全球地圖。
要注意使用上要參照OpenStreetMap版權與授權條款,必須標註圖資作者© OpenStreetMap contributors
。
1 |
|
國土測繪中心圖資
國土測繪中心圖資介接說明是寫縮放層級到19,但實測都有到20。要注意Leaflet
預設最高縮放層級只到18,所以使用上記得設定最大限制maxNativeZoom: 20
和maxZoom: 20
。
網站上寫了很多次,所以特別附註上來:請注意不可以將圖資大量的用 cache 的方式儲存於伺服器上再提供服務,這將構成「著作權法」第3條的「重製」及「發行」,屬嚴重侵權的違法行為。
這邊只放幾個自己常用的。
臺灣通用電子地圖
優點是有臺灣的門牌號碼(於縮放層級19與20)。
1 |
|
臺灣通用電子地圖(高DPI文字)
背景同通用電子地圖,沒有門牌且只有圖資臺灣地區,但是圖資上的文字變得比較清晰銳利也變大了,拿來看街道名稱更易讀一點。
縮放等級拉到6以下地圖就會消失,所以使用上記得設定最小限制minZoom: 6
。
1 |
|
正射影像圖
實拍照,縮放等級拉到7以下臺灣就會消失,所以使用上記得設定最小限制minZoom: 7
。
1 |
|
圖資介接
圖資介接說明,進網頁後點選「WMTS」並點選「列表」,進到「WMTS列表」畫面後點擊介接網址處的類別網址,會下載下xml
說明檔案。
打開說明檔案,找到該圖層ResourceURL
中的template
網址,{Style}
對應到該圖層的Style
底下的ows:Identifier
設定值,{TileMatrixSet}
對應到該圖層的TileMatrixSet
設定值,把{TileMatrix}
換成{z}
、{TileRow}
換成{y}
、{TileCol}
換成{x}
即可。
地理資訊科學研究專題中心圖資
說明文件中的TileMatrixSet
部分也有提到,本單位的縮放等級最大到17,到17以上地圖就會消失,所以使用上記得設定最大限制maxZoom: 17
。
這邊只放「福衛二號衛星影像」。
福衛二號衛星影像
實拍照,影像範圍只有臺灣周圍,不過每個縮放層級的周圍範圍不太一樣,有點奇妙XD
1 |
|
圖資介接
圖資介接說明,找到該圖層ResourceURL
中的template
網址,把{TileMatrix}
換成{z}
、{TileCol}
換成{x}
、{TileRow}
換成{y}
即可。
常用套件
Leaflet.awesome-markers-讓Marker附帶icon且支援多色
撰文時版本|2.0.2
Leaflet.awesome-markers,可在原Marker
上加上icon,並且支持多種顏色。
1 |
|
目前似乎無法使用目前常見的svg icon,只能用Font Icon型式的icon。
icon
參數就是各套件中,icon的個別名稱。
要注意Ionicons,因為本身有分樣式類型,所以在icon頁面看到的名稱記得要加上樣式類型字首(ios風格就加上’ios-‘,Material風格就加上’md-‘)。
prefix
參數是icon的字首,以下為官方說明有提到的icon套件與其CDN連結頁面,可自己挑看選看:
套件 | prefix | CDN 頁面 | 備註 |
---|---|---|---|
Bootstrap Icons | bi | CDN 頁面 | |
Bootstrap3 Glyphicons | glyphicon | CDN 頁面 | 預設值 |
Font Awesome | fa | CDN 頁面 | |
Ionicons | ion | CDN 頁面 |
Font Icon只到版本4.5。 因為Ionicons本身有分樣式類型,所以在icon頁面看到的名稱記得要加上樣式類型字首(ios風格就加上'ios-',Material風格就加上'md-')。 |
markerColor
參數目前版本(2.0.1)有red、darkred、lightred、orange、beige、green、darkgreen、lightgreen、blue、darkblue、lightblue、purple、darkpurple、pink、cadetblue、white、gray、lightgray、black。
其他參數還有:
iconColor
就icon的顏色,預設是白色。
spin
當使用Font Awesome
,設為true即可使該icon旋轉。
extraClasses
可加上自訂的class
Leaflet.markercluster-群聚Markers展開縮起
撰文時版本|1.5.0
Leaflet.markercluster,當部分Marker
太過密集,就會自動縮起並顯示縮起的Marker
數目,不同數目級距也會顯示不同顏色。
1 |
|
裡面可以設置參數但是我都沒用過,基本上不設定就很好用了(?)
使用上就是把Marker
加到MarkerClusterGroup
群組中,就會自動展開縮起了。
可以和前面提到的Leaflet.awesome-markers併用。
leaflet-velocity-繪製風場
撰文時版本|1.9.0
leaflet-velocity,將json
格式(格式請參考grib2json)的風場資料視覺化。
1 |
|
若要初始化後再設置設定值或風場資料,可以用setOptions
或setData
。
1 |
|
Leaflet-Ruler-地圖量測
撰文時版本|無
Leaflet-Ruler,簡易的地圖量測工具。
這邊有修改樣式以及語言顯示,如果不需要修改就不用加上rulerOption
這段了,樣式部分也同樣不必要,但只是換成自己比較喜歡的模樣。
1 |
|
1 |
|
Leaflet.Photo-照片標點
撰文時版本|無
Leaflet.Photo,好看的地圖照片標點,支援群聚展開縮起。
1 |
|
Leaflet.Sync-地圖同步
撰文時版本|0.2.4
Leaflet.Sync,方便的地圖定位同步工具。
只要設定定位同步,當map1
定位變動時,map2
也會跟著一起定位變動。但要注意,此時map2
移動,map1
不會跟著移動(互相同步請看下個範例)。
1 |
|
如果要互相定位同步(當map1
移動map2
會跟著移動,當map2
移動map1
會跟著移動),則要綁定兩次:
1 |
|
以下是範例圖片的程式:
HTML:
1 |
|
js:
1 |
|