简体   繁体   中英

Android: Here maps sdk's map is showing not accurate coordinates

I am using the HERE Maps Lite SDK for Android as a library in my project. I want to show MapView, and add overlays of all shelters I have in my database, in their specific coordinates. The map works well, but the shown coordinates are not accurate. I tried to geocode the coordinates in lat-long website, and they are correct, but in the map they are shown right to their real location.

My code:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shelters_map);
        mapView = findViewById(R.id.mapview);
        mapView.onCreate(savedInstanceState);
        ActivityCompat.requestPermissions(SheltersMapActivity.this, new String[] {
                Manifest.permission.ACCESS_FINE_LOCATION}, 123);
        if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            // Permission is not granted
            Toast.makeText(getApplicationContext(), "אנא אפשר גישה לשירותי מיקום", Toast.LENGTH_SHORT).show();
            ActivityCompat.requestPermissions(this,
                    new String[]{ACCESS_FINE_LOCATION},
                    1);
        } else // premission is granted
        {
            GPStracker g = new GPStracker(getApplicationContext());
            userLocation = g.getLocation();
        }
        loadMapScene();
        addSheltersOverlay();
        // loadMapScene();


    }

    private void loadMapScene() {
        // Load a scene from the SDK to render the map with a map style.
        mapView.getMapScene().loadScene(MapStyle.NORMAL_DAY, new MapScene.LoadSceneCallback() {
            @Override
            public void onLoadScene(@Nullable MapScene.ErrorCode errorCode) {
                if (errorCode == null) {
                    mapView.getCamera().setTarget(new GeoCoordinates(userLocation.getLatitude(),
                            userLocation.getLongitude()));
                    mapView.getCamera().setZoomLevel(15);
                } else {
                    Log.d("data1", "onLoadScene failed: " + errorCode.toString());
                }
            }
        });
    }

    private void addSheltersOverlay() {
        db = new DatabaseHandler(this);
        ArrayList<Shelter> places = this.db.getAllPlaces();
        Shelter userLocationPlace = new Shelter("המיקום שלך", "", userLocation, null, 0, "");
        places.add(userLocationPlace);
        int size = places.size();
        for(int i = 0; i < size; i++) {
            TextView textView = new TextView(this);
            textView.setTextColor(Color.parseColor("#FFFFFF"));
            textView.setText(places.get(i).getName());

            LinearLayout linearLayout = new LinearLayout(this);
            if (places.get(i) instanceof Basement)
                linearLayout.setBackgroundColor(Color.BLACK);
            else if (places.get(i) instanceof Stairs)
                linearLayout.setBackgroundColor(Color.GREEN);
            else
                linearLayout.setBackgroundColor(Color.BLUE);
            linearLayout.setPadding(10, 10, 10, 10);
            linearLayout.addView(textView);

            GeoCoordinates geoCoordinates = new GeoCoordinates(places.get(i).getLocation().getLatitude(),
                    places.get(i).getLocation().getLongitude());
            MapOverlay<LinearLayout> mapOverlay = new MapOverlay<>(linearLayout, geoCoordinates);

            mapView.addMapOverlay(mapOverlay);
        }
    }

The shown map:

地图截图 .

I can see the streets names in the shown map itself, and I see that it is not the accurate point. Anybody help?

From the code it looks correct, but I cannot see the location vs. the expected location. By default, MapOverlays are drawn centered on the coordinates. You can set an anchor point to move the overlay in relation to the coordinates. This could help if there is always an offset between the coordinates in your database and the location on the map.

Maybe, can you try to render a small MapCircle item onto the map at the expected location? Then you can more easily see where that location lies on the map. You can compare the results with https://www.latlong.net/ .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM