基於js和openlayer計算2個經緯度點之間的距離
阿新 • • 發佈:2019-01-07
基於js和openlayer計算2個經緯度點之間的距離
//計算2個經緯度點之間的距離 //Haversine formula 演算法 var harvensin=function() { this.earch_radius=6371008.8; // 地球半徑 平均值 米 this.distance=function(lat1,lon1,lat2,lon2) { //用haversine公式計算球面兩點間的距離。 //經緯度轉換成弧度 var h_lat1=lat1*Math.PI/180.0; var h_lon1=lon1*Math.PI/180.0; var h_lat2=lat2*Math.PI/180.0; var h_lon2=lon2*Math.PI/180.0; //差值 var vlon=Math.abs(h_lon1-h_lon2); var vlat=Math.abs(h_lat1-h_lat2); // var h=this.HaverSin(vlat)+Math.cos(h_lat1)*Math.cos(h_lat2)*this.HaverSin(vlon); // var d=2*this.earch_radius*Math.asin(Math.sqrt(h)); // return d; }; this.HaverSin=function(theta) { var v=Math.sin(theta/2); return v*v; }; }; //自定義函式 利用haversine演算法公式 function latlongDistance(lat1,lon1,lat2,lon2) { var hs=new harvensin(); return hs.distance(lat1,lon1,lat2,lon2); }; //latlongDistance(105.3,34.1,105.4,34.2)=11502.501545669946 (米) //openlayer5.2 lib函式 長度計算呼叫方法 function sphereDistance(lat1,lon1,lat2,lon2) { var c1=[2];c1[0]=lon1;c1[1]=lat1; var c2=[2];c2[0]=lon2;c2[1]=lat2; return ol.sphere.getDistance(c1,c2); }; //sphereDistance(105.3,34.1,105.4,34.2)=11502.501545669955 (米) function getLength_custom() { var geo=drawLayer.getFirstGeometry(); var coordinates=geo.getCoordinates(); var len=0; for(var i=0;i<coordinates.length-1;i++) { len+=latlongDistance(coordinates[i][1],coordinates[i][0],coordinates[i+1][1],coordinates[i+1][0]); } return len; }; function getLength() { var geo=drawLayer.getFirstGeometry(); var options={}; options.projection=drawLayer.crs; //EPSG:4326 return ol.sphere.getLength(geo,options); //米 }; function getArea() { var geo=drawLayer.getFirstGeometry(); var options={}; options.projection=drawLayer.crs; //EPSG:4326 return ol.sphere.getArea(geo,options); //平方米 };
參考地址:
http://openlayers.org/en/latest/apidoc/
http://www.cnblogs.com/softfair/p/distance_of_two_latitude_and_longitude_points.html