Leaflet:Path、Polyline、Polygon、Rectangle、Circle、CircleMarker


下邊介紹Vector Layer

Path(Layer)

Path是其他Vector Layer的父類,比如Polyline、Polygon、Rectangle、Circle、CircleMarker...,雖然我們不直接用Path類,但是它的屬性和方法我們需要了解。

1、參數

stroke     //是否畫邊界,默認True,在畫Circle和Polygon時很有用
color        //Stroke的color
weight     //Stroke的線寬
opacity     //Stroke透明度
dashArray //畫圖過程中虛線的樣式
fill             //是否填充內部,常用於Circle、Polygon
fillColor    //顏色
fillOpacity//透明度
bubblingMouseEvents //默認true,當為true時,發生在該Path上的鼠標事件也將觸發在Map上的相同事件

2、方法

setStyle(<Path options>style) //重設一些參數來讓該Path表現為一些新樣式
bringToFront() //把該Path Layer放在所有Path Layer之上
bringToBack() //把該Path Layer放在所有Path Layer之下

 

Polyline(Path)(Layer)

地圖上的折線

1、用例

①從一組LatLng中創建一個折線

//從一組LatLng(所有LatLng對象都可以用數組[x,y]代替)中得到一條折線對象
var latlngs=[
    [45,-122],
    [37,-122],
    [34,-118]
];

var polyline = L.polyline(latlngs,{color:'red'}).addTo(map);

//縮放地圖視角到該Polyline上
map.fitBounds(polyline.getBounds());

②從一組多維數組創建多條折線,一個多維數組代表一條折線,這多條折線實際上是一個polyline對象

var latlngs = [
    [[45.51, -122.68],
        [37.77, -122.43],
        [34.04, -118.2]],
    [[40.78, -73.91],
        [41.83, -87.62],
        [32.76, -96.72]]
];
var polyline=L.polyline(latlngs,{color:'red'}).addTo(leafletMap);
leafletMap.fitBounds(polyline.getBounds());

 

 這個Array包含兩個多維數組,繪制出來就是兩條折線,每個多維數組對應一條折線。與用例①不同的是這兩條折線的總體表示polyline

 

2、實例化

L.polyline(<LatLng[]>latlngs,<Polyline options>options?)

3、參數

smoothFactor //光滑程度 默認1
noClip //禁用polyline clipping,默認false;暫未知功能如何

4、方法

getLatLngs() //返回LatLng[],一組點的數組,如果是多條折線則返回一個嵌套數組
setLatLngs(<LatLng[]>latlngs) //用給定的點替代原來的點繪制新線
closestLayerPoint(<Point>p) //返回Polyline中離點p最近的點
getCenter() //返回Polyline的中心坐標
getBounds()//返回該Polyline所在的Bound,配合Map的fitBounds方法可以定位到該Polyline
addLatLng(<LatLng>latlng,<LatLng[]>latlng?)//向Polyline中加入一個點

 

Polygon(Polyline)

多邊形

通過一系列Points創建多邊形,並不需要額外寫一個和開始點相同的最終點。

1、用例

①創建一個紅色的多邊形

var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];

var polygon = L.polygon(latlngs , {color:'red'}).addTo(map);

map.fitBounds(polygon.getBounds())

 ②環形——兩個Polygon之間的環形區域

需要兩個Point數組,第一個表示外Polygon,第二個表示內Polygon

寫法是:

var latlngs= [
    [外Polygon 的Points Array],
    [內Polygon 的Points Array]
];
var latlngs = [
  [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
  [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
];

 

 ③多多邊形——MultiPolygon

和多折線一樣,如果用多維數組表示,那么顯示出來的是多個多邊形,但是這多個多邊形的整體是一個Polygon

寫法:

var latlngs =[

[第一個多邊形],

[第二個多邊形]

];
        var latlngs = [
            [ // first polygon
                [[37, -109.05], [41, -109.03], [41, -102.05], [37, -102.04]], // outer ring
                [[37.29, -108.58], [40.71, -108.58], [40.71, -102.50], [37.29, -102.50]] // hole
            ],
            [ // second polygon
                [[41, -111.03], [45, -111.04], [45, -104.05], [41, -104.05]]
            ]
        ];

 2、初始化

L.polygon(<LatLng[]>latlngs, <Polyline options>options?)

3、參數

沒有特有參數,參數繼承自Polyline、Path、Layer

4、方法

沒有特有方法,繼承自Polyline、Path、Layer

Rectangle(Polygon)

1、用例

//定義一個Bounds 左上角和右下角的坐標
var bounds=[[54.559322, -5.767822], [56.1210604, -3.021240]]
//創建Rectangle
L.rectangle(bounds,{color:'#ff7800',weight:1}).addTo(map);
//將Map縮放到該Rectangle處
map.fitBounds(bounds);

 

2、初始化

L.rectangle(<LatLngBounds> latlngBounds, options?)

3、參數

同Polygon

4、方法

setBounds(<LatLngBounds>latlngBounds) //在設置的Bounds處重畫該Rectangle

其他方法繼承自Polygon

Circle(CircleMarker)

1、用例

L.circle([50.5,30.5],{radius:200}).addTo(map)

2、初始化

L.circle(<LatLng>latlng ,<Circle options>options) //可選參數options中必須要有參數radius,即半徑

3、參數

radius //圓半徑,單位m

其他參數繼承自Path

4、方法

setRadius(n) //重設半徑
getRadius() //返回半徑
getBounds() //返回LatLngBounds

setRadius、setStyle、setLatLng對於Circle的修改結果會立刻顯示在Map上而不需要redraw()。

其他方法繼承自CircleMarker、Path、Layer

 

CircleMarker(Path)

一個始終與整個Map保持相對尺寸(以pixel為空單位)的Circle,區別於Circle就是Circle是絕對尺寸(以m為單位),當你放大地圖時Circle會變小,因為它與地圖的相對尺寸變小了;而CircleMarker不論你怎么縮放地圖,它在地圖都始終是那么大:

下圖分別是同一個CircleMarker,但是地圖的縮放等級是不同的。

 

 1、初始化

L.circleMarker(<LatLng>latlng ,<CircleMarker options>options?)

2、參數

radius //半徑,單位像素

3、方法

setLatLng(<LatLng>latlng) //布置該CircleMarker到新位置上
getLatLng()
setRadius(n)
getRadius()

還有繼承自Path、Layer的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM