高德地图sdk的MyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW)方法设置无效,HarmonyOS 鸿蒙Next每次定位变更之后地图都会随着移动,把定位点放在中心。

发布于 1周前 作者 songsunli 来自 鸿蒙OS

高德地图sdk的MyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW)方法设置无效,HarmonyOS 鸿蒙Next每次定位变更之后地图都会随着移动,把定位点放在中心。

import { AMap,
LocationSource,
MapsInitializer, MapView, MapViewComponent, MapViewManager,
MyLocationStyle,
OnLocationChangedListener} from ‘@amap/amap_lbs_map3d’;
import { UI } from "…/…/common/UI"
import { HotDto } from ‘./entity/HotDto’;
import { BusinessError } from ‘@kit.BasicServicesKit’;
import { geoLocationManager } from ‘@kit.LocationKit’;
import {
AMapLocationManagerImpl,
AMapLocationOption, AMapLocationReGeocodeLanguage,
AMapLocationType,
IAMapLocationListener } from ‘@amap/amap_lbs_location’;
import { PermissionUtil } from ‘@pura/harmony-utils’;
import { Permissions } from ‘@kit.AbilityKit’;
import { ProgressUtil, showToast } from ‘utils’;
import { MainListComponent } from ‘./MainListComponent’;


@ComponentV2
export struct MainMapComponent {
private mapView?: MapView;
private aMap?: AMap;
private locationManger?: AMapLocationManagerImpl;
private mapLocationListener?:OnLocationChangedListener
@Consumer() isInHistoryMode: boolean = false
@Consumer() datas: Array<HotDto> = []
@Consumer() datas1: Array<HotDto> = []
@Consumer() datas2: Array<HotDto> = []
@Consumer() datas3: Array<HotDto> = []
@Consumer() datas4: Array<HotDto> = []
@Local listData: Array<HotDto> = []

onDidBuild(): void {
MapViewManager.getInstance().registerMapViewCreatedCallback((mapview?: MapView, mapViewName?: string) => {
if (!mapview) {
return;
}
this.mapView = mapview;
this.mapView.onCreate();
this.mapView.getMapAsync((map) => {
this.aMap = map;
this.setMapUi();
this.setMapLocation();
})
})

}

build() {
Column() {
MapViewComponent()
.width(UI.MATCH_PARENT)
.height(UI.MATCH_PARENT)
.backgroundColor(Color.Red)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}


setMapUi(){
this.aMap?.getUiSettings()?.setScaleControlsEnabled(true)
this.aMap?.getUiSettings()?.setRotateGesturesEnabled(false)

}

setMapLocation(){
let p: Permissions[] = [‘ohos.permission.APPROXIMATELY_LOCATION’,‘ohos.permission.LOCATION’]; //相机

PermissionUtil.requestPermissionsEasy§.then((result) => {
if (!result) {
ProgressUtil.info(‘您已拒绝精确定位权限,当前无法在地图上显示您的准确位置,请您到设置页面开启定位权限。’);
this.locationManger?.stopUpdatingLocation()
this.locationManger?.startUpdatingLocation()
}else {
this.locationManger?.stopUpdatingLocation()
this.locationManger?.startUpdatingLocation()
}
})


let options: AMapLocationOption = {
priority: geoLocationManager.LocationRequestPriority.FIRST_FIX, //定位优先配置选项
scenario: geoLocationManager.LocationRequestScenario.UNSET, //定位场景设置
timeInterval: 5, //定位时间间隔
distanceInterval: 0, //位置报告距离间隔
maxAccuracy:100000,
allowsBackgroundLocationUpdates: false, //是否允许后台定位
locatingWithReGeocode: true, //定位是否返回逆地理信息
reGeocodeLanguage: AMapLocationReGeocodeLanguage.Chinese, //逆地址语言类型
isOffset: true //是否加偏
}

let listener: IAMapLocationListener = {
onLocationChanged: (location) => {
try {
this.mapLocationListener?.onLocationChanged(location);
} catch (e) {
console.info((e as BusinessError).message);
showToast(e.message);
}
}, onLocationError: (error) => {
showToast(error.errorMsg);
console.info(error.errorMsg);
}
};

this.locationManger = new AMapLocationManagerImpl(getContext());
this.locationManger?.setLocationListener(AMapLocationType.Updating, listener)
this.locationManger?.setLocationOption(AMapLocationType.Updating, options)
this.locationManger?.startUpdatingLocation()



let locationStyle: MyLocationStyle = new MyLocationStyle();
locationStyle.showMyLocation(true);
locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);
this.aMap?.setMyLocationStyle(locationStyle);

this.aMap?.setLocationSource(this);
this.aMap?.setMyLocationEnabled(true);

}
activate(listener: OnLocationChangedListener): void {
this.mapLocationListener = listener
}
deactivate(): void {
}
}

6 回复
试试这个呢:

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。

myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。

1、检查下代码中是否在定位后有调用moveCamera()或类似方法,这会导致地图中心点移动到定位点。确保没有在定位后调用任何移动地图中心点的代码。

2、可能定位模式设置错误:确认您没有同时设置其他会自动移动地图的定位模式,如LOCATION_TYPE_FOLLOW或LOCATION_TYPE_LOCATION_ROTATE。确认定位模式设置,确保仅使用了LOCATION_TYPE_SHOW。

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

我都检查了,没有这些情况,只设置了LOCATION_TYPE_SHOW,也没有移动镜头,但是这个的确是不好使。高德开放平台工单一次只能提交一个,已提交的工单没有结束不能提交新工单,点提交按钮提示操作频繁。

小蓝点不同模式触发deactivate条件不同,MyLocationStyle.LOCATION_TYPE_SHOW模式是只定位一次,需要实现下deactivate方法回调,处理下停止定位的情况。看下实现deactivate后是否还存在该问题

针对您提到的高德地图SDK在HarmonyOS鸿蒙Next平台上MyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW)方法设置无效的问题,这通常是由于SDK与操作系统之间的兼容性问题或配置错误导致的。

首先,请确保您使用的高德地图SDK版本支持HarmonyOS系统,并且已经正确集成了所有必要的依赖和权限。此外,MyLocationStyle.LOCATION_TYPE_SHOW用于设置定位点的显示模式,如果该设置无效,可能是SDK内部逻辑在处理HarmonyOS平台时有所不同。

在HarmonyOS上,地图的自动跟随定位点功能可能由系统或SDK的默认行为控制。您可以尝试以下方法进行调整:

  1. 检查并更新高德地图SDK到最新版本,以确保对HarmonyOS的最佳支持。
  2. 查看SDK文档,了解是否有针对HarmonyOS平台的特定配置或方法调用。
  3. 尝试通过其他方式控制地图视角,例如手动设置地图中心点和缩放级别,以抵消自动跟随的效果。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部