百度地圖繪製矩形區域
阿新 • • 發佈:2019-02-20
百度地圖繪製多邊形區域 /** * 繪製矩形 */ private void drawRec() { double latitude=Double.parseDouble(coordinates.getLatitude()); double longitude= Double.parseDouble(coordinates.getLongitude()); LatLng pt1 = new LatLng(latitude + 0.02, longitude); LatLng pt2 = new LatLng(latitude, longitude - 0.03); LatLng pt4 = new LatLng(latitude - 0.02, longitude ); LatLng pt5 = new LatLng(latitude, longitude + 0.03); List<LatLng> points = new ArrayList<>(); points.add(pt1); points.add(pt2); points.add(pt4); points.add(pt5); //多邊形覆蓋物 PolygonOptions polygonOptions = new PolygonOptions(); polygonOptions.points(points); polygonOptions.fillColor(0xAAFFFF00); polygonOptions.stroke(new Stroke(2, 0xAA00FF00)); mBaiduMap.addOverlay(polygonOptions); } 新增文字遮蓋物 LatLng latLng = new LatLng(latitude, longitude); TextOptions textOptions = new TextOptions(); textOptions.bgColor(0xAAFFFF00) //設定文字覆蓋物背景顏色 .fontSize(28) //設定字型大小 .fontColor(0xFFFF00FF)// 設定字型顏色 .text("我在這裡啊!!!!") //文字內容 .rotate(-30) //設定文字的旋轉角度 .position(latLng);// 設定位置 bdMap.addOverlay(textOptions); GroundOverlay(地形圖圖層覆蓋物) LatLng southwest = new LatLng(latitude - 0.01, longitude - 0.012);//西南 LatLng northeast = new LatLng(latitude + 0.01, longitude + 0.012);//東北 LatLngBounds bounds = new LatLngBounds.Builder().include(southwest) .include(northeast).build();//得到一個地理範圍物件 BitmapDescriptor bitmap2 = BitmapDescriptorFactory .fromResource(R.drawable.csdn_blog); GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions(); groundOverlayOptions.image(bitmap2);//顯示的圖片 groundOverlayOptions.positionFromBounds(bounds);//顯示的位置 groundOverlayOptions.transparency(0.7f);//顯示的透明度 bdMap.addOverlay(groundOverlayOptions); PolylineOptions(折線覆蓋物) CircleOptions circleOptions = new CircleOptions(); circleOptions.center(new LatLng(latitude, longitude));//設定圓心座標 circleOptions.fillColor(0XFFfaa755);//圓的填充顏色 circleOptions.radius(150);//設定半徑 circleOptions.stroke(new Stroke(5, 0xAA00FF00));//設定邊框 bdMap.addOverlay(circleOptions); DotOptions(圓點覆蓋物) DotOptions dotOptions = new DotOptions(); dotOptions.center(new LatLng(latitude, longitude));//設定圓心座標 dotOptions.color(0XFFfaa755);//顏色 dotOptions.radius(25);//設定半徑 bdMap.addOverlay(dotOptions); CircleOptions(圓形(空心)覆蓋物) CircleOptions circleOptions = new CircleOptions(); circleOptions.center(new LatLng(latitude, longitude));//設定圓心座標 circleOptions.fillColor(0XFFfaa755);//圓的填充顏色 circleOptions.radius(150);//設定半徑 circleOptions.stroke(new Stroke(5, 0xAA00FF00));//設定邊框 bdMap.addOverlay(circleOptions); ArcOptions(弧線覆蓋物) LatLng pt1 = new LatLng(latitude, longitude - 0.01); LatLng pt2 = new LatLng(latitude - 0.01, longitude - 0.01); LatLng pt3 = new LatLng(latitude, longitude + 0.01); ArcOptions arcOptions = new ArcOptions(); arcOptions.points(pt1, pt2, pt3);//設定弧線的起點、中點、終點座標 arcOptions.width(5);//線寬 arcOptions.color(0xFF000000); bdMap.addOverlay(arcOptions); 彈出窗覆蓋物 /** * 顯示彈出視窗覆蓋物 */ private void displayInfoWindow(final LatLng latLng) { // 建立infowindow展示的view Button btn = new Button(getApplicationContext()); btn.setBackgroundResource(R.drawable.popup); btn.setText("點我點我~"); BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory .fromView(btn); // infowindow點選事件 OnInfoWindowClickListener infoWindowClickListener = new OnInfoWindowClickListener() { @Override public void onInfoWindowClick() { reverseGeoCode(latLng); //隱藏InfoWindow bdMap.hideInfoWindow(); } }; // 建立infowindow InfoWindow infoWindow = new InfoWindow(bitmapDescriptor, latLng, -47, infoWindowClickListener); // 顯示InfoWindow bdMap.showInfoWindow(infoWindow); } 地理編碼與反地理編碼 // 建立地理編碼檢索例項 GeoCoder geoCoder = GeoCoder.newInstance(); // OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() { // 反地理編碼查詢結果回撥函式 @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 沒有檢測到結果 Toast.makeText(MainActivity.this, "抱歉,未能找到結果", Toast.LENGTH_LONG).show(); } Toast.makeText(MainActivity.this, "位置:" + result.getAddress(), Toast.LENGTH_LONG) .show(); } // 地理編碼查詢結果回撥函式 @Override public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 沒有檢測到結果 } } }; // 設定地理編碼檢索監聽者 geoCoder.setOnGetGeoCodeResultListener(listener); // geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng)); // 釋放地理編碼檢索例項 // geoCoder.destroy();