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