Map Download by Specifying a Bounding Box implementation

做~自己de王妃 提交于 2021-01-29 09:16:18

问题


i have read in the premium user guide that we can download a small amount of map with MapDataPrefetcher. i use a Mapfragment to show the map in my app, and it says that the MapEngine is automatically initialized by using MapFragment.

the problem is that i can't understand how to apply the methods and where i need to initialize the request for downloading the bounding box itself. its not so clear in the user guide.

if someone here can help me with that problem or send an example of the implementation i will be very grateful!

this is my init method for the map and the map fragment

 private void initialize() {
    setContentView(R.layout.activity_main);

    // Search for the map fragment to finish setup by calling init().
    //  mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapfragment);
    mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapfragment);
    mLocationInfo = (TextView) findViewById(R.id.textViewLocationInfo);
    mapFragment.setRetainInstance(false);
    // Set up disk cache path for the map service for this application
    // It is recommended to use a path under your application folder for storing the disk cache
    boolean success = com.here.android.mpa.common.MapSettings.setIsolatedDiskCacheRootPath(
            getApplicationContext().getExternalFilesDir(null)+File.separator + ".here-maps",
            "com.example.andrey88.MapService"); /* ATTENTION! Do not forget to update {YOUR_INTENT_NAME} */
    if (!success) {
        Toast.makeText(getApplicationContext(), "Unable to set isolated disk cache path.", Toast.LENGTH_LONG);
    } else {
        mapFragment.init(new OnEngineInitListener() {
            @Override
            public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
                if (error == OnEngineInitListener.Error.NONE) {
                    // retrieve a reference of the map from the map fragment
                    map = mapFragment.getMap();
                    // Set the map center to the Ruppin region (no animation)
                    map.setCenter(new GeoCoordinate(32.343099, 34.911272, 0.0), Map.Animation.NONE);
                    // Set the zoom level
                    map.setZoomLevel(17.8);


                    map.setMapScheme(Map.Scheme.PEDESTRIAN_DAY);
                    map.setLandmarksVisible(false);
                    map.setProjectionMode(Map.Projection.MERCATOR);
                    map.getPedestrianFeaturesVisible();



                    // position of user
                    map.addTransformListener(MainActivity.this);
                    mPositioningManager = PositioningManager.getInstance();

                    // check source of getting geo location
                    mHereLocation = LocationDataSourceHERE.getInstance(
                            new StatusListener() {
                                @Override
                                public void onOfflineModeChanged(boolean offline) {
                                    // called when offline mode changes
                                }

                                @Override
                                public void onAirplaneModeEnabled() {
                                    // called when airplane mode is enabled
                                }

                                @Override
                                public void onWifiScansDisabled() {
                                    // called when Wi-Fi scans are disabled
                                }

                                @Override
                                public void onBluetoothDisabled() {
                                    // called when Bluetooth is disabled
                                }

                                @Override
                                public void onCellDisabled() {
                                    // called when Cell radios are switch off
                                }

                                @Override
                                public void onGnssLocationDisabled() {
                                    // called when GPS positioning is disabled
                                }

                                @Override
                                public void onNetworkLocationDisabled() {
                                    // called when network positioning is disabled
                                }

                                @Override
                                public void onServiceError(StatusListener.ServiceError serviceError) {
                                    // called on HERE service error
                                }

                                @Override
                                public void onPositioningError(PositioningError positioningError) {
                                    // called when positioning fails
                                }

                                @Override
                                public void onWifiIndoorPositioningNotAvailable() {
                                    // called when running on Android 9.0 (Pie) or newer
                                }
                            });

                    if (mHereLocation == null) {
                        Toast.makeText(MainActivity.this, "LocationDataSourceHERE.getInstance(): failed, exiting", Toast.LENGTH_LONG).show();
                        finish();
                    }
                    mPositioningManager.setDataSource(mHereLocation);
                    mPositioningManager.addListener(new WeakReference<PositioningManager.OnPositionChangedListener>(MainActivity.this));


                    // Create a custom marker image
                    com.here.android.mpa.common.Image myImage = new com.here.android.mpa.common.Image();
                    try {myImage.setImageResource(R.drawable.marker_round);
                    } catch (IOException e) {
                        finish();
                    }
                    initMarkers(myImage);

                    createPolygon();

                    mapFragment.getMapGesture().addOnGestureListener(new MapGesture.OnGestureListener() {
                        @Override
                        public void onPanStart() {
                        }

                        @Override
                        public void onPanEnd() {
                        }

                        @Override
                        public void onMultiFingerManipulationStart() {

                        }

                        @Override
                        public void onMultiFingerManipulationEnd() {

                        }

                        @Override
                        public boolean onMapObjectsSelected(List<ViewObject> list) {
                            return false;
                        }

                        @Override
                        public boolean onTapEvent(PointF pointF) {
                            return false;
                        }

                        @Override
                        public boolean onDoubleTapEvent(PointF pointF) {
                            return false;
                        }

                        @Override
                        public void onPinchLocked() {

                        }

                        @Override
                        public boolean onPinchZoomEvent(float v, PointF pointF) {
                            return false;
                        }

                        @Override
                        public void onRotateLocked() {

                        }

                        @Override
                        public boolean onRotateEvent(float v) {
                            return false;
                        }

                        @Override
                        public boolean onTiltEvent(float v) {
                            return false;
                        }

                        @Override
                        public boolean onLongPressEvent(PointF pointF) {
                            return false;
                        }

                        @Override
                        public void onLongPressRelease() {

                        }

                        @Override
                        public boolean onTwoFingerTapEvent(PointF pointF) {
                            return false;
                        }
                    }, 0, false);
                    if (mPositioningManager.start(PositioningManager.LocationMethod.GPS_NETWORK_INDOOR)) {
                        mapFragment.getPositionIndicator().setVisible(true);
                    } else {
                        Toast.makeText(MainActivity.this, "PositioningManager.start: failed, exiting", Toast.LENGTH_LONG).show();
                        finish();
                    }

                }
                else {
                    Log.d("errorTag",error.name());
                    onDestroy();

                }
            }
        });

    }
}

回答1:


MapEngine must be initialized before it can be used. It should be done in the main thread. MapEngine is automatically initialized for your application by using AndroidXMapFragment. AndroidXMapFragment is a fragment class applications can use as a UI module in an activity for map display. However, if your application does not use AndroidXMapFragment classes, then the application should initialize the MapEngine directly before using any HERE APIs. You can do this by calling MapEngine.init(ApplicationContext, OnEngineInitListener) as shown below:

MapEngine mapEngine = MapEngine.getInstance(); ApplicationContext appContext = new ApplicationContext(context); mapEngine.init(appContext, new OnEngineInitListener() {   @Override   public void onEngineInitializationCompleted(Error error) {
    if (error == OnEngineInitListener.Error.NONE) {
      // Post initialization code goes here
    } else {
      // handle factory initialization failure
    }   } });


来源:https://stackoverflow.com/questions/53691830/map-download-by-specifying-a-bounding-box-implementation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!