ArcGIS Runtime:快速获取高程数据

时间:2015-10-15 11:57:36

标签: c# .net arcgis esri

我正在使用ArcGIS Runtime SDK开发dotNet 10.2.6。

我需要在几秒钟内从本地DTM文件(TIF格式)中获取点数的高程数据。

我正在使用高程数据来计算观察者的视线与地面的交点。 (例如 - 我的相机在某个时刻,用一些音高看一些方位角,我需要计算它正在看的地面上的点)

我尝试使用IdentifyTask来获取沿着视线的点的高程数据,但这很慢(每个查询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);

注意: 我尝试使用地理处理器任务来计算LOS - 这不是更快。

是否有更快的方法可以使用本地栅格DTM文件从点(或线)获取高程数据?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用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" );
    }

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