Getting MGRS from a selected graphic

3494
4
Jump to solution
06-18-2015 12:02 PM
RainerFarsch
New Contributor III

I'm trying to get the MGRS string for a selected graphic in a graphic layer. I thought it would be fairly straight forward, but I'm getting an empty string from the toMgrs() call. I have two cases - Case A using 'var' for the Point, and Case B using 'property' for Point. When I try using project() on the point, I get a null. I appreciate any help. Here's the code:

        onFindGraphicsComplete: {

            unselectGraphic(selectedGraphicID)
            if (graphicIDs.length > 0) {
                selectedGraphicID = graphicIDs[0]
                selectGraphic(selectedGraphicID)
                if (isGraphicSelected(selectedGraphicID)) {

                    var selectedGraphic = graphic(selectedGraphicID);
// Case A: (using 'var')
                    var dummyPoint1 = selectedGraphic.geometry;
                    console.log("X_X: ", dummyPoint1.x, ", Y_Y: ", dummyPoint1.y);
//                    var dummyPoint2 = dummyPoint1.project(mainMap.spatialReference);
//                    console.log("X_X_X: ", dummyPoint2.x, ", Y_Y_Y: ", dummyPoint2.y);
                    console.log("MGRS: ", dummyPoint1.toMgrs(0, 10, false, false));
// Case B: (using 'property Point dummyPoint1_property', property Point dummyPoint2_property)
                    /*
                    dummyPoint1_property = selectedGraphic.geometry;
                    console.log("X_X: ", dummyPoint1_property.x, ", Y_Y: ", dummyPoint1_property.y);
                    dummyPoint2_property = dummyPoint1_property.project(mainMap.spatialReference);
                    console.log("X_X_X: ", dummyPoint2_property.x, ", Y_Y_Y: ", dummyPoint2_property.y);
                    console.log("MGRS: ", dummyPoint2_property.toMgrs(1, 10, false, false));
                    */
                }
            }
        }
0 Kudos
1 Solution

Accepted Solutions
RainerFarsch
New Contributor III

Lucas,

I got it. I wasn't adding the spatial reference when I was adding graphics to the graphics layer. I assumed that when a graphic is added to a graphic layer that the graphic was set to the spatial reference of the graphic layer which it inherits from the bas map (tile package). I guess that was a bad assumption on my part.

-Rainer

View solution in original post

4 Replies
LucasDanzinger
Esri Frequent Contributor

Rainer-

Give this code a try-

import QtQuick 2.3
import ArcGIS.Extras 1.0
import ArcGIS.Runtime 10.26


Rectangle {
    id: rootRectangle


    property bool graphicSelected: false
    property int graphicID
    property double scaleFactor: System.displayScaleFactor


    Map {
        id: mainMap
        anchors.fill: parent
        wrapAroundEnabled: true
        focus: true
        grid {
            visible: true
            gridType: Enums.GridTypeMgrs
            labelVisible: true
        }


        // Create the initial graphics through JSON
        onStatusChanged: {
            if (status === Enums.MapStatusReady) {
                var graphic1 = {
                    geometry: {
                        spatialReference: {latestWkid: 3857,wkid:102100},
                        x: 16130193.189065285,
                        y: -3807126.3427607343
                    },
                    symbol: {
                        type: "esriSMS",
                        size: 20,
                        style: "esriSMSX",
                        color: "blue"
                    }
                };


                graphicsLayer.addGraphic(graphic1);
            }
        }


        onMouseClicked: {
            if (graphicSelected) {
                graphicsLayer.graphic(graphicID).moveTo(mouse.mapPoint);
                graphicsLayer.unselectGraphic(graphicID);
                graphicSelected = false;
            } else {
                var tolerance = Qt.platform.os === "ios" || Qt.platform.os === "android" ? 4 : 1;
                graphicsLayer.findGraphic(mouse.x, mouse.y, tolerance * scaleFactor);
            }
        }


        ArcGISTiledMapServiceLayer {
            url: "http://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer"
        }


        GraphicsLayer {
            id: graphicsLayer
            renderingMode: Enums.RenderingModeStatic


            onFindGraphicsComplete: {
                for (var i = 0; i < graphicIDs.length; i++) {
                    var graphicId = graphicIDs;
                    graphicID = graphicIDs;


                    if (!isGraphicSelected(graphicId)) {
                        selectGraphic(graphicId);
                        var selGraphic = graphicsLayer.graphic(graphicId);
                        console.log("Point Coordinates (102100):", JSON.stringify(selGraphic.geometry.json))
                        console.log("MGRS Coordinate", selGraphic.geometry.toMgrs(Enums.MgrsConversionModeAutomatic, 10, false, false))
                        graphicSelected = true;
                    } else {
                        unselectGraphic(graphicId);
                        graphicSelected = false;
                    }
                }
            }
        }
    }
}



















RainerFarsch
New Contributor III

Lucas,

I ran your code and got the following results:

qml: Point Coordinates (102100): {"spatialReference":{"latestWkid":3857,"wkid":102100},"x":16130193.1890653,"y":-3807126.34276073}
qml: MGRS Coordinate 55HCE0234447420694343

When I ran my code I got the following:

qml: Point Coordinates (102100): {"x":13388865.2146819,"y":1586203.41858292}
qml: MGRS Coordinate:

How is it I'm missing 'spatialReference' and how do I fix it? When I tried using project() using the map's spatial reference, I got a null error.

Thanks.

-Rainer

0 Kudos
RainerFarsch
New Contributor III

Lucas,

I got it. I wasn't adding the spatial reference when I was adding graphics to the graphics layer. I assumed that when a graphic is added to a graphic layer that the graphic was set to the spatial reference of the graphic layer which it inherits from the bas map (tile package). I guess that was a bad assumption on my part.

-Rainer

LucasDanzinger
Esri Frequent Contributor

Cool, glad you figured it out. You're correct, it does not automatically inherit the spatial reference once it is added to the GL.

-Luke

0 Kudos