美文网首页
手机屏幕四角在百度地图中的坐标点和在屏幕内随机撒点

手机屏幕四角在百度地图中的坐标点和在屏幕内随机撒点

作者: 墨色尘埃 | 来源:发表于2017-06-27 09:52 被阅读0次

    在屏幕内随机撒点

    public void initData() {
            list = new ArrayList<>();
            double initLat = 32.030717;//圆点
            double initLng = 118.723488;
    
            double sanLat = 32.024201;//三角
            double sanLng = 118.721533;
            for (int i = 0; i < 50; i++) {
                Random r = new Random();
                double y = r.nextDouble() * 0.05; //between 0.0 and 1.0
                DecimalFormat df = new DecimalFormat("0.0000");// 保留4位小数
                double intStr = Double.parseDouble(df.format(y));
    
                initLat -= intStr;
                double jia = initLng + intStr;
                BPointRound bPointRound = new BPointRound();
                if (initLat > 31.960735) {
                    bPointRound.setLatitude(initLat + "");  //118.723488,32.030717(绿博园)
                    bPointRound.setLongitude(jia + ""); //118.768691,31.962735(银杏山庄)
                } else {
                    double initLat1 = 32.026221;
                    double initLng1 = 118.724336;
                    Random r1 = new Random();
                    double y1 = r1.nextDouble() * 0.05; //between 0.0 and 1.0
                    DecimalFormat df1 = new DecimalFormat("0.0000");// 保留4位小数
                    double intStr1 = Double.parseDouble(df1.format(y1));
    
                    initLat1 -= intStr1;
                    double jia1 = initLng1 + intStr;
                    if (initLat1 > 31.960735) {
                        bPointRound.setLatitude(initLat1 + "");  //118.723488,32.030717(绿博园)
                        bPointRound.setLongitude(jia1 + ""); //118.768691,31.962735(银杏山庄)
                    } else {
                        double lat = initLat1 - (intStr1 * 0.1);
                        double jia2 = initLng1 + intStr;
                        bPointRound.setLatitude(lat + "");  //118.723488,32.030717(绿博园)
                        bPointRound.setLongitude(jia2 + ""); //118.768691,31.962735(银杏山庄)
                    }
                }
    
    
                sanLat -= intStr;
                double jiaSan = sanLng + intStr;
                BPointTriangle bPoint1 = new BPointTriangle();
                bPoint1.setAz("0,120,240");
                bPoint1.setCompare("弱,强,弱");
                bPoint1.setLapNum("1,2,3");
                bPoint1.setLiveStatus("在网(在网运行),在网(在网运行),在网(在网运行)");
                bPoint1.setSelfWeak("强,弱,弱");
                if (sanLat > 31.960735) {
                    bPoint1.setLatitude(sanLat + "");  //118.723488,32.030717(绿博园)
                    bPoint1.setLongitude(jiaSan + ""); //118.768691,31.962735(银杏山庄)
                } else {
                    double sanLat1 = 32.020649; //118.719521,32.020649
                    double sanLng1 = 118.719521;
                    Random r1 = new Random();
                    double y1 = r1.nextDouble() * 0.05; //between 0.0 and 1.0
                    DecimalFormat df1 = new DecimalFormat("0.0000");// 保留4位小数
                    double intStr1 = Double.parseDouble(df1.format(y1));
    
                    sanLat1 -= intStr1;
                    double jia1 = sanLng1 + intStr;
                    if (sanLat1 > 31.960735) {
                        bPoint1.setLatitude(sanLat1 + "");  //118.723488,32.030717(绿博园)
                        bPoint1.setLongitude(jia1 + ""); //118.768691,31.962735(银杏山庄)
                    } else {
                        double lat = sanLat1 - (intStr1 * 0.1);
                        double jia2 = sanLng1 + intStr;
                        bPoint1.setLatitude(lat + "");  //118.723488,32.030717(绿博园)
                        bPoint1.setLongitude(jia2 + ""); //118.768691,31.962735(银杏山庄)
                    }
                }
                list.add(bPointRound);
                list.add(bPoint1);
            }
        }
    

    手机屏幕四角在百度地图中的坐标点:onCreate方法中

    mMapView = (MapView) findViewById(mapView);
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setOnMapStatusChangeListener(listener); //监听滑动的事件
    
    
    BaiduMap.OnMapStatusChangeListener listener = new BaiduMap.OnMapStatusChangeListener() {
            /**
             * 手势操作地图,设置地图状态等操作导致地图状态开始改变。
             * @param status 地图状态改变开始时的地图状态
             */
            public void onMapStatusChangeStart(MapStatus status) {
            }
    
            /**
             * 地图状态变化中
             * @param status 当前地图状态
             */
            public void onMapStatusChange(MapStatus status) {
            }
    
            /**
             * 地图状态改变结束
             */
            @Override
            public void onMapStatusChangeFinish(MapStatus mapStatus) {
                //左上角经纬度
                Point pt = new Point();
                pt.x = 0;
                pt.y = 0;
                LatLng ll = mBaiduMap.getProjection().fromScreenLocation(pt);
                //右下角经纬度
                DisplayMetrics dm = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(dm);
                Point pty = new Point();
                pty.x = dm.widthPixels;
                pty.y = dm.heightPixels;
                LatLng lly = mBaiduMap.getProjection().fromScreenLocation(pty);
    
                //这里能正确显示坐标
                LatLng[] pts = MapUtils.getMapLTandRB(mBaiduMap);
    //            pts[0] = MapUtils.fromBaiduToGPS(pts[0]); //gps坐标
    //            pts[1] = MapUtils.fromBaiduToGPS(pts[1]); //gps坐标
                Log.e("MainActivity", "左上角坐标:" + pts[0]+"\n右下角坐标:"+pts[1]);
    
                pointByWindow = DrawPointByWindow.getInstance(BaiduMapUse.getInstance(MainActivity.this
                        , mBaiduMap), mBaiduMap);
                pointByWindow.getPoint(pts);
    
                //如果把marker的点击事件放在屏幕滑动的监听中,会出现滑动一次就多执行一次setOnMarkerClickListener事件
                //可能是因为onMapStatusChangeFinish滑动一次setOnMarkerClickListener也要执行一次,虽然暂时没有点击
                //但是被记录下来,等到点击marker的时候会执行完所有的次数
    //            mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
    //                @Override
    //                public boolean onMarkerClick(Marker marker) {
    //
    //                    long startTime = System.currentTimeMillis();
    //                    Log.e("MainActivity", "startTime:" + startTime);
    //
    //                    Bundle b = MapUtils.getDataWithOverlay(marker);
    //                    if (null != b) {
    //                        Serializable data = b.getSerializable("data");
    //                        BasePointInfo basePointInfo = (BasePointInfo) data;
    //                        String layerId = basePointInfo.getLayerId();
    //                        //查询已勾选图层下对应坐标的基站
    //                        List<BasePointInfo> pois = new ArrayList<>();
    //                        pois.add(basePointInfo);
    //                        pois.add(basePointInfo);
    //
    //                        PixelInfoDialog dialog = new PixelInfoDialog(mContext, pois, mDialogUtil,mBaiduMap);
    //                        dialog.show();
    //
    //                        long endTime = System.currentTimeMillis();
    //                        Log.e("MainActivity", "endTime:" + endTime);
    //                        long xiangjian = endTime - startTime;
    //                        Log.e("MainActivity", "xiangjian:" + xiangjian);
    //
    //
    ////                        if (layerId.equals("layerId")) {  //不同图层的点(每个图层的点信息结构应该相同)
    ////                            map = new HashMap<>();
    ////                            map.put("第一", new ElementaryFragment());
    ////                            map.put("第二", new MapFragment());
    ////                            map.put("第三", new ZipFragment());
    ////                            DialogFragmentWindow_Modity dialog = new DialogFragmentWindow_Modity(map,pois,basePointInfo);
    ////                            dialog.show(getSupportFragmentManager(), "");
    ////
    ////                        }else{                           //另一个图层的点
    ////                            map = new HashMap<>();
    ////                            map.put("第一", new MapFragment());
    ////                            DialogFragmentWindow_Modity dialog = new DialogFragmentWindow_Modity(map,pois,basePointInfo);
    ////                            dialog.show(getSupportFragmentManager(), ""); //Activity继承FragmentActivity才可以有getSupportFragmentManager
    ////                        }
    //
    //                    }
    //                    return true;
    //                }
    //            });
    
            }
        };
    

    MapUtils

    package com.example.hasee.baidutest.utils;
    
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint.Style;
    import android.graphics.Point;
    import android.graphics.Rect;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BaiduMap.SnapshotReadyCallback;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.Circle;
    import com.baidu.mapapi.map.CircleOptions;
    import com.baidu.mapapi.map.Gradient;
    import com.baidu.mapapi.map.HeatMap;
    import com.baidu.mapapi.map.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.Marker;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.map.Overlay;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.map.Polygon;
    import com.baidu.mapapi.map.PolygonOptions;
    import com.baidu.mapapi.map.Polyline;
    import com.baidu.mapapi.map.PolylineOptions;
    import com.baidu.mapapi.map.Stroke;
    import com.baidu.mapapi.map.WeightedLatLng;
    import com.baidu.mapapi.map.offline.MKOLSearchRecord;
    import com.baidu.mapapi.map.offline.MKOLUpdateElement;
    import com.baidu.mapapi.map.offline.MKOfflineMap;
    import com.baidu.mapapi.map.offline.MKOfflineMapListener;
    import com.baidu.mapapi.model.LatLng;
    import com.baidu.mapapi.search.geocode.GeoCodeOption;
    import com.baidu.mapapi.search.geocode.GeoCoder;
    import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
    import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
    import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
    import com.baidu.mapapi.search.poi.PoiCitySearchOption;
    import com.baidu.mapapi.search.poi.PoiSearch;
    import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
    import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
    import com.baidu.mapapi.search.route.PlanNode;
    import com.baidu.mapapi.search.route.RoutePlanSearch;
    import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
    import com.baidu.mapapi.search.sug.SuggestionSearch;
    import com.baidu.mapapi.search.sug.SuggestionSearchOption;
    import com.baidu.mapapi.utils.CoordinateConverter;
    import com.baidu.mapapi.utils.CoordinateConverter.CoordType;
    import com.baidu.mapapi.utils.DistanceUtil;
    import com.baidu.mapapi.utils.SpatialRelationUtil;
    import com.example.hasee.baidutest.widget.CircleDrawable;
    import com.example.hasee.baidutest.widget.PerformanceIndexDrawable;
    import com.example.hasee.baidutest.widget.PerformanceIndexDrawable.PerformanceIndex;
    import com.example.hasee.baidutest.widget.PerformanceIndexDrawable2;
    import com.example.hasee.baidutest.widget.TriangleDrawable;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 百度地图工具类
     *
     * @author Liao_Yang
     * @Description
     * @data2015年12月28日 下午4:26:13
     */
    public class MapUtils {
        /**
         * 开始定位
         */
        public static void initLocation(BaiduMap baiduMap, LocationClient locClient, BDLocationListener listener) {
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); //缩放等级
            baiduMap.setMyLocationEnabled(true);// 开启定位图层
            // 普通地图
            baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
            baiduMap.setMapStatus(msu);
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);// 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setAddrType("all");
            option.setScanSpan(1000);
            locClient.setLocOption(option);
            locClient.registerLocationListener(listener);
            locClient.start();
        }
    
        /**
         * 切换地图俯仰角
         */
        public static void Map3D(BaiduMap baiduMap, int overlook) {
            MapStatus status = new MapStatus.Builder().overlook(overlook).build();
            baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(status));
        }
    
        /**
         * 关闭定位
         */
        public static void stopLocation(BaiduMap baiduMap, LocationClient locClient) {
            if (null != locClient && null != baiduMap) {
                locClient.stop();
                baiduMap.setMyLocationEnabled(false);
            }
        }
    
        /**
         * 添加点位至定位图层
         */
        public static void addMyLocation(BaiduMap baiduMap, BDLocation location) {
            MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
                    .direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude())
                    .build();
            baiduMap.setMyLocationData(locData);
        }
    
        /**
         * 移动地图至指定点位
         */
        public static void moveMapToNewLatLng(BaiduMap baiduMap, double lat, double lng) {
            LatLng ll = new LatLng(lat, lng);
            MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.animateMapStatus(u);
        }
    
        /**
         * 改变地图缩放等级 处理缩放 sdk 缩放级别范围: [3.0,19.0]
         */
        public static void setZoomLevel(BaiduMap baiduMap, float zoomLevel) {
            MapStatusUpdate u = MapStatusUpdateFactory.zoomTo(zoomLevel);
            baiduMap.animateMapStatus(u);
        }
    
        /**
         * 获取地图缩放等级
         */
        public static int getZoomLevel(BaiduMap baiduMap) {
            int zoom = Math.round(baiduMap.getMapStatus().zoom);
            return zoom;
        }
    
        public static void mapZoomIn(BaiduMap baiduMap) {
            int zoomLevel = getZoomLevel(baiduMap) + 1;
            if (zoomLevel <= 20) {
                setZoomLevel(baiduMap, zoomLevel);
            } else {
                setZoomLevel(baiduMap, 20);
            }
        }
    
        public static void mapZoomOut(BaiduMap baiduMap) {
            int zoomLevel = getZoomLevel(baiduMap) - 1;
            if (zoomLevel >= 3) {
                setZoomLevel(baiduMap, zoomLevel);
            } else {
                setZoomLevel(baiduMap, 3);
            }
        }
    
        /**
         * 获取屏幕截图 rect=null 为全屏
         */
        public static void getScreenshot(BaiduMap baiduMap, Rect rect, SnapshotReadyCallback callback) {
            baiduMap.snapshotScope(rect, callback);
        }
    
        /**
         * 改变地图状态为普通
         */
        public static void changeMapTypeNormall(BaiduMap baiduMap) {
            baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        }
    
        /**
         * 改变地图状态为卫星
         */
        public static void changeMapTypeSatellite(BaiduMap baiduMap) {
            baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
        }
    
        /**
         * 获取路线规划实例
         */
        public static RoutePlanSearch initRoutePlan(OnGetRoutePlanResultListener listener) {
            RoutePlanSearch search = RoutePlanSearch.newInstance();
            search.setOnGetRoutePlanResultListener(listener);
            return search;
        }
    
        /**
         * 线路规划
         */
        public static void routePlan(RoutePlanSearch search, LatLng stLL, LatLng enLL) {
            PlanNode stNode = PlanNode.withLocation(stLL);
            PlanNode enNode = PlanNode.withLocation(enLL);
            search.drivingSearch(new DrivingRoutePlanOption().from(stNode).to(enNode));
        }
    
    
        /**
         * 获取离线地图服务实例
         */
        public static MKOfflineMap initOffline(MKOfflineMapListener listener) {
            MKOfflineMap offline = new MKOfflineMap();
            offline.init(listener);
            return offline;
        }
    
        /**
         * 获取所有已下载地图列表
         */
        public static ArrayList<MKOLUpdateElement> getDownloadMapList(MKOfflineMap offline) {
            ArrayList<MKOLUpdateElement> array = null;
            array = offline.getAllUpdateInfo();
            return array;
        }
    
        /**
         * 获取所有可下载地图列表
         */
        public static ArrayList<MKOLSearchRecord> getAllCityList(MKOfflineMap offline) {
            ArrayList<MKOLSearchRecord> array = null;
            array = offline.getOfflineCityList();
            return array;
        }
    
        /**
         * 获取建议搜索服务实例
         */
        public static SuggestionSearch initSuggestionSearch(OnGetSuggestionResultListener listener) {
            SuggestionSearch suggesionSearch = SuggestionSearch.newInstance();
            suggesionSearch.setOnGetSuggestionResultListener(listener);
            return suggesionSearch;
        }
    
        /**
         * 使用建议搜索服务获取建议列表
         */
        public static void requestSuggestion(SuggestionSearch suggesionSearch, String city, String keyword) {
            suggesionSearch.requestSuggestion(new SuggestionSearchOption().city(city).keyword(keyword));
        }
    
        /**
         * 获取poi搜索服务实例
         */
        public static PoiSearch initPoiSearch(OnGetPoiSearchResultListener listener) {
            PoiSearch poiSearch = PoiSearch.newInstance();
            poiSearch.setOnGetPoiSearchResultListener(listener);
            return poiSearch;
        }
    
        /**
         * poi搜索
         */
        public static void requestPoiSearch(PoiSearch poiSearch, String city, String keyword, int capacity, int pageNum) {
            poiSearch.searchInCity(
                    new PoiCitySearchOption().city(city).keyword(keyword).pageCapacity(capacity).pageNum(pageNum));
        }
    
    //    /**
    //     * 添加poi结果至地图
    //     */
    //    public static PoiOverlay addPoiResultOnMap(BaiduMap baiduMap, PoiResult result) {
    //        PoiOverlay overlay = new PoiOverlay(baiduMap);
    //        overlay.setData(result);
    //        overlay.addToMap();
    //        return overlay;
    //    }
    
        /**
         * 添加覆盖物至地图
         */
        public static Marker addOverlayToMap(BaiduMap baiduMap, LatLng ll, BitmapDescriptor bitmap) {
            OverlayOptions options = new MarkerOptions().position(ll).icon(bitmap);
            Marker marker = (Marker) baiduMap.addOverlay(options);
            return marker;
        }
    
        public static Marker addOverlayToMap(BaiduMap baiduMap, LatLng ll, BitmapDescriptor bitmap, float rotate,
                                             int index) {
            OverlayOptions options = new MarkerOptions().position(ll).icon(bitmap).rotate(rotate).zIndex(index);
            Marker marker = (Marker) baiduMap.addOverlay(options);
            return marker;
        }
    
        public static Marker addOverlayToMap(BaiduMap baiduMap, LatLng ll, BitmapDescriptor bitmap, float rotate, int index,
                                             float anchorX) {
            OverlayOptions options = new MarkerOptions().position(ll).icon(bitmap).rotate(rotate).zIndex(index)
                    .anchor(anchorX, 1f);
            Marker marker = (Marker) baiduMap.addOverlay(options);
            return marker;
        }
    
        public static Marker addOverlayToMap(BaiduMap baiduMap, LatLng ll, BitmapDescriptor bitmap, float rotate, int index,
                                             float anchorX, float anchorY) {
            OverlayOptions options = new MarkerOptions().position(ll).icon(bitmap).rotate(rotate).zIndex(index)
                    .anchor(anchorX, anchorY);
            Marker marker = (Marker) baiduMap.addOverlay(options);
            return marker;
        }
    
        /**
         * 更新mark坐标
         */
        public static void updateMarkerLatLng(Marker marker, LatLng ll) {
            marker.setPosition(ll);
        }
    
        /**
         * 绘制折线
         */
        public static Polyline addPolylineToMap(BaiduMap baiduMap, List<LatLng> points, int width, int color) {
            OverlayOptions ooPolyline = new PolylineOptions().points(points).width(width).color(color);
            Polyline polyline = (Polyline) baiduMap.addOverlay(ooPolyline);
            return polyline;
        }
    
        /**
         * 更新折线数据
         */
        public static void setPolylinePoint(Polyline polyline, List<LatLng> points) {
            polyline.setPoints(points);
        }
    
        /**
         * 绘制多边形
         */
        public static Polygon addPolygonToMap(BaiduMap baiduMap, List<LatLng> points, int width, int color,
                                              int innerColor) {
            OverlayOptions ooPolygon = new PolygonOptions().points(points).stroke(new Stroke(width, color))
                    .fillColor(innerColor);
            Polygon polygon = (Polygon) baiduMap.addOverlay(ooPolygon);
            return polygon;
        }
    
        /**
         * 绘制多边形
         */
        public static Polygon addPolygonToMap(BaiduMap baiduMap, List<LatLng> points, int width, int color, int innerColor,
                                              int index) {
            OverlayOptions ooPolygon = new PolygonOptions().points(points).stroke(new Stroke(width, color))
                    .fillColor(innerColor).zIndex(index);
            Polygon polygon = (Polygon) baiduMap.addOverlay(ooPolygon);
            return polygon;
        }
    
        public static Circle addCircleToMap(BaiduMap baiduMap, LatLng center, int radius, int fillColor, int strokeColor) {
            Stroke stroke = new Stroke(1, strokeColor);
            CircleOptions circleOptions = new CircleOptions().center(center).radius(radius).fillColor(fillColor)
                    .stroke(stroke);
            Circle circle = (Circle) baiduMap.addOverlay(circleOptions);
            return circle;
        }
    
        /**
         * 更新多边形数据
         */
        public static void setPolygonPoint(Polygon polygon, List<LatLng> points) {
            polygon.setPoints(points);
        }
    
        /**
         * 删除覆盖物
         */
        public static void removeOverlayFromMap(Overlay overlay) {
            if (null != overlay) {
                overlay.remove();
            }
        }
    
        /**
         * 保存信息至覆盖物
         */
        public static void saveDataWithOverlay(Overlay overlay, Bundle b) {
            Bundle extraInfo = overlay.getExtraInfo();
            if (extraInfo == null) {
                overlay.setExtraInfo(b);
            }
        }
    
        /**
         * 获取覆盖物保存信息
         */
        public static Bundle getDataWithOverlay(Overlay overlay) {
            return overlay.getExtraInfo();
        }
    
        /**
         * 获取两点间距离 单位:米
         */
        public static double getDistance(LatLng stLL, LatLng enLL) {
            return DistanceUtil.getDistance(stLL, enLL);
        }
    
        /**
         * 清空地图
         */
        public static void clearMap(BaiduMap baiduMap) {
            baiduMap.clear();
        }
    
        /**
         * 将屏幕坐标转换成经纬度
         */
        public static LatLng fromPointToLatLng(BaiduMap baiduMap, Point p) {
            LatLng ll = baiduMap.getProjection().fromScreenLocation(p);
            return ll;
        }
    
        /**
         * 获取地理编码查询实例
         */
        public static GeoCoder initGeoCoder(OnGetGeoCoderResultListener listener) {
            GeoCoder search = GeoCoder.newInstance();
            search.setOnGetGeoCodeResultListener(listener);
            return search;
        }
    
        /**
         * 反地理编码查询
         */
        public static void reverseGeoCode(GeoCoder search, LatLng ll) {
            search.reverseGeoCode(new ReverseGeoCodeOption().location(ll));
        }
    
        /**
         * 地理编码查询
         */
        public static void geocode(GeoCoder search, String address, String city) {
            search.geocode(new GeoCodeOption().address(address).city(city));
        }
    
        /**
         * GPS坐标转换百度坐标
         */
        public static LatLng fromGPSToBaidu(LatLng ll) {
            if (null != ll) {
                CoordinateConverter converter = new CoordinateConverter();
                converter.from(CoordType.GPS);
                converter.coord(ll);
                return converter.convert();
            }
            return null;
        }
    
        /**
         * 百度坐标转gps
         */
        public static LatLng fromBaiduToGPS(LatLng ll) {
            if (null != ll) {
                LatLng convertBaidu = fromGPSToBaidu(ll);
                double resultLat = 2 * ll.latitude - convertBaidu.latitude;
                double resultLong = 2 * ll.longitude - convertBaidu.longitude;
                return new LatLng(resultLat, resultLong);
            }
            return null;
        }
    
        /**
         * 获取地图信息
         */
        public static LatLng[] getMapBounds(BaiduMap baiduMap) {
            LatLng rt = baiduMap.getMapStatus().bound.northeast;
            LatLng lb = baiduMap.getMapStatus().bound.southwest;
            return new LatLng[]{rt, lb};
        }
    
        /**
         * 获取地图左上角和右下角的经纬度
         */
        public static LatLng[] getMapLTandRB(BaiduMap baiduMap) {
            LatLng rt = baiduMap.getMapStatus().bound.northeast;
            LatLng lb = baiduMap.getMapStatus().bound.southwest;
            return new LatLng[]{new LatLng(rt.latitude, lb.longitude), new LatLng(lb.latitude, rt.longitude)};
        }
    
        /**
         * 获取三角型覆盖物
         */
        public static BitmapDescriptor getTriangleDrawable(int width, int height, int color, Style style) {
            Drawable drawable = new TriangleDrawable(color, style);
            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
            Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, width, height);
            drawable.draw(canvas);
            return BitmapDescriptorFactory.fromBitmap(bitmap);
        }
    
        public static BitmapDescriptor getRoadDrawable(int color) {
            Drawable drawable = new CircleDrawable(color);
            Bitmap bitmap = Bitmap.createBitmap(40, 40, Bitmap.Config.ARGB_4444);
            Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, 40, 40);
            drawable.draw(canvas);
            return BitmapDescriptorFactory.fromBitmap(bitmap);
        }
    
        public static BitmapDescriptor getBigRoadDrawable(int color) {
            Drawable drawable = new CircleDrawable(color, 13);
            Bitmap bitmap = Bitmap.createBitmap(40, 40, Bitmap.Config.ARGB_4444);
            Canvas canvas = new Canvas(bitmap);
            drawable.setBounds(0, 0, 40, 40);
            drawable.draw(canvas);
            return BitmapDescriptorFactory.fromBitmap(bitmap);
        }
    
        /**
         * * 获取待性能指标覆盖物
         *
         * @param color       扇区颜色
         * @param style       扇区样式:Fill/Stroke
         * @param sWidth      扇区宽
         * @param sHeight     扇区高
         * @param angle       扇区角度
         * @param selfCompare 自身弱覆盖
         * @param over        越区覆盖
         * @param lap         重叠覆盖
         * @param compare     比较
         * @return
         */
        public static BitmapDescriptor getTriangleDrawable(int color, Style style, int sWidth, int sHeight, float angle,
                                                           int offsetLevel, String selfCompare, String over, String lap,
                                                           String compare) {
            PerformanceIndexDrawable drawable = new PerformanceIndexDrawable(color, style, sWidth, sHeight, angle);
            if ("弱".equals(selfCompare)) {
                drawable.addRect(PerformanceIndex.TYPE_RUO, selfCompare, Color.parseColor("#43D012"));
            }
            if (!Utils.isEmpty(over) && !"0".equals(over)) {
                int overColor = 0;
                try {
                    int overCount = Integer.parseInt(over);
                    if (overCount <= 5) {
                        overColor = Color.parseColor("#999999");
                    } else if (overCount <= 10) {
                        overColor = Color.parseColor("#F742B9");
                    } else {
                        overColor = Color.parseColor("#ff0000");
                    }
                } catch (Exception e) {
                }
                drawable.addRect(PerformanceIndex.TYPE_GUO, over, overColor);
            }
            if (!Utils.isEmpty(lap) && !"0".equals(lap)) {
                int lapColor = 0;
                try {
                    int lapCount = Integer.parseInt(lap);
                    if (lapCount <= 5) {
                        lapColor = Color.parseColor("#999999");
                    } else if (lapCount <= 10) {
                        lapColor = Color.parseColor("#F742B9");
                    } else {
                        lapColor = Color.parseColor("#ff0000");
                    }
                } catch (Exception e) {
                }
                drawable.addRect(PerformanceIndex.TYPE_CHONG, lap, lapColor);
            }
            if (!"弱".equals(selfCompare) && "弱".equals(compare)) {
                drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱", Color.parseColor("#999999"));
            } else if ("弱".equals(selfCompare) && "弱".equals(compare)) {
                drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱", Color.parseColor("#FF0000"));
            } else if ("弱".equals(selfCompare) && "强".equals(compare)) {
                drawable.addRect(PerformanceIndex.TYPE_WEAK, "强", Color.parseColor("#7F007F"));
            }
    //        Bitmap bp = Utils.drawable2bitmap(drawable);
            Bitmap bp = Utils.drawable2bitmap(drawable,angle);
            return BitmapDescriptorFactory.fromBitmap(bp);
        }
    
        public static BitmapDescriptor getTriangleDrawable(int leftOrRight, int color, Style style, int sWidth, int sHeight,
                                                           float angle, int offsetLevel, String selfCompare, String over,
                                                           String lap, String compare) {
            /**
             * 初始化构造函数,还未调用对象里的方法
             */
            // if (MapFragment.ab % 2 == 0){
    //        PerformanceIndexDrawable drawable = new PerformanceIndexDrawable(color, style, sWidth, sHeight, angle);
            PerformanceIndexDrawable2 drawable = new PerformanceIndexDrawable2(color, style, sWidth, sHeight, leftOrRight);
    //        PerformanceIndexDrawable2_copy drawable = new PerformanceIndexDrawable2_copy(color, style, sWidth, sHeight,
    //                leftOrRight,angle);
            if (!Utils.isEmpty(over) && !"0".equals(over)) {
                int overColor = 0;
                try {
                    int overCount = Integer.parseInt(over);
                    if (overCount <= 5) {
                        overColor = Color.parseColor("#999999");
                    } else if (overCount <= 10) {
                        overColor = Color.parseColor("#F742B9");
                    } else {
                        overColor = Color.parseColor("#ff0000");
                    }
                } catch (Exception e) {
                }
                drawable.addRect(PerformanceIndex.TYPE_GUO, over, overColor);
            }
            if (!Utils.isEmpty(lap) && !"0".equals(lap)) {
                int lapColor = 0;
                try {
                    int lapCount = Integer.parseInt(lap);
                    if (lapCount <= 5) {
                        lapColor = Color.parseColor("#999999");
                    } else if (lapCount <= 10) {
                        lapColor = Color.parseColor("#F742B9");
                    } else {
                        lapColor = Color.parseColor("#ff0000");
                    }
                } catch (Exception e) {
                }
                drawable.addRect(PerformanceIndex.TYPE_CHONG, lap, lapColor);
            }
            if ("弱".equals(selfCompare) && "弱".equals(compare)) {
                drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱", Color.parseColor("#FF0000"));
            } else if ("弱".equals(selfCompare) && "强".equals(compare)) {
                drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱", Color.parseColor("#999999"));
            }
    //        Bitmap bp = Utils.drawable2bitmap(drawable);
            Bitmap bp = Utils.drawable2bitmap(drawable,angle); //旋转角度
            return BitmapDescriptorFactory.fromBitmap(bp);
            // }else{
            // PerformanceIndexDrawable3 drawable = new
            // PerformanceIndexDrawable3(color, style, sWidth, sHeight,leftOrRight);
            // if (!Utils.isEmpty(over) && !"0".equals(over)) {
            // int overColor = 0;
            // try {
            // int overCount = Integer.parseInt(over);
            // if (overCount <= 5) {
            // overColor = Color.parseColor("#999999");
            // } else if (overCount <= 10) {
            // overColor = Color.parseColor("#F742B9");
            // } else {
            // overColor = Color.parseColor("#ff0000");
            // }
            // } catch (Exception e) {
            // }
            // drawable.addRect(PerformanceIndex.TYPE_GUO, over, overColor);
            // }
            // if (!Utils.isEmpty(lap) && !"0".equals(lap)) {
            // int lapColor = 0;
            // try {
            // int lapCount = Integer.parseInt(lap);
            // if (lapCount <= 5) {
            // lapColor = Color.parseColor("#999999");
            // } else if (lapCount <= 10) {
            // lapColor = Color.parseColor("#F742B9");
            // } else {
            // lapColor = Color.parseColor("#ff0000");
            // }
            // } catch (Exception e) {
            // }
            // drawable.addRect(PerformanceIndex.TYPE_CHONG, lap, lapColor);
            // }
            // if ("弱".equals(selfCompare) && "弱".equals(compare)) {
            // drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱",
            // Color.parseColor("#FF0000"));
            // } else if ("弱".equals(selfCompare) && "强".equals(compare)) {
            // drawable.addRect(PerformanceIndex.TYPE_WEAK, "弱",
            // Color.parseColor("#999999"));
            // }
            // Bitmap bp = Utils.drawable2bitmap(drawable);
            // return BitmapDescriptorFactory.fromBitmap(bp);
            // }
        }
    
        /**
         * 获取两点间角度
         */
        public static double getAngle(List<LatLng> points) {
            double angle = 0;
    
            LatLng stLL = points.get(0);
            LatLng enLL = points.get(1);
    
            double x = enLL.longitude - stLL.longitude;
            double y = enLL.latitude - stLL.latitude;
    
            if (y == 0 && x > 0) {
                angle = 90;
            } else if (y == 0 && x < 0) {
                angle = 270;
            } else if (x == 0 && y > 0) {
                angle = 0;
            } else if (x == 0 && y < 0) {
                angle = 180;
            } else if (x > 0 && y > 0) {
                angle = Math.atan((x) / (y)) * 180 / Math.PI;
            } else if (x > 0 && y < 0) {
                angle = 180 + Math.atan((x) / (y)) * 180 / Math.PI;
            } else if (x < 0 && y < 0) {
                angle = 180 + Math.atan((x) / (y)) * 180 / Math.PI;
            } else if (x < 0 && y > 0) {
                angle = 360 + Math.atan((x) / (y)) * 180 / Math.PI;
            }
    
            return angle;
        }
    
        /**
         * 添加热力图
         */
        public static HeatMap addHeatMap(BaiduMap baiduMap, List<WeightedLatLng> lls) {
            HeatMap heatmap = null;
            if (null != baiduMap) {
                int[] DEFAULT_GRADIENT_COLORS = {Color.rgb(102, 225, 0), Color.rgb(255, 0, 0)};
                float[] DEFAULT_GRADIENT_START_POINTS = {0.2f, 1f};
                Gradient gradient = new Gradient(DEFAULT_GRADIENT_COLORS, DEFAULT_GRADIENT_START_POINTS);
                heatmap = new HeatMap.Builder().weightedData(lls).gradient(gradient).radius(20).build();
                baiduMap.addHeatMap(heatmap);
            }
            return heatmap;
        }
    
        /**
         * 移除热力图
         */
        public static void removeheatMap(HeatMap heatMap) {
            heatMap.removeHeatMap();
        }
    
        public static boolean isPolygonContainsPoint(List<LatLng> points, LatLng point) {
            boolean isInFlag = SpatialRelationUtil.isPolygonContainsPoint(points, point);
            return isInFlag;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:手机屏幕四角在百度地图中的坐标点和在屏幕内随机撒点

          本文链接:https://www.haomeiwen.com/subject/ojiscxtx.html