{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508817052,"data":{"id":71713303,"title":"2.13 常见问题","slug":"bgn823","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

地图样式问题

自定义地图样式替换

mapassets

style_4_14_1583396108.data\b来举例说明,style_4表示样式名称,14表示版本,1583396108表示时间戳;

1)时间戳的意义:优先显示时间戳更大的样式。引擎有个在线下载功能,如果下载到更新的样式文件,即时间戳更大的话,会优先显示时间戳更大的。

2)样式下载后的路径放到mapcache/vmap4res(引擎的样式缓存目录);

新增样式style_4_14_1583396108.data

注:如果styleiconlist原来就有一个,那么直接换成这个样式文件名,个数不用加1;

修改样式style_4_14_1583396108.data

比例尺问题

如何修改地图比例尺

com.autonavi.gbl.map.OperatorPosture.setZoomLevel\t(float  scale) 

说明:函数详情,请复制函数名称到在线API搜索

多屏、黑屏问题

如何实现2个地图方案

创建2个地图,可以一个是主屏(engineId=1),一个是拓展屏(engineId=3).

两个屏是基于enginId创建mapview,两个地图是基于mapview进行的业务操作,相互不影响。

创建启动地图的时序流程如下:



详情见:创建多个渲染设备

常见黑屏问题分析

从分析经验来看,黑屏问题原因主要有:

全览问题

\"image.png\"

关于PreviewParam参数leftOfMap和topOfMap的问题

如全览参数字段场景图所示。参数中的偏置信息(leftOfMap,topOfMap)是表示相对现有屏幕宽高的偏置。所以全览时,会将屏幕偏置转化为[(屏幕宽 + leftOfMap )/2,(屏幕高 + topOfMap)/2], 再调用setMapLeftTop设置视口锚点。

如,(leftOfMap,topOfMap)为(0,0)时,地图中心会显示在屏幕中心.


地图不同场景(搜索/路线/组队)的全览/预览的效果如何实现,有什么区别?

全览是把所有点缩放到某个矩形框范围内,所以各个场景下没有区别

全览接口:

void com.autonavi.gbl.map.MapView.showPreview\t(\tPreviewParam \tpreviewParam,\n                                                boolean \tbAnimation,\n                                                int \ttime,\n                                                int \tanimationId \n                                                )\t

搜索结果怎么做到第一个搜索位于整体搜索结果图层的中心,以便看起来分布均匀

全览接口目前只提供所有点缩放到,某个范围(矩形框)内,并没有智能均匀分布功能。需要HMI自行使用算法,计算出适合产品效果的全览。

地图中心问题

地图中心如何设置,如何设置持续时间?

设置地图中心提供了3种方式如下,持续时间外部不可设置,带动画方式设置地图中心可以理解为带持续时间,只不过这个时间是内聚的,外部不可设置。

void com.autonavi.gbl.map.OperatorPosture.setMapCenterByLonLat(Coord3DDouble mapCenter)
void com.autonavi.gbl.map.OperatorPosture.setMapCenter(double lon, double lat, double z, boolean bAnimation, boolean bSync)


void com.autonavi.gbl.map.OperatorPosture.setMapCenter(double screenX, double screenY)

详情见:地图中心

渲染开关问题

关闭简易三维方法

boolean com.autonavi.gbl.map.MapView.setMapViewStatesOperator(@MapViewStateType.MapViewStateType1 int type, int value)
/**\n * @brief        设置视图状态开关\n *               万能接口,内部根据MapViewStateType,将value转换成特定类型的指针\n * @param[in]    type             需要设置的类型\n * @param[in]    value            设置的参数,value值为1或0,1表示对应状态开,0表示关\n * @param[in]    bSync            同步或异步,true为同步\n * @return       bool             否则返回false(例如type无法识别)\n */\nvirtual bool SetMapViewStatesOperator(MapViewStateType type, int32_t value, bool bSync) = 0;


