使用同一套代碼建立你的 web 地圖應用。 ✨ github.com/XingzheFE/p…javascript
使用 npm
安裝 plain-js
,你也能夠在頁面中引入構建後的 js
文件。vue
$ npm install plain-js --save
複製代碼
建立地圖的方式很簡單,最直接的方式是在 html 文件中引入地圖庫的腳本文件以及 plain.min.js
java
// 首先初始化一個 plain 對象
let plain = new Plain();
// 設置須要使用的座標系,若是不設置的話全部地圖使用默認的座標系,
// Google 和 高德地圖在大陸使用 GCJ02,百度地圖使用 BD09,
// 爲了方便開發建議設置爲 GCJ02
plain.setCoordType("GCJ02");
// 告訴 plain 你須要使用 Google 地圖,
// 可選的參數有 Google Map "GMAP", 高德地圖 "AMAP", 百度地圖 "BMAP"
plain.use("GMAP");
// 建立一個 Google 地圖實例
let map = plain.Map({
container: "#map", // DivElement
center: [39.908012, 116.399348],
zoom: 15
});
複製代碼
或者使用回調的方式建立git
let plain = new Plain().use("GMAP");
let key = "[your access key]";
plain.loadMap(key, () => {
let map = window.map = plain.Map({
container: document.getElementById("map"),
center: [39.910, 116.404],
zoom: 15
});
}, err => {
// TODO:
};
複製代碼
let marker = plain.Marker([39.910, 116.404]);
map.addLayer(marker); // 也可傳入一個數組
複製代碼
若是想讓 Marker 變得不同也是能夠的,在 Marker 方法中傳入第二個參數:github
// 自定義 icon
let icon = plain.Icon({
url: "https://unpkg.com/leaflet@1.0.3/dist/images/marker-icon.png",
size: [25, 40],
anchor: [12.5, 40]
});
// Marker configure option
let markerOpt = {
icon: icon,
draggable: true
};
let marker2 = plain.Marker([39.910, 116.404], markerOpt);
map.addLayer(marker2);
map.removeLayer(marker); // 能夠從地圖中移除以前建立的標記
複製代碼
向地圖中添加折線以前須要先定義一個二維數組,注意:咱們默認傳入的座標格式是 [lat: Number, lng: Number]
web
let path = [
[39.910, 116.404],
[39.71, 116.5],
[39.909, 117],
[39.710, 118]
];
let polyline = plain.Polyline(path, {
color: "#f00",
weight: 2,
opacity: 0.8
});
map.addLayer(polyline);
複製代碼
let layer = plain.Layer()
.setContent("text or Element")
.setLatLng([31, 116])
.mount(map)
.show()
.hide()
.unmount();
let popup = plain.Popup({closeBtn: false})
.setContent(document.createElement("button"))
.setLatLng([31, 116])
.mount(map)
.show()
.hide()
.unmount();
複製代碼
到目前爲止,咱們已經能夠建立一個展現基本信息的地圖了,那麼接下來就給地圖綁定下點擊事件的響應方法。 plain 提供了一個工具方法格式化傳入的事件對象,返回的值格式以下typescript
class Event {
e: any; // 原始的事件對象
p: F.LatLng; // 座標 [lat: number, lng: number]
target: F.Layer; // 觸發事件的對象
type: string; // 事件名
}
複製代碼
其中座標 p 爲最初 plain.setCoordType("GCJ02");
設置的格式,若是沒有設置,那麼返回的值和原生地圖庫一致。shell
let listener = map.on("rightclick", function (e) {
console.log(plain.Util.formatEvent.call(this, e));
// 順便校訂下地圖窗口
map.fitView(path);
});
複製代碼
接下來咱們要取消事件監聽:npm
map.off(listener);
複製代碼
點擊此處查看更多示例
有疑問和建議請建立 issue 哦。
plain is MIT licensed.