这里SDK在地图上标记位置
Here SDK mark position on map
我在地图上显示了用户的位置,但我想做的是标记相同的位置
在 onCreate 中我得到了用户的位置:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get a MapView instance from layout
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
latitud=location.getLatitude();
longitud=location.getLongitude();
mapView = findViewById(R.id.map_view);
mapView.onCreate(savedInstanceState);
handleAndroidPermissions();
}
然后我想在加载地图时做的是显示它并打上标记,我是这样做的:
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) {
mapObjectsExample = new MapObjectsExample(mapView);
GeoCoordinates geoCoordinates=new GeoCoordinates( latitud,longitud);
MapImage mapImage = MapImageFactory.fromResource(getApplicationContext().getResources(), R.drawable.here_car);
MapMarker mapMarker = new MapMarker( geoCoordinates, mapImage);
mapView.getMapScene().addMapMarker(mapMarker);
mapView.getCamera().setTarget(new GeoCoordinates( latitud,longitud));
mapView.getCamera().setZoomLevel(15);
} else {
Log.d(TAG, "onLoadScene failed: " + errorCode.toString());
}
}
});
}
但我得到:
MapMarker(long, java.lang.Object)' has protected access in
'com.here.sdk.mapviewlite.MapMarker'
问题出在这句话:
MapMarker mapMarker = new MapMarker( geoCoordinates, mapImage);
在 lite Product Variant 中,我们不能将图像对象直接传递给 MapMarker constructor.Below 是我们如何在 lite Variant 中使用图像标记的代码片段。 github 示例中也包含相同内容。
Github link: https://github.com/heremaps/here-sdk-examples/tree/master/examples/latest/lite/android/MapMarkerLite
MapImage mapImage = MapImageFactory.fromResource(context.getResources(), R.drawable.here_car);
MapMarker mapMarker = new MapMarker(geoCoordinates);
mapMarker.addImage(mapImage, new MapMarkerImageStyle());
mapView.getMapScene().addMapMarker(mapMarker);
我在地图上显示了用户的位置,但我想做的是标记相同的位置
在 onCreate 中我得到了用户的位置:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get a MapView instance from layout
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
latitud=location.getLatitude();
longitud=location.getLongitude();
mapView = findViewById(R.id.map_view);
mapView.onCreate(savedInstanceState);
handleAndroidPermissions();
}
然后我想在加载地图时做的是显示它并打上标记,我是这样做的:
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) {
mapObjectsExample = new MapObjectsExample(mapView);
GeoCoordinates geoCoordinates=new GeoCoordinates( latitud,longitud);
MapImage mapImage = MapImageFactory.fromResource(getApplicationContext().getResources(), R.drawable.here_car);
MapMarker mapMarker = new MapMarker( geoCoordinates, mapImage);
mapView.getMapScene().addMapMarker(mapMarker);
mapView.getCamera().setTarget(new GeoCoordinates( latitud,longitud));
mapView.getCamera().setZoomLevel(15);
} else {
Log.d(TAG, "onLoadScene failed: " + errorCode.toString());
}
}
});
}
但我得到:
MapMarker(long, java.lang.Object)' has protected access in 'com.here.sdk.mapviewlite.MapMarker'
问题出在这句话:
MapMarker mapMarker = new MapMarker( geoCoordinates, mapImage);
在 lite Product Variant 中,我们不能将图像对象直接传递给 MapMarker constructor.Below 是我们如何在 lite Variant 中使用图像标记的代码片段。 github 示例中也包含相同内容。
Github link: https://github.com/heremaps/here-sdk-examples/tree/master/examples/latest/lite/android/MapMarkerLite
MapImage mapImage = MapImageFactory.fromResource(context.getResources(), R.drawable.here_car);
MapMarker mapMarker = new MapMarker(geoCoordinates);
mapMarker.addImage(mapImage, new MapMarkerImageStyle());
mapView.getMapScene().addMapMarker(mapMarker);