從零開(kāi)始構(gòu)建一個(gè)GIS應(yīng)用程序

摘要:本文主要介紹OpenLayers的使用烦周。
一看疗、一個(gè)簡(jiǎn)單的例子(基于ES6語(yǔ)法環(huán)境)

const { Vector as VectorSource, OSM } = window.ol.source;`
const { Feature } = window.ol;
const { Point } = window.ol.geom;
const { fromLonLat } = window.ol.proj;
const { Vector as VectorLayer, Tile as TileLayer } = window.ol.layer;
const { View } = window.ol;
const { Style } = window.ol.style;

const source = new VectorSource({
  features: [ 
    new Feature({ geometry: new Point(fromLonLat([32, 12])) }),
    new Feature({ geometry: new Point(fromLonLat([32, 12])) }),
    new Feature({ geometry: new Point(fromLonLat([33, 11])) }),
 ]
})
const layer = new VectorLayer({
  source,
  style() {
    return new Style({
      image: new Icon({ src: 'icon.png' })
    })
  }  
})
const map = new Map({ 
  target: 'map',
  layers: [
    new TileLayer({ source: new OSM() }),
    layer
  ],
  view: new View({
    center: fromLonLat([37.41, 8.82]),
    zoom: 4,
  })
})

以上代碼渲染的結(jié)果如下圖所示疏虫,在一個(gè)id為map的div容器里渲染出一副底圖并且有3個(gè)目標(biāo)點(diǎn)趴腋。

image.png

是不是已經(jīng)被各種構(gòu)造函數(shù)弄的眼花繚亂了挖函?不著急我們慢慢分析。
二钓瞭、基本概念
1.Map
OpenLayers的核心組件是map(ol.Map)驳遵。它被呈現(xiàn)給target容器(例如div,包含地圖的網(wǎng)頁(yè)上的元素)山涡。所有地圖屬性都可以在構(gòu)造時(shí)配置堤结,或者使用setter方法配置,例如setTarget()鸭丛。

const map = new Map({ target: 'map' })

2.View
Map不會(huì)對(duì)中心竞穷,縮放級(jí)別和地圖投影等內(nèi)容負(fù)責(zé),負(fù)責(zé)這些的是View

map.setView(new View({
  center: [0, 0],
  zoom: 2
}));

3.Source
Source表示數(shù)據(jù)源系吩,常用的有ol.source.Vector與ol.source.OSM

const osmSource = new OSM(); //底圖數(shù)據(jù)源

4.Layer
Layer是數(shù)據(jù)的集合與展示来庭,OpenLayers有四種基本類型的Layer:

  • ol.layer.Tile - 渲染在網(wǎng)格中提供平鋪圖像的源妒蔚,這些網(wǎng)格由特定分辨率的縮放級(jí)別組織穿挨。
  • ol.layer.Image - 渲染以任意范圍和分辨率提供地圖圖像的源。
  • ol.layer.Vector - 渲染矢量數(shù)據(jù)客戶端肴盏。
  • ol.layer.VectorTile - 渲染作為矢量切片提供的數(shù)據(jù)科盛。
const osmLayer = new TileLayer({source: osmSource});
map.addLayer(osmLayer);

三、進(jìn)階
當(dāng)有了基本的概念后菜皂,就可以搭建一個(gè)只有底圖的地圖了贞绵,那么如何基于地圖做實(shí)際業(yè)務(wù)的開(kāi)發(fā)呢?列如在指定的經(jīng)緯度展示目標(biāo)點(diǎn)恍飘,以及移除目標(biāo)點(diǎn)榨崩。那就需要更多的類,比如Icon, Feature, Point章母,當(dāng)需要做事件響應(yīng)的時(shí)候需要Intereaction母蛛,當(dāng)涉及坐標(biāo)的時(shí)候甚至還需要fromLonLat這樣的方法。至于使用哪個(gè)類乳怎,以及這些類的實(shí)例有哪些方法彩郊,可以參考官網(wǎng)的API文檔。

四蚪缀、總結(jié)
回過(guò)頭再看我們的例子是不是就清晰很多了秫逝?可以看出OpenLayers是基與一系列基本的類來(lái)構(gòu)造實(shí)例,這些類的實(shí)例又進(jìn)行嵌套組合询枚,最終實(shí)現(xiàn)地圖的渲染违帆。當(dāng)需要?jiǎng)討B(tài)改變地圖的某些展現(xiàn)時(shí),需要對(duì)構(gòu)造出來(lái)的實(shí)例進(jìn)行setter與getter操作金蜀。
剛開(kāi)始使用OpenLayer的時(shí)候有太多不適應(yīng)刷后,最主要的就是類的嵌套太多狈醉,明明可以用一個(gè)類實(shí)現(xiàn)的配置,非要用2個(gè)甚至3個(gè)類來(lái)實(shí)現(xiàn)惠险,最終構(gòu)造出很多看起來(lái)沒(méi)有作用的實(shí)例苗傅,例如Point, Source, Style這樣的類。
后來(lái)才發(fā)現(xiàn)這樣的好處是可以對(duì)邏輯進(jìn)行解耦班巩,可以快速定位業(yè)務(wù)需求渣慕,并非過(guò)度設(shè)計(jì),而是恰到好處抱慌!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逊桦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抑进,更是在濱河造成了極大的恐慌强经,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寺渗,死亡現(xiàn)場(chǎng)離奇詭異匿情,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)信殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門炬称,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涡拘,你說(shuō)我怎么就攤上這事玲躯。” “怎么了鳄乏?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵跷车,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我橱野,道長(zhǎng)朽缴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任仲吏,我火速辦了婚禮不铆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裹唆。我一直安慰自己誓斥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布许帐。 她就那樣靜靜地躺著劳坑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪成畦。 梳的紋絲不亂的頭發(fā)上距芬,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天涝开,我揣著相機(jī)與錄音,去河邊找鬼框仔。 笑死舀武,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的离斩。 我是一名探鬼主播银舱,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跛梗!你這毒婦竟也來(lái)了寻馏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤核偿,失蹤者是張志新(化名)和其女友劉穎诚欠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體漾岳,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轰绵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝗羊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藏澳。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仁锯,死狀恐怖耀找,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情业崖,我是刑警寧澤野芒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站双炕,受9級(jí)特大地震影響狞悲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妇斤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一摇锋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧站超,春花似錦荸恕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至算撮,卻和暖如春生宛,著一層夾襖步出監(jiān)牢的瞬間县昂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工陷舅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倒彰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓莱睁,卻偏偏與公主長(zhǎng)得像狸驳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缩赛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1 CALayer IOS SDK詳解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi閱讀 5,157評(píng)論 3 23
  • source 是 Layer 的重要組成部分耙箍,表示圖層的來(lái)源,也就是服務(wù)地址酥馍。除了在構(gòu)造函數(shù)中指定外辩昆,還可以使用 ...
    changhr2013閱讀 10,402評(píng)論 1 1
  • 一 同事小李砚尽,一直宣揚(yáng)不婚施无。 共事幾年,小李是一個(gè)自我到骨子里的女人必孤,特別在意生活中所有細(xì)節(jié)猾骡。 辦公桌上每周換一束...
    會(huì)飛的果子閱讀 309評(píng)論 3 4
  • 每天早上聽(tīng)到鬧鐘的響聲,眼都不睜的將鬧鐘關(guān)掉敷搪,想接著酣睡兴想,但這會(huì)總睡不熟,覺(jué)得心里有事兒赡勘,不敢把眼睛深...
    暢游之靈閱讀 208評(píng)論 0 0
  • 無(wú)盡的醇香 打著旋兒地向我走來(lái) 沁人心脾 微苦的相思 深深地浸入我的腦海 永生難忘 這純粹的酒香 一如既往地堅(jiān)守它...
    元初沖沖沖閱讀 75評(píng)論 1 3