QML 地图修改插件源码(五),Map添加自定义地图类型,并动态修改地图类型

15 篇文章 35 订阅

       QML的地图Map中提供了属性activeMapType : MapType用于设置当前地图的类型,以OSM地图插件为例,OSM地图提供了多种地图类型,下面介绍如何修改OSM插件的源码添加需要的地图类型,并在Map动态的更换地图类型,Demo效果如图:

修改插件源码方法如下(以5.15.2为例):

1、使用QtCreator打开OSM地图插件工程源码位置:

F:\Qt\5.15.2\Src\qtlocation\src\plugins\geoservices\osm.pro

2、打开文件 "qgeotiledmappingmanagerengineosm",可以搜索已有的注释标签:"/* QGeoTileProviderOsms setup */"  定位到文件中位置,此处代码功能为向osm插件中注册可用的地图类型,添加自定义的地图类型:

 /* QGeoTileProviderOsms setup */
    m_providers.push_back( new QGeoTileProviderOsm( nmCached,
            QGeoMapType(QGeoMapType::StreetMap, tr("Street Map"), tr("Street map view in daylight mode"), false, false, 1, pluginName, cameraCaps),
            providers_street, cameraCaps ));

//下方三行为新添加
    m_providers.push_back( new QGeoTileProviderOsm( nmCached,
            QGeoMapType(QGeoMapType::CustomMap, tr("Night Blue Map"), tr("My Night Blue view"), false, false, 2, pluginName, cameraCaps),
            providers_hiking, cameraCaps ));
    m_providers.push_back( new QGeoTileProviderOsm( nmCached,
            QGeoMapType(QGeoMapType::CustomMap, tr("Image Map"), tr("My Image view"), false, false, 3, pluginName, cameraCaps),
            providers_hiking, cameraCaps ));
    m_providers.push_back( new QGeoTileProviderOsm( nmCached,
            QGeoMapType(QGeoMapType::CustomMap, tr("White Street Map"), tr("My Street view"), false, false, 4, pluginName, cameraCaps),
            providers_hiking, cameraCaps ));


//    m_providers.push_back( new QGeoTileProviderOsm( nmCached,
//            QGeoMapType(QGeoMapType::SatelliteMapDay, tr("Satellite Map"), tr("Satellite map view in 
……省略其中代码
//            QGeoMapType(QGeoMapType::PedestrianMap, tr("Hiking Map"), tr("Hiking map view"), false, false, 7, pluginName, cameraCaps),
//            providers_hiking, cameraCaps ));

3、重点参数说明:

QGeoMapType的构造函数:

style:预设的地图类型,如果是自定义的地图,可以传入QGeoMapType::CustomMap,可重复

name:地图名称

description:地图详细介绍

mobile:是否是移动设备中显示

night:是否是黑夜图

mapId:地图标识ID序号。该属性用于地图组件查找瓦片时瓦片图片的名称标识(标识=mapId-1),例如mapId为2时,查找的地图瓦片名为osm_100-l-1-4-11-7。在修改osm插件时(即上方代码),mapId需要顺序递增,此处需要特别注意

pluginName:插件名称

cameraCapabilities:相机属性

4、重新编译该osm工程,编译好的插件位于Qt安装盘符根目录下的plugins\geoservices路径下,将生成的插件文件复制到Qt安装目录中的插件目录(F:\Qt\5.15.2\msvc2019\plugins\geoservices\)替换原插件即可。

5、QML中设置地图类型和动态修改类型:

    Map {
        id:myMap
        anchors.fill: parent
        plugin: mapPlugin
        center: QtPositioning.coordinate(25.1214, 102.65)
        zoomLevel: 4
        copyrightsVisible: false
        MouseArea{
            anchors.fill: parent
            property int index: 0
            onClicked: {
                index++
                if(index>2)
                    index = 0
                myMap.activeMapType = myMap.supportedMapTypes[index]
            }
        }
        Component.onCompleted: {
            for(var i in myMap.supportedMapTypes)
            console.log("SupportedMapType:",i,myMap.supportedMapTypes[i].name)
        }
    }

输出结果:

qml: SupportedMapType: 0 Street Map

qml: SupportedMapType: 1 Night Blue Map

qml: SupportedMapType: 2 Image Map

qml: SupportedMapType: 3 White Street Map

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵喵叫的猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值