2017-02-22 30 views
2

У меня есть собственный локальный сервер плитки на карте Z/X/Y и вы хотите использовать его в качестве фона карты в приложении QML. Если посмотреть на пример кода, то это выглядит следующим образом: -QT QML QtLocation map plugin

Plugin { 
    id: osmPlugin 
    name: "osm" 
} 

Поэтому мне нужно написать свой собственный плагин. Но документация кажется разреженной, и я не могу найти исходный код для версии osm или инструкций по установке.

Это относительно легко сделать, или это можно сделать без написания нового плагина?

ответ

1

Если документация не покрывает что-либо или не достаточно подробно, всегда полезно помнить, что Qt's source общедоступен.

Например OSM плагин here

Woboq code browser также очень приятно, что, если вы знаете имя класса или файла вы looking for

+0

Спасибо, но, как и для вторая часть моего вопроса есть альтернатива, так как кажется, что большая часть работы особенно не содержит комментариев в коде OSM. –

1

Хорошо я придумал, как сделать это без написания плагина.

Плагин OSM использует тайник для извлечения фрагментов. URL-адрес установлен с параметром плагина osm.mapping.custom.host, устанавливая это на локальный url, позволяет мне использовать свои собственные плитки, если они соответствуют структуре osm.

2

Вы можете установить osm.mapping.host так:

Plugin { 
     id: osmPlugin 
     name: "osm" 


     PluginParameter { name: "osm.mapping.host"; value: "https://tile.openstreetmap.org/" } 
     PluginParameter { name: "osm.geocoding.host"; value: "https://nominatim.openstreetmap.org" } 
     PluginParameter { name: "osm.routing.host"; value: "https://router.project-osrm.org/viaroute" } 
     PluginParameter { name: "osm.places.host"; value: "https://nominatim.openstreetmap.org/search" } 
     PluginParameter { name: "osm.mapping.copyright"; value: "" } 
     PluginParameter { name: "osm.mapping.highdpi_tiles"; value: true } 
    } 

Но не забудьте установить пользовательский тип карты, используя следующий код:

Map { 
     id: map 
     height: parent.width 
     width: parent.width 
     plugin: osmPlugin 

     Component.onCompleted: { 
      for(var i_type in supportedMapTypes) { 
       if(supportedMapTypes[i_type].name.localeCompare("Custom URL Map") === 0) { 
        activeMapType = supportedMapTypes[i_type] 
       } 
      } 
     } 
    }