zoukankan      html  css  js  c++  java
  • Arcgis for qml

    以实现鼠标拖拽文本图层为例

    GitHub:ArcGIS拖拽文本

    作者:狐狸家的鱼

     目的是利用鼠标进行拖拽。

    实现两种模式,一种是屏幕上的拖拽,第二种是地图上图层的挪动。

    屏幕上的拖拽其实跟ArcGIS没有联系,用qml就能写,但是地图图层上的挪动,就需要考虑到ArcGIS 图层的问题了。

    鼠标拖拽都跟鼠标事件有关联,MouseEvent中的Drag()事件和onMousePressedAndHeld()以及onMouseReleased()事件。

     

    1.屏幕上的拖拽

    2.地图上图层的挪动

    1、屏幕上的拖拽

    为了方便,把两种方式写在了一个项目文件中。

    Text{
                id:tex;
                text: "我还可以再挪两步(●ˇ∀ˇ●)";
                font.pointSize: 15;
                color: "yellow";
                //font.bold: true;
                MouseArea{
                    id:dragArea;
                    anchors.fill: tex;
                    drag.target: tex;
                    acceptedButtons: Qt.RightButton;
                    drag.axis: Drag.XAndYAxis
                    drag.minimumX: 0
                    drag.maximumX: mapView.width - tex.width
                    drag.minimumY: 0
                    drag.maximumY: mapView.height - tex.height
                }
    
            }

    2、图层的拖拽

    这里是左键点击添加一个文本,然后用右键进行拖拽活动。

    因为地图上的左键按压时会挪动地图,所以选择右键拖拽文本。

    在ArcGIS中,MouseEvent中有个属性叫 button:int

     

    返回产生鼠标事件的按钮,经过打印可以得到左键=1中键=4右键=2。以此来判断鼠标的左右键。

    onMouseClicked: {//打印鼠标事件的按钮
                console.log("clicked:",mouse.button);
    }

    属性解释说明了,鼠标按下事件的按钮有左键、右键、中键,但是对于鼠标移动事件,返回值永远是Qt.NoButton。所以在地图上利用鼠标进行拖动可能不行,只能进行点击挪动。

    MapView {
            id:mapView;
            anchors.fill: parent
            // set focus to enable keyboard navigation
            focus: true
    
            Map {
                //BasemapTopographic {}
                BasemapImageryWithLabels {}
            }
            onMouseClicked: {
                console.log("clicked:",mouse.button);
                if(mouse.button === 1){//鼠标左键
                    textGraphic = ArcGISRuntimeEnvironment.createObject("Graphic");
                    textGraphic.geometry = mouse.mapPoint;
                    textGraphic.symbol = textSymbol;
                    addTextGraphicsOverlayer.graphics.append(textGraphic);
    
                }
            }
            onMousePressed: {//鼠标右键
                if(mouse.button === 2){
                    textGraphic.geometry = mouse.mapPoint;
                }
            }
            onMouseReleased: {
                if(mouse.button === 2){
                    textGraphic.geometry = mouse.mapPoint;
                }
            }
    
            GraphicsOverlay{
                id:addTextGraphicsOverlayer;
    
            }
            TextSymbol{
                id:textSymbol;
                size: 15;
                color: "yellow"
                text: "我可以在地图上走两步(。^▽^)"
            }
    }

    如有认识偏差和错误,还望指正,谢谢(づ ̄ 3 ̄)づ

  • 相关阅读:
    PHP学习笔记
    $POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
    APACHE支持.htaccess以及 No input file specified解决方案
    PHP常用函数总结
    PHP网页的工作原理
    Lamp源码安装参考教程
    php相关配置
    PHP技巧:提高PHP性能的53个技巧
    面向对象工具
    面向对象基础
  • 原文地址:https://www.cnblogs.com/suRimn/p/10002081.html
Copyright © 2011-2022 走看看