基於openlayers實現角度測量功能
阿新 • • 發佈:2020-09-29
基於openlayers的測量功能,官網提供了長度測量和角度測量,但是沒有角度測量,在此寫一下基於openlayers的角度測量功能,主要方法如下:
var formatAngle = function (line) { var coordinates = line.getCoordinates(); var angle=0; var sourceProj = map.getView().getProjection(); for (var i =0,ii = coordinates.length - 1; i < ii; ++i) { var c1 = ol.proj.transform(coordinates[i],sourceProj,'EPSG:4326'); var c2 = ol.proj.transform(coordinates[i + 1],'EPSG:4326'); var c3=0 //當繪製兩個及以上點的時候,將c1的值傳給C3,C2的值傳給C1 if(i>=1){ c3=ol.proj.transform(coordinates[i-1],'EPSG:4326'); var disa=wgs84Sphere.haversineDistance(c3,c1); var disb=wgs84Sphere.haversineDistance(c1,c2); var disc=wgs84Sphere.haversineDistance(c2,c3); //由於繪製結束的時候雙擊會導致c1=c2,從而disb=0,而分母不能為零,導致angle=NAN值,所以需要取雙擊的前一次值。 //當有三個以上的點的時候,形成了角度,需要對角度進行測量輸出。 if(disb===0&&i>=2){ c1 = ol.proj.transform(coordinates[i-1],'EPSG:4326'); c2 = ol.proj.transform(coordinates[i],'EPSG:4326'); c3 = ol.proj.transform(coordinates[i-2],'EPSG:4326'); disa=wgs84Sphere.haversineDistance(c3,c1); disb=wgs84Sphere.haversineDistance(c1,c2); disc=wgs84Sphere.haversineDistance(c2,c3); } var cos=(disa*disa+disb*disb-disc*disc)/(2*disa*disb); //利用餘弦定理公式計算cos值 angle=Math.acos(cos)*180/Math.PI; //求反餘弦值,得到弧度制,並將弧度值轉角度值 angle=angle.toFixed(2)+"度"; //對計算完成的角度,保留兩位小數 //由於繪製結束的時候雙擊會導致c1=c2,從而disb=0,而分母不能為零,導致angle=NAN值,所以需要取雙擊的前一次值。 //當只有兩個點的時候,只是一條線,並不形成角度,需要提示繼續繪製。 if(disb===0&&i<2){ angle="請繼續繪製形成角度"; } } //當只是繪製一個點的時候,提示繼續繪製。 else{ angle="請繼續繪製形成角度"; } } var output; output=angle; return output;//返回 };
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。