C# ArcGIS运行时:快速获取高程数据

C# ArcGIS运行时:快速获取高程数据,c#,.net,arcgis,esri,C#,.net,Arcgis,Esri,我正在使用ArcGIS运行时SDK for dotNet 10.2.6进行开发 我需要在一秒钟内以TIF格式从本地DTM文件中获取几十次点的高程数据 我使用高程数据来计算观众视线与地面的交点。 e、 我的相机在某个点上,以一定的角度观察某个方位角,我需要计算它所观察的地面上的点 我尝试使用identifTask获取视线上的高程数据,但每次查询的速度慢20-40毫秒,总共几秒钟 我的识别任务: IdentifyParameters identifyParams = new IdentifyPara

我正在使用ArcGIS运行时SDK for dotNet 10.2.6进行开发

我需要在一秒钟内以TIF格式从本地DTM文件中获取几十次点的高程数据

我使用高程数据来计算观众视线与地面的交点。 e、 我的相机在某个点上,以一定的角度观察某个方位角,我需要计算它所观察的地面上的点

我尝试使用identifTask获取视线上的高程数据,但每次查询的速度慢20-40毫秒,总共几秒钟

我的识别任务:

IdentifyParameters identifyParams = new IdentifyParameters(mapPoint, m_MapView.Extent, 1, (int)m_MapView.ActualHeight, (int)m_MapView.ActualWidth);
identifyParams.DynamicLayerInfos = m_DynamicMapServiceLayer.DynamicLayerInfos;
identifyParams.ReturnGeometry = false;
identifyParams.SpatialReference = m_MapView.SpatialReference;
identifyParams.LayerOption = LayerOption.Top;

IdentifyResult identifyResult = await identifyTask.ExecuteAsync(identifyParams);
注: 我尝试使用地理处理器任务来计算服务水平-这并没有快多少


使用本地光栅DTM文件从点或线获取高程数据有没有更快的方法?

您可以尝试SceneView和FileElevationSource。然后使用FileElevationSource.GetElevationAsync。使用STRM.tif文件,我看到大约6毫秒/样本:

    public MainWindow()
    {
        InitializeComponent();

        SceneView sv = new SceneView();
        FileElevationSource elv = new FileElevationSource();
        elv.Filenames.Add(@"C:\Maps\NJ\elev\n40_w075_1arc_v3.tif");
        sv.Scene.ElevationSourceLoaded += (object sender, ElevationSourceLoadedEventArgs e) =>
        {
            elevtest(elv);
        };
        sv.Scene.Surface.Add(elv);
        Content = sv;
        sv.Visibility = System.Windows.Visibility.Hidden;
    }

    async void elevtest(FileElevationSource elv)
    {
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        double nSamples = 1000.0;
        double delta = 1 / nSamples;
        for (double i = 0; i < 1.0; i += delta)
        {
            double elev = await elv.GetElevationAsync(new Esri.ArcGISRuntime.Geometry.MapPoint(-75 + i, 40 + i, SpatialReferences.Wgs84));
        }
        sw.Stop();
        System.Diagnostics.Trace.WriteLine(sw.ElapsedMilliseconds / nSamples + " ms per sample" );
    }

如果仍然不够好,可以使用来读取和访问高程数据。那会快得多

谢谢你的回复。SceneView的结果确实更快,但由于某种原因,我从同一点的IdentifyTask中得到了不同的结果。。。在某些情况下,差异超过50。还有,我怎样才能说出结果的单位?有没有一种方法可以使用一个查询以一个结果获得多个点的高程?您是否考虑过实际并行运行多个请求?我的印象是,您正在使用wait在发送下一个请求之前获取每个请求的结果,因此“每个查询20-40ms,总共几秒钟”,而您应该能够一次发出多个请求,并在它们返回时查看结果。我试着用等待任务来测量200点。当完成所有任务时,每个任务大约需要6秒~30毫秒。