Hi all,
I'm having issues with zoom to feature code. I am using the code in the sample "Listed Related features" but doesn't seem to work and the confusing part is that there are no errors displaying.
mapView.setViewpointGeometryAndPadding(feature.geometry, 30);
Is this correct or does anyone know of another way I can zoom to feature while clicking on a feature on the map?
Thanks all
Solved! Go to Solution.
I figured it out. Thanks for all your help 👍
mapView.setViewpointCenterAndScale(feature.geometry, 1000);
Hello @EricAtkinson1 ,
I don't see anything wrong with your line of code so that's good news. If I run the "List related features" QML sample with 100.9/100.10 it works perfectly fine for me and it also set's the viewpoint to the selected features geometry when clicked.
Could you provide a bit more context? Which version of ArcGIS Runtime are you using? Maybe provide the .qml file or a larger section of the code so I can take a closer look at the rest of your workflow.
Sincerely,
Jared
Hi Jared,
Thanks for the reply. Im pretty new to this so am learning on the way so any help would be appreciated. I feel like I might be missing a connection as in the previous version it has connections (line110 on sample) but cant seem to get connections working with onIdentifyLayerStatusChanged.
Here is some of my code, the map url has been taken on purpose. The app works just cant seen to get the map to zoom once the feature has been clicked.
Cheers, Eric
contentItem: Rectangle{
anchors.top:header.bottom
            MapView {id: mapView
anchors.fill: parent
viewInsets.bottom: attributeView.height / scaleFactor
                locationDisplay {positionSource: PositionSource {}
}
                Map {initUrl: "deleted on purpose"
                    onOperationalLayersChanged: {for (var i = 0; operationalLayers.count; i++) {
if (operationalLayers.get(i).name === "ESCAD Incidents") {
featureLayer = operationalLayers.get(i)
                                featureLayer.refreshInterval = 5000featureLayer.selectionColor = "#02253A"
//featureTable = featureLayer.featureTable
                                break}
}
}
}
                onMouseClicked: {                    attributeView.height = 0;                    featureLayer.clearSelection()identifyLayer(featureLayer, mouse.x, mouse.y, 15, false)
                    relatedFeaturesModel.clear();}
                onIdentifyLayerStatusChanged: {if (identifyLayerStatus === Enums.TaskStatusCompleted) {
if (identifyLayerResult.geoElements.length > 0) {
//Retrieve Feature
var feature = identifyLayerResult.geoElements [0]
//select feature
featureLayer.selectFeature(feature)
//Get information from layer
var masterIncidentNumber = feature.attributes.attributeValue("master_Incident_Number")
var incidentType = feature.attributes.attributeValue("Incident_Type")
var MINDetails = feature.attributes.attributeValue("MIN_Details")
var CrossStreet = feature.attributes.attributeValue("Cross_Street")
var location = feature.attributes.attributeValue("location")
var commandChannel = feature.attributes.attributeValue("Command_Channel")
var tacChannel = feature.attributes.attributeValue("Primary_TAC_Channel")
var longitude = feature.attributes.attributeValue("longitude")
var latitude = feature.attributes.attributeValue("latitude")
console.log("masterIncidentNumber", masterIncidentNumber )
console.log("location", location)
console.log("Incident Type", incidentType)
console.log("MIN_ID", MINDetails)
console.log("Cross Street", CrossStreet)
console.log("Command_Channel", commandChannel)
console.log("Primary_TAC_Channel", tacChannel)
var listElement = {
"masterIncidentNumber" : masterIncidentNumber,
"location" : location,
"incidentType" : incidentType,
"MIN_ID" : MINDetails,
"crossStreet" : CrossStreet,
"Command_Channel" : commandChannel,
"Primary_TAC_Channel" : tacChannel,
"longitude" : longitude,
"latitude" : latitude
};
relatedFeaturesModel.append(listElement);
//zoom in not working
mapView.setViewpointGeometryAndPadding(feature.geometry, 30);
}
attributeView.height = 200 * scaleFactor
}
}
                Rectangle {id: attributeView
                    anchors {left: parent.left
right: parent.right
bottom: parent.bottom
Hey @EricAtkinson1 ,
Just to let you know that you can click on the insert code button so that it doesn't break it down into block by block. Will make for more readable code on geonet. Take a look at the picture below.
I don't see anything inherently wrong with your workflow to select a feature and zoom to it. I took your general workflow and tested it on some sample data and it works like it should. Which version of ArcGISRuntime are you targeting? Here is my code blow:
import QtQuick 2.6
import QtQuick.Controls 2.2
import Esri.ArcGISRuntime 100.10
ApplicationWindow {
    id: appWindow
    width: 800
    height: 600
    title: "SelectAFeature"
    property FeatureLayer alaskaNationalParks: null
    // add a mapView component
    MapView {
        id: mapView
        anchors.fill: parent
        // set focus to enable keyboard navigation
        focus: true
        // add a map to the mapview
        Map {
            id: map
            initUrl: "https://arcgis.com/home/item.html?id=dcc7466a91294c0ab8f7a094430ab437"
            onLoadStatusChanged: {
                if (loadStatus !== Enums.LoadStatusLoaded)
                    return;
                // get the Alaska National Parks feature layer
                map.operationalLayers.forEach(fl =>
                  {
                      if (fl.name.indexOf("- Alaska National Parks") !== -1) {
                          alaskaNationalParks = fl;
                          print("FL set");
                      }
                  });
            }
        }
        onMouseClicked: {
            alaskaNationalParks.clearSelection()
            identifyLayer(alaskaNationalParks, mouse.x, mouse.y, 15, false);
        }
        onIdentifyLayerStatusChanged: {
            if (error)
                print(error.message);
            if (identifyLayerStatus === Enums.TaskStatusCompleted) {
                if (identifyLayerResult.geoElements.length > 0) {
                    //Retrieve Feature
                    var feature = identifyLayerResult.geoElements[0];
                    //select feature
                    alaskaNationalParks.selectFeature(feature);
                    mapView.setViewpointGeometryAndPadding(feature.geometry, 30);
                }
            }
        }
    }
}Thanks for the tip... I'm running it in 100.8.... no errors come up just no auto zoom capability to the feature.
Is there's maybe a Onmouseclicked or onclicked line of code I can use instead?
Hello @EricAtkinson1 ,
I apologize for not responding sooner. I just checked the code with 100.8 and it successfully changes the extent of the mapview to that of the selected features. Might I suggest checking the extent of your feature? The code you are using is correct, my guess is that the features extent is not what you are expecting which is why there is no perceived zoom animation.
Thanks I'll have a look. My confusion is that when I put the app into navigation mode it zooms to location or when I search for a feature it zooms to extent....
Hi Jared,
Still having issues and its not an extent issue. I have similar code in my App (mapView.locationDisplay.autoPanMode = Enums.LocationDisplayAutoPanModeRecenter; ) and it zooms to location.
I have tired my featureLayer in the code below and also locationDisplay in the code below but it still doesn't work including no error messaged.
mapView.setViewpointGeometryAndPadding(feature.geometry, 30);
Any help would be appreciated.
Eric
Hey guys,
Still really stuck... I feel like this is a simple fix but i've been stuck on this. I've attached the code i'm using and I feel like I might not be connecting the setViewpointGeometryAndPadding correctly.
onIdentifyLayerStatusChanged: {
                    if (identifyLayerStatus === Enums.TaskStatusCompleted) {
                        if (identifyLayerResult.geoElements.length > 0) {
                            //Retrieve Feature
                            var feature = identifyLayerResult.geoElements [0]
                            //select feature
                            featureLayer.selectFeature(feature)
                            //Get information from layer ESCAD
                            var masterIncidentNumber = feature.attributes.attributeValue("master_Incident_Number")
                            var incidentType = feature.attributes.attributeValue("Incident_Type")
                            var MINDetails = feature.attributes.attributeValue("MIN_Details")
                            var CrossStreet = feature.attributes.attributeValue("Cross_Street")
                            var location = feature.attributes.attributeValue("location")
                            var commandChannel = feature.attributes.attributeValue("Command_Channel")
                            var tacChannel = feature.attributes.attributeValue("Primary_TAC_Channel")
                            var longitude = feature.attributes.attributeValue("longitude")
                            var latitude = feature.attributes.attributeValue("latitude")
                            console.log("masterIncidentNumber", masterIncidentNumber )
                            console.log("location", location)
                            console.log("Incident Type", incidentType)
                            console.log("MIN_ID", MINDetails)
                            console.log("Cross Street", CrossStreet)
                            console.log("Command_Channel", commandChannel)
                            console.log("Primary_TAC_Channel", tacChannel)
                            var listElement = {
                                "masterIncidentNumber" : masterIncidentNumber,
                                "location" : location,
                                "incidentType" : incidentType,
                                "MIN_ID" : MINDetails,
                                "crossStreet" : CrossStreet,
                                "Command_Channel" : commandChannel,
                                "Primary_TAC_Channel" : tacChannel,
                                "longitude" : longitude,
                                "latitude" : latitude
                            };
                            mapView.setViewpointGeometryAndPadding(feature.geometry,100);
                            attributeView.height = 200
                            relatedFeaturesModel.append(listElement);
                            //drawerMenu.height = 0
                            search.visible = false
                            callout.visible = false
