Can someone help me understand the what the GeometryEngine.nearestCoordinate returns? I'm wondering if there is a bug in Runtime v100.1, as I'm seeing different results between a Polyline and a Polygon.
It returns a ProximityResult, which has a pointIndex. What exactly is that pointIndex supposed to be?
I made a basic polyline. I then click along the edges. The pointIndex seems to be the index of the lower vertex of that segment. e.g. if I click between vertices 0 and 1 I get a pointIndex of 0. If I click between vertices 2 and 3 I get 2. And so on.
I tried making a basic square polygon, and then started clicking along the edge. Obviously the polygon has 4 vertices, numbering 0-3. Clicking between 0-1 returns a pointIndex of 0. But as I move along from 1-2, it randomly alternates between returning 1 and 0. Again, as I move between 2-3, it randomly returns sometimes 2 and sometimes 0. And so on.
I have pasted below a very basic sample app. Is there someone that can test this, and confirm is this is either a bug, or whether I'm misunderstanding how the method works?
import QtQuick 2.7
import QtQuick.Controls 2.1
import ArcGIS.AppFramework 1.0
import ArcGIS.AppFramework.Controls 1.0
import Esri.ArcGISRuntime 100.0
Item { id: mainPage
Graphic{ id: samplePolygon
symbol: SimpleLineSymbol{ color: "blue"
width: Qt.platform.os === "ios" || Qt.platform.os === "android" ? 3 * scaleFactor : 2 * scaleFactor;
style: Enums.SimpleLineSymbolStyleSolid
}
Component.onCompleted: { geometry = ArcGISRuntimeEnvironment.createObject("Polygon", {json: {"rings":[[[-11136550.000343282,5201675.000715708],[-10361849.999553088,5220725.0007351395],[-10374549.999566041,4573025.000074485],[-11117500.00032385,4598425.000100394],[-11136550.000343282,5201675.000715708]]],"spatialReference":{"latestWkid":3857,"wkid":102100}} })
}
}
Graphic{ id: samplePolyline
symbol: SimpleLineSymbol{ color: "blue"
width: Qt.platform.os === "ios" || Qt.platform.os === "android" ? 3 * scaleFactor : 2 * scaleFactor;
style: Enums.SimpleLineSymbolStyleSolid
}
Component.onCompleted: { geometry = ArcGISRuntimeEnvironment.createObject("Polyline", {json: {"paths" :[[[-11422300.000634747,4122174.9996146187],[-10526949.99972149,4109474.999601665],[-10558699.999753874,3487174.9989669183],[-11390550.00060236,3525274.9990057806]]],"spatialReference":{"latestWkid":3857,"wkid":102100}} } )}
}
MapView { id: mapView
anchors.fill: parent
wrapAroundMode: Enums.WrapAroundModeDisabled
magnifierEnabled: true
GraphicsOverlay{ id: drawingLayer
}
onMouseClicked: { console.log('--------------------------------------------') var nearestCoordinate = GeometryEngine.nearestCoordinate(samplePolygon.geometry, mouse.mapPoint)
console.log('polygon pointIndex: ', nearestCoordinate.pointIndex) var nearestCoordinate2 = GeometryEngine.nearestCoordinate(samplePolyline.geometry, mouse.mapPoint)
console.log('polyline pointIndex: ', nearestCoordinate2.pointIndex) }
Map { // Set the initial basemap to Streets
BasemapStreets { } // set initial viewpoint to The United States
ViewpointCenter { Point { x: -10800000
y: 4500000
spatialReference: SpatialReference { wkid: 102100
}
}
targetScale: 3e7
}
onLoadStatusChanged: { if (loadStatus === Enums.LoadStatusLoaded){ drawingLayer.graphics.append(samplePolygon)
drawingLayer.graphics.append(samplePolyline)
}
}
}
}
}