OpenLayers版本:4.6.4
創(chuàng)新互聯(lián)公司主營(yíng)東昌網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),東昌h5成都小程序開(kāi)發(fā)搭建,東昌網(wǎng)站營(yíng)銷推廣歡迎東昌等地區(qū)企業(yè)咨詢
本來(lái)這不應(yīng)該成為一個(gè)問(wèn)題,也不值得專門(mén)寫(xiě)一篇文章,尤其是對(duì)一個(gè)已經(jīng)用過(guò)各種MapAPI(Google、百度、高德、SmartEarth...)的人來(lái)說(shuō),但就是這個(gè)本來(lái)以為3分鐘解決的問(wèn)題我卻用了至少30分鐘才把坑填完,最后發(fā)現(xiàn)OpenLayers的好多設(shè)計(jì)理念、思路都和之前用過(guò)的API大不相同。
需求很簡(jiǎn)單,其實(shí)就是用代碼把一串經(jīng)緯度坐標(biāo)表示的Polygon添加在Map上,注意這里不是創(chuàng)建地圖交互工具來(lái)用鼠標(biāo)畫(huà)Polygon,也不是用GeoJSON或WKT作為數(shù)據(jù)源,而是用代碼手動(dòng)實(shí)現(xiàn),因?yàn)楹笳逴L官網(wǎng)都有示例,前者我并沒(méi)有找到(可能是因?yàn)槲矣⑽奶珷€,如果哪位發(fā)現(xiàn)有這樣的示例請(qǐng)告訴我)
我先把最后的代碼貼出來(lái),再來(lái)分析我踩的那些坑
創(chuàng)建Map的過(guò)程我封裝了一下,基本是最簡(jiǎn)化的配置,沒(méi)什么特殊的
坑1:Polygon的構(gòu)造函數(shù),按照過(guò)往經(jīng)驗(yàn)給一個(gè)Point的數(shù)組就好了,但是在OL中是一個(gè)Point的數(shù)組的數(shù)組,這還好,最起碼在API中能看到,最坑的就是下面的坑;
坑2:一定要做坐標(biāo)轉(zhuǎn)換,其實(shí)折騰了半天我就是缺這一句代碼,至于投影坐標(biāo)系這些東西我還暈著呢,大家自己悟吧。
polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:3857'));
最后要把polygon顯示出來(lái)需要這樣一個(gè)流程:
polygon封裝到Feature --> feature添加到source --> 通過(guò)source創(chuàng)建vector layer --> 把layer添加到map上。
這就是為什么我開(kāi)始說(shuō)OL在設(shè)計(jì)理念上和之前接觸的大不相同,之前的大部分API直接通過(guò)map.addxxx 函數(shù)就可以添加覆蓋物,也許要用OL就得把之前自己想當(dāng)然的那些經(jīng)驗(yàn)都扔掉。