【发布时间】:2020-01-23 17:11:00
【问题描述】:
我是 HereMap 的新手。我花了一些时间,但我仍然看不出这有什么问题。我用以下代码初始化了 HereMap。
MapFragment gmMapFragment = ...
gmMapFragment.init(Common.main_activity, new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == OnEngineInitListener.Error.NONE) {
gmMapFragment.getMapGesture().addOnGestureListener(gestureListener);
gmMap = gmMapFragment.getMap();
// Set the map center to the Vancouver region (no animation)
gmMap.setCenter(new GeoCoordinate(tw.latitude, tw.longitude, 0.0),
Map.Animation.NONE);
// Set the zoom level to the average between min and max
gmMap.setZoomLevel((gmMap.getMaxZoomLevel() + gmMap.getMinZoomLevel()) / 2);
gmMap.setProjectionMode(Map.Projection.MERCATOR);
gmMap.getPositionIndicator().setVisible(true);
gmPositioningManager = PositioningManager.getInstance();
gmPositioningManager.addListener(new WeakReference<>(positionListener));
gmPositioningManager.start(PositioningManager.LocationMethod.GPS_NETWORK);
} else {
System.out.println("ERROR: Cannot initialize Map Fragment,"
+ error.name() + "," + error.getDetails() + "," +error.getStackTrace());
}
}
});
我的 positionListener 声明如下:
private PositioningManager.OnPositionChangedListener positionListener = new
PositioningManager.OnPositionChangedListener() {
public void onPositionUpdated(PositioningManager.LocationMethod method,
GeoPosition position, boolean isMapMatched) {
// set the center only when the app is in the foreground
// to reduce CPU consumption
if (!paused) {
gmGeoCoordinate = position.getCoordinate();
}
}
我很确定地图已经初始化成功了,gmMapFragment.init(..),因为我可以在屏幕上看到地图。如果我使用从谷歌地图工具获得的坐标,我什至可以在此处的地图上绘制路线。但我确实需要这里的地图来为我获取当前位置,因为我们需要逐个进行 3D。
但onPositionUpdated(...) 从未被调用。我需要做任何其他事情才能让它工作吗?我认为将侦听器添加到 PositionManager 就足够了。
【问题讨论】:
-
试试 -
gmPositioningManager.addListener(new WeakReference<PositioningManager.OnPositionChangedListener>(positionListener)); -
您可以尝试收听“OnPositionChangedListener#onPositionFixChanged(LocationMethod 方法,LocationStatus 状态)”来查看是否有修复。另外,您可以检查'gmPositioningManager.start'的返回值,如果有问题,它可以返回false。您也可以使用“getLocationStatus(LocationMethod 方法)”手动检查“LocationStatus”。此页面可能对您有所帮助:Basic Positioning