详细见:简易三维

路网开关设置方法

void com.autonavi.gbl.map.OperatorBusiness.setMapViewState(@MapViewStateType.MapViewStateType1 int type, boolean enable)


/**\n * @brief        设置道路网\n * @param[in]    isShow           是否展示\n * @note         thread:multi\n */\nvirtual void ShowMapRoad(bool isShow) = 0;

详情见:路网控制

字体显示异常

切换字体的不同rom版本,重启导航出现图面字体显示异常。

刷新rom版本,mapcache目录下 缓存下来的字体(就是那几个font文件)是过时的,用起来就会出现问题,它们需要被清除一次才行。

\"image.png\"

如何显示POI

绘制条件,如下1)2)3)任一满足即可;

1) 开启标注MAP_BUSINESSDATA_FORCE_NAVI_LABEL

void com.autonavi.gbl.map.MapView.setMapNeedForceDrawLabel\t(int refreshRate\t)\t
/**\n * @brief        设置导航下强制刷新标注\n * @param[in]    refreshRate      刷新标注的间隔帧数阈值(最大值)\n */\nvirtual void SetMapNeedForceDrawLabel(int32_t refreshRate) = 0;


2)地图状态显示类型设置为MAP_VIEWSTATE_IS_SHOW_POI

void com.autonavi.gbl.map.OperatorBusiness.setLabelVisable(boolean enable)
void com.autonavi.gbl.map.OperatorBusiness.setMapViewState(@MapViewStateType.MapViewStateType1 int type, boolean enable)

说明:函数详情,请复制函数名称到在线API搜索


/**\n * @brief        设置视图状态开关\n *               万能接口,内部根据MapViewStateType,将value转换成特定类型的指针\n * @param[in]    type             需要设置的类型\n * @param[in]    value            设置的参数,value值为1或0,1表示对应状态开,0表示关\n * @param[in]    bSync            同步或异步,true为同步\n * @return       bool             否则返回false(例如type无法识别)\n */\nvirtual bool SetMapViewStatesOperator(MapViewStateType type, int32_t value, bool bSync) = 0;


详情见:图面POI显隐



3)图面未发生变化(地图中心、比例尺)稳定15帧;

如何让POI扎点在指定范围区域显示

可通过void com.autonavi.gbl.map.MapView.setMaplefttop方式,将视口锚点显示在屏幕指定区域;


boolean com.autonavi.gbl.map.OperatorBusiness.selectPoi可以获取当前窗口的poi列表吗

不可以。

这个接口并不能获取一定半径区域内的POI信息。引擎内部的逻辑只会回调一个选中的POI,半径只是查找范围。如果地图中心附近有POI,那这个半径就不生效了。如果中心点附近没有POI,就会用半径查找周围POI。

坐标转换问题

经纬度转屏幕坐标无效

在有效的屏幕区域内,经纬度转屏幕坐标是唯一的。但若屏幕区域无效,输出的屏幕坐标不唯一,为无效值。

例子:输入的lon: 121.339785, lat: 31.196056 输出屏幕坐标:screenx=-11389.275391,screeny=4197.976562

解答:输入的经纬度必须在实际有效的屏幕范围内,输出屏幕坐标为负值即为无效值!

如何获取当前地图中心位置的经纬度信息

可通过 operatorPosture.getMapCenterByLonLat() 获取当时地图的中心位置经纬度。

常见的几种坐标转换case如下,其中地图坐标即为p20坐标

屏幕坐标<->经纬度坐标

说明:函数详情,请复制函数名称到在线API搜索

地图(p20)坐标<->经纬度坐标

说明:函数详情,请复制函数名称到在线API搜索

地图(p20)坐标<->屏幕坐标

说明:函数详情,请复制函数名称到在线API搜索

","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:01:57","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":160,"collectCount":0,"estimateDate":12,"docStatus":0,"permissions":true,"overView":false}}