Viewshed (Location)

Loading

Code

import QtQuick 2.6
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import Esri.ArcGISExtras 1.1
import Esri.ArcGISRuntime 100.3

Rectangle {
    id: viewshedSample
    clip: true
    width: 800
    height: 600

    property real scaleFactor: System.displayScaleFactor
    property bool calculating: false

    SceneView {
        id: sceneView
        anchors.fill: parent
        focus: true

        Scene {
            id: scene
            BasemapTopographic {}

            Surface {
                ArcGISTiledElevationSource {
                    url: "http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"
                }
            }

            onLoadStatusChanged: {
                if (loadStatus === Enums.LoadStatusLoaded) {
                    // Set a viewpoint
                    var point = ArcGISRuntimeEnvironment.createObject("Point", {
                                                                          x: 6.86088,
                                                                          y: 45.3604,
                                                                          z: 3582.55,
                                                                          spatialReference: SpatialReference.createWgs84()
                                                                      });

                    var camera = ArcGISRuntimeEnvironment.createObject("Camera", {
                                                                           location: point,
                                                                           heading: 345,
                                                                           pitch: 70,
                                                                           roll: 0
                                                                       });

                    sceneView.setViewpointCamera(camera)
                }
            }
        }

        // Add an Analysis Overlay
        AnalysisOverlay {
            id: analysisOverlay

            LocationViewshed {
                id: locationViewshed
                minDistance: 50
                maxDistance: 1000
                horizontalAngle: 45
                verticalAngle: 90
                heading: 180
                pitch: 90
                visible: true
            }
        }

        onMouseClicked: locationViewshed.location = sceneView.screenToBaseSurface(mouse.x, mouse.y);
        onMousePressedAndHeld: calculating = true;
        onMouseReleased: calculating = false;
        onMousePositionChanged: locationViewshed.location = sceneView.screenToBaseSurface(mouse.x, mouse.y);

        Rectangle {
            anchors {
                right: parent.right
                bottom: sceneView.attributionTop
                margins: 10 * scaleFactor
            }
            visible: !optionPanel.visible
            width: 45 * scaleFactor
            height: width
            color: "white"
            radius: 25 * scaleFactor

            Image {
                anchors.centerIn: parent
                source: "qrc:/Samples/Analysis/ViewshedLocation/settings.png"
                width: 40 * scaleFactor
                height: width
            }

            MouseArea {
                anchors.fill: parent
                onClicked: optionPanel.visible = true;
            }
        }


        Rectangle {
            id: optionPanel
            anchors {
                right: parent.right
                top: parent.top
                bottom: sceneView.attributionTop
            }
            width: 260 * scaleFactor
            visible: false
            color: "white"
            opacity: 0.85

            Flickable {
                anchors {
                    fill: parent
                    margins: 5 * scaleFactor
                }
                contentWidth: parent.width
                contentHeight: parent.height
                flickableDirection: Flickable.VerticalFlick

                Column {
                    id: optionColumn
                    spacing: 10 * scaleFactor
                    width: optionPanel.width

                    Item {
                        width: parent.width
                        height: 25 * scaleFactor

                        Text {
                            text: "Viewshed Options"
                            anchors.horizontalCenter: parent.horizontalCenter
                            font.pixelSize: 18 * scaleFactor
                            font.underline: true

                        }

                        Rectangle {
                            anchors {
                                right: parent.right
                                margins: 10 * scaleFactor
                                verticalCenter: parent.verticalCenter
                            }
                            width: 45 * scaleFactor
                            height: width
                            color: "transparent"

                            Image {
                                anchors.centerIn: parent
                                source: "qrc:/Samples/Analysis/ViewshedLocation/close.png"
                                width: 40 * scaleFactor
                                height: width
                            }

                            MouseArea {
                                anchors.fill: parent
                                onClicked: optionPanel.visible = false;
                            }
                        }
                    }

                    Item {
                        width: parent.width
                        height: 25 * scaleFactor

                        Text {
                            anchors.verticalCenter: parent.verticalCenter
                            width: parent.width * 0.75
                            text: qsTr("Viewshed Visible")
                            font.pixelSize: 14 * scaleFactor
                        }

                        Switch {
                            anchors {
                                right: parent.right
                                margins: 10 * scaleFactor
                                verticalCenter: parent.verticalCenter
                            }
                            checked: true
                            onCheckedChanged: locationViewshed.visible = checked;
                        }
                    }

                    Item {
                        width: parent.width
                        height: 25 * scaleFactor

                        Text {
                            anchors.verticalCenter: parent.verticalCenter
                            width: parent.width * 0.75
                            text: qsTr("Frustum Outline Visible")
                            font.pixelSize: 14 * scaleFactor
                        }

                        Switch {
                            anchors {
                                right: parent.right
                                margins: 10 * scaleFactor
                                verticalCenter: parent.verticalCenter
                            }
                            checked: locationViewshed.frustumOutlineVisible
                            onCheckedChanged: locationViewshed.frustumOutlineVisible = checked;
                        }
                    }

                    ViewshedSlider {
                        titleText: qsTr("Min Distance (m)")
                        parameterValue: locationViewshed.minDistance
                        minValue: 1
                        maxValue: 2000
                        onParameterValueChanged: locationViewshed.minDistance = parameterValue;
                    }

                    ViewshedSlider {
                        titleText: qsTr("Max Distance (m)")
                        parameterValue: locationViewshed.maxDistance
                        minValue: 1
                        maxValue: 2000
                        onParameterValueChanged: locationViewshed.maxDistance = parameterValue;
                    }

                    ViewshedSlider {
                        titleText: qsTr("Vertical Angle")
                        parameterValue: locationViewshed.verticalAngle
                        minValue: 1
                        maxValue: 120
                        onParameterValueChanged: locationViewshed.verticalAngle = parameterValue;
                    }

                    ViewshedSlider {
                        titleText: qsTr("Horizontal Angle")
                        parameterValue: locationViewshed.horizontalAngle
                        minValue: 1
                        maxValue: 120
                        onParameterValueChanged: locationViewshed.horizontalAngle = parameterValue;
                    }

                    ViewshedSlider {
                        titleText: qsTr("Heading")
                        parameterValue: locationViewshed.heading
                        minValue: 1
                        maxValue: 359
                        onParameterValueChanged: locationViewshed.heading = parameterValue;
                    }

                    ViewshedSlider {
                        titleText: qsTr("Pitch")
                        parameterValue: locationViewshed.pitch
                        minValue: 1
                        maxValue: 179
                        onParameterValueChanged: locationViewshed.pitch = parameterValue;
                    }

                    Row {
                        width: parent.width
                        height: 25 * scaleFactor
                        spacing: 5 * scaleFactor

                        Text {
                            anchors.verticalCenter: parent.verticalCenter
                            width: parent.width * 0.85
                            text: qsTr("Visible Color")
                            font.pixelSize: 14 * scaleFactor
                        }

                        Rectangle {
                            id: visibleColorRect
                            anchors {
                                margins: 10 * scaleFactor
                                verticalCenter: parent.verticalCenter
                            }
                            width: 25 * scaleFactor
                            height: width
                            border {
                                color: "black"
                                width: 1 * scaleFactor
                            }
                            color: Viewshed.visibleColor()
                            radius: 4 * scaleFactor

                            MouseArea {
                                anchors.fill: parent
                                onClicked: {
                                    visibleColorDialog.open();
                                }
                            }
                        }
                    }

                    Row {
                        width: parent.width
                        height: 25 * scaleFactor
                        spacing: 5 * scaleFactor

                        Text {
                            anchors.verticalCenter: parent.verticalCenter
                            width: parent.width * 0.85
                            text: qsTr("Obstructed Color")
                            font.pixelSize: 14 * scaleFactor
                        }

                        Rectangle {
                            id: obstructedColorRect
                            anchors {
                                margins: 10 * scaleFactor
                                verticalCenter: parent.verticalCenter
                            }
                            width: 25 * scaleFactor
                            height: width
                            border {
                                color: "black"
                                width: 1 * scaleFactor
                            }
                            color: Viewshed.obstructedColor()
                            radius: 4 * scaleFactor

                            MouseArea {
                                anchors.fill: parent
                                onClicked: {
                                    obstructedColorDialog.open();
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    ColorDialog {
        id: visibleColorDialog
        onAccepted: {
            close();
            visibleColorRect.color = color;
            Viewshed.setVisibleColor(color);
        }
    }

    ColorDialog {
        id: obstructedColorDialog
        onAccepted: {
            close();
            obstructedColorRect.color = color;
            Viewshed.setObstructedColor(color);
        }
    }
}


In this topic
  1. Code