2017-10-09 130 views
0

我正在使用qml應用程序處理我的pyqt5,並且想要將地圖網格添加到我的地圖。但我有點不知道從哪裏開始。那麼,甚至有可能做出一個,如果是的話,是否有一個小例子或類似的東西來幫助我開始研究?這將是我的map.qml是否可以在qml中創建地圖網格?

import QtQuick 2.0 
import QtQuick.Controls 2.2 
import QtQuick.Window 2.0 
import QtLocation 5.9 
import QtPositioning 5.5 


Item { 
id: myItem 

Plugin { 
    id: mapPlugin 
    name: "mapboxgl" 
} 

Map { 
    id: map 
    objectName: "mapboxgl" 
    property double lat: 47.368649 
    property double lon: 8.5391825 
    visible: true 
    anchors.fill: parent 
    plugin: mapPlugin 
    center { 
     latitude: lat 
     longitude: lon 
    } 
    zoomLevel: 14 

    ListView { 
     height: 1 
     model: map 
     delegate: Text { 
      text: "Latitude: " + (center.latitude).toFixed(3) + " Longitude: " + (center.longitude).toFixed(3) 
      } 
     } 

     MouseArea{ 
      id: mouseArea 
      property var positionRoot: map.toCoordinate(Qt.point(mouseX, mouseY)) 
      anchors.fill: parent 
      onClicked: { 
        var component = Qt.createComponent("addAttribute.qml") 
        if (component.status === Component.Ready) { 
        var dialog = component.createObject(parent,{popupType: 1}) 
        dialog.sqlPosition = positionRoot 
        dialog.show() 
       } 
      } 
     } 

    MapQuickItem { 
     id: marker 
     objectName: "marker" 
     visible: false 
     anchorPoint.x: 0.5 * image.width 
     anchorPoint.y: image.height 
     sourceItem: Image { 
      id: image 
      source: "icons/markerIcon.png" 
      MouseArea{ 
       anchors.fill: parent 
       onClicked: { 
        ToolTip.timeout = 2000 
        ToolTip.visible = true 
        ToolTip.text = qsTr("Coordinates: %1, %2").arg(marker.coordinate.latitude).arg(marker.coordinate.longitude) 
       } 
      } 
     } 
    } 

    MapItemView { 
     model: markerModel 
     delegate: MapQuickItem{ 
      anchorPoint: Qt.point(2.5, 2.5) 
      coordinate: QtPositioning.coordinate(markerPosition.x, markerPosition.y) 
      zoomLevel: 0 
      sourceItem: Column{ 
        Image { 
         id: imag 
         source: "icons/markerIcon.png" 
         MouseArea{ 
          anchors.fill: parent 
          onClicked: { 

           ToolTip.timeout = 2000 
           ToolTip.visible = true 
           ToolTip.text = qsTr("Coordinates: %1, %2".arg(markerPosition.x).arg(markerPosition.y)) 
          } 
         } 
        } 

        Text { 
         text: markerTitle 
         font.bold: true 
        } 
      } 
     } 
    } 
    MapParameter { 
    type: "source" 
    property var name: "coordinates" 
    property var sourceType: "geojson" 
    property var data: '{ "type": "FeatureCollection", "features": \ 
     [{ "type": "Feature", "properties": {}, "geometry": { \ 
     "type": "LineString", "coordinates": [[ 8.541484, \ 
     47.366850 ], [8.542171, 47.370018],[8.545561, 47.369233]]}}]}' 
    } 

    MapParameter { 
     type: "layer" 
     property var name: "layer" 
     property var layerType: "line" 
     property var source: "coordinates" 
     property var before: "road-label-small" 
    } 

    MapParameter { 
     objectName: "paint" 
     type: "paint" 
     property var layer: "layer" 
     property var lineColor: "black" 
     property var lineWidth: 8.0 
    } 

    MapParameter { 
     type: "layout" 
     property var layer: "layer" 
     property var lineJoin: "round" 
     property var lineCap: "round" 
    } 
} 
} 

該網格可能看起來像這樣。 map grid

+0

答案是:或許是肯定的。要刪除可能,我們需要更多的信息。你能否提供一些*你已經*的代碼,並且更詳細地解釋你喜歡什麼樣的*地圖網格?也許你可以添加一些圖片來說明它現在的樣子,以及它應該如何看待。 (*另外還有一個更詳細的功能描述*) – derM

+0

我已經添加了我的'qml'代碼以及網格如何顯示的圖像。目前我沒有電網,因爲我不知道如何製作電網。這就是爲什麼我的網格沒有任何圖像。 – Blinxen

回答

0

畫網格,使用Canvas如下圖所示

import QtQuick 2.0 
import QtQuick.Window 2.0 
import QtLocation 5.5 
import QtPositioning 5.5 

Window { 
    visible: true 
    title: "Python OSM" 
    width: 640 
    height: 480 
    Map { 
     id: map 
     anchors.fill: parent 
     plugin: Plugin { 
      name: "osm" 
     } 
     center: QtPositioning.coordinate(-12.0464, -77.0428) 
     zoomLevel: 14 
    } 
    Canvas { 
     id: root 
     anchors.fill : parent 
     property int wgrid: 20 
     onPaint: { 
      var ctx = getContext("2d") 
      ctx.lineWidth = 1 
      ctx.strokeStyle = "black" 
      ctx.beginPath() 
      var nrows = height/wgrid; 
      for(var i=0; i < nrows+1; i++){ 
       ctx.moveTo(0, wgrid*i); 
       ctx.lineTo(width, wgrid*i); 
      } 

      var ncols = width/wgrid 
      for(var j=0; j < ncols+1; j++){ 
       ctx.moveTo(wgrid*j, 0); 
       ctx.lineTo(wgrid*j, height); 
      } 
      ctx.closePath() 
      ctx.stroke() 
     } 
    } 
} 

enter image description here

+0

謝謝!這幫助了我。 – Blinxen

+0

你可能會解釋你在'beginPath'之後做了什麼? – Blinxen

+0

他計算了行數,然後在'for'循環中,他首先跳到每行的開始,然後從那裏畫出行(到行的終點) – derM

相關問題