日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 使用 百度地图 测量 多边形面积

發布時間:2023/12/18 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 使用 百度地图 测量 多边形面积 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
btn_clear = (Button)findViewById(R.id.btn_clear); btn_jisuan = (Button)findViewById(R.id.btn_jisuan); // 地圖初始化 mMapView = (MapView) findViewById(R.id.mapView); mBaiduMap = mMapView.getMap(); //地圖單擊事件監聽 mBaiduMap.setOnMapClickListener(new OnMapClickListener() {@Overridepublic boolean onMapPoiClick(MapPoi arg0) {return false;}@Overridepublic void onMapClick(final LatLng latLng) {//獲取經緯度 latitude = latLng.latitude; longitude = latLng.longitude; // 定義Maker坐標點 LatLng point = new LatLng(latitude, longitude); MarkerOptions options = new MarkerOptions().position(point).icon(icon_muasure); pts.add(latLng);// 在地圖上添加Marker,并顯示 mBaiduMap.addOverlay(options);}});//計算按鈕點擊事件 btn_jisuan.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String area = getArea(pts);//在地圖上添加文字OverlayOptions ooText = new TextOptions().bgColor(0xAAFFFF00).fontSize(48).fontColor(0xFFFF00FF).text("面積:" + area + " m2").position(pts.get(0));mBaiduMap.addOverlay(ooText);} }); //清除按鈕點擊事件 btn_jisuan.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {pts.clear();mBaiduMap.clear();} });/*** 計算多邊形面積* @return */protected String getArea(List<LatLng> pts) {double totalArea = 0;// 初始化總面積double LowX = 0.0; double LowY = 0.0; double MiddleX = 0.0;double MiddleY = 0.0;double HighX = 0.0;double HighY = 0.0;double AM = 0.0;double BM = 0.0;double CM = 0.0;double AL = 0.0;double BL = 0.0;double CL = 0.0;double AH = 0.0;double BH = 0.0;double CH = 0.0;double CoefficientL = 0.0;double CoefficientH = 0.0;double ALtangent = 0.0;double BLtangent = 0.0;double CLtangent = 0.0;double AHtangent = 0.0;double BHtangent = 0.0;double CHtangent = 0.0;double ANormalLine = 0.0;double BNormalLine = 0.0;double CNormalLine = 0.0;double OrientationValue = 0.0;double AngleCos = 0.0;double Sum1 = 0.0;double Sum2 = 0.0;double Count2 = 0;double Count1 = 0;double Sum = 0.0;double Radius = 6378137.0;// WGS84橢球半徑int Count = pts.size();//最少3個點if (Count < 3) {return;}for ( int i = 0; i < Count; i++) {if (i == 0) {LowX = pts.get(Count - 1).longitude * Math.PI / 180;LowY = pts.get(Count - 1).latitude * Math.PI / 180;MiddleX = pts.get(0).longitude * Math.PI / 180;MiddleY = pts.get(0).latitude * Math.PI / 180;HighX = pts.get(1).longitude * Math.PI / 180;HighY = pts.get(1).latitude * Math.PI / 180;} else if (i == Count - 1) {LowX = pts.get(Count - 2).longitude * Math.PI / 180;LowY = pts.get(Count - 2).latitude * Math.PI / 180;MiddleX = pts.get(Count - 1).longitude * Math.PI / 180;MiddleY = pts.get(Count - 1).latitude * Math.PI / 180;HighX = pts.get(0).longitude * Math.PI / 180;HighY = pts.get(0).latitude * Math.PI / 180;} else {LowX = pts.get(i - 1).longitude * Math.PI / 180;LowY = pts.get(i - 1).latitude * Math.PI / 180;MiddleX = pts.get(i).longitude * Math.PI / 180;MiddleY = pts.get(i).latitude * Math.PI / 180;HighX = pts.get(i + 1).longitude * Math.PI / 180;HighY = pts.get(i + 1).latitude * Math.PI / 180;}AM = Math.cos(MiddleY) * Math.cos(MiddleX);BM = Math.cos(MiddleY) * Math.sin(MiddleX);CM = Math.sin(MiddleY);AL = Math.cos(LowY) * Math.cos(LowX);BL = Math.cos(LowY) * Math.sin(LowX);CL = Math.sin(LowY);AH = Math.cos(HighY) * Math.cos(HighX);BH = Math.cos(HighY) * Math.sin(HighX);CH = Math.sin(HighY);CoefficientL = (AM * AM + BM * BM + CM * CM)/ (AM * AL + BM * BL + CM * CL);CoefficientH = (AM * AM + BM * BM + CM * CM)/ (AM * AH + BM * BH + CM * CH);ALtangent = CoefficientL * AL - AM;BLtangent = CoefficientL * BL - BM;CLtangent = CoefficientL * CL - CM;AHtangent = CoefficientH * AH - AM;BHtangent = CoefficientH * BH - BM;CHtangent = CoefficientH * CH - CM;AngleCos = (AHtangent * ALtangent + BHtangent * BLtangent + CHtangent* CLtangent)/ (Math.sqrt(AHtangent * AHtangent + BHtangent* BHtangent + CHtangent * CHtangent) * Math.sqrt(ALtangent * ALtangent + BLtangent* BLtangent + CLtangent * CLtangent));AngleCos = Math.acos(AngleCos);ANormalLine = BHtangent * CLtangent - CHtangent * BLtangent;BNormalLine = 0 - (AHtangent * CLtangent - CHtangent* ALtangent);CNormalLine = AHtangent * BLtangent - BHtangent * ALtangent;if (AM != 0)OrientationValue = ANormalLine / AM;else if (BM != 0)OrientationValue = BNormalLine / BM;elseOrientationValue = CNormalLine / CM;if (OrientationValue > 0) {Sum1 += AngleCos;Count1++;} else {Sum2 += AngleCos;Count2++;}}double tempSum1, tempSum2;tempSum1 = Sum1 + (2 * Math.PI * Count2 - Sum2);tempSum2 = (2 * Math.PI * Count1 - Sum1) + Sum2;if (Sum1 > Sum2) {if ((tempSum1 - (Count - 2) * Math.PI) < 1)Sum = tempSum1;elseSum = tempSum2;} else {if ((tempSum2 - (Count - 2) * Math.PI) < 1)Sum = tempSum2;elseSum = tempSum1;}totalArea = (Sum - (Count - 2) * Math.PI) * Radius * Radius;return String.valueOf(Math.floor(totalArea)); // 返回總面積}


效果圖:



注:這個算法偶爾會有 面積為負值 的情況出現,暫未解決

參考文章:http://blog.csdn.net/chenguang79/article/details/40506469

總結

以上是生活随笔為你收集整理的Android 使用 百度地图 测量 多边形面积的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。