2016-09-14 7 views
0

Я использую ArcGIS времени выполнения .NET Quartz BetaБольшой Polygon делает неправильно

У меня есть приложение, которое необходимо для визуализации больших полигонов на 3D Scene View.

Например, я выполняю этот код:

  var ContourOverlayScene = CreateGraphicsOverlay("Contours"); 
      MySceneView.GraphicsOverlays.Add(ContourOverlayScene); 


      List<MapPoint> combined = new List<MapPoint>(); 

      combined.Add(new MapPoint(-160, 20, wgs84)); 
      combined.Add(new MapPoint(160, 20, wgs84)); 
      combined.Add(new MapPoint(160, -20, wgs84)); 
      combined.Add(new MapPoint(-160, -20, wgs84)); 

      var arcpoly = new Esri.ArcGISRuntime.Geometry.Polygon(combined, wgs84); 

      ContourOverlayScene.Graphics.Add(new Graphic() { Geometry = arcpoly, Symbol = new SimpleFillSymbol() { Color = Colors.Red } }); 

дает мне этот результат (я ожидал, что полигон, чтобы обернуть большую часть пути по всему миру)

enter image description here

Итак, Я изменил его, чтобы иметь промежуточные точки, чтобы попытаться заставить его двигаться по всему миру, например:

  combined.Add(new MapPoint(-160, 20, wgs84)); 
      combined.Add(new MapPoint(-40, 20, wgs84)); 
      combined.Add(new MapPoint(40, 20, wgs84)); 
      combined.Add(new MapPoint(160, 20, wgs84)); 
      combined.Add(new MapPoint(160, -20, wgs84)); 
      combined.Add(new MapPoint(40, -20, wgs84)); 
      combined.Add(new MapPoint(-40, -20, wgs84)); 
      combined.Add(new MapPoint(-160, -20, wgs84)); 

и итоговое изображение точно такое же ....

Как бы визуализировать многоугольник, который я хочу сделать?

+0

Вы пытались изменить порядок пунктов так, чтобы все было наоборот? -160,20 | -160, -20 | 160, -20 | 160, 20 –

+0

@SamiKuhmonen Да, это не имеет значения, если они по часовой стрелке или против часовой стрелки. –

+0

[This] (http://gis.stackexchange.com/questions/18562/how-can-i-make-a -polyline-wrap-around-the-world), похоже, связано: «Вам нужно сломать полилинию с помощью меридиана + -180 градусов». Вероятно, вам нужно создать 2 многоугольника, один из которых будет «левым» и остановится у меридиана, а другой - справа и остановится у меридиана. – Quantic

ответ

0

Это ошибка в 3D рендерере. Единственный способ, который я нашел, - создать две графики, и каждая половина должна быть меньше 180 градусов в ширину. Он даже не работать при создании единого полигона с двумя частями (контур оказываемыми правильно, но заполнение было еще не так)

 var pb = new PolygonBuilder(wgs84); 
     combined.Add(new MapPoint(-160, 20, wgs84)); 
     combined.Add(new MapPoint(0, 20, wgs84)); 
     combined.Add(new MapPoint(0, -20, wgs84)); 
     combined.Add(new MapPoint(-160, -20, wgs84)); 
     pb.AddPart(combined); 

     ContourOverlayScene.Graphics.Add(new Graphic() { Geometry = GeometryEngine.Densify(pb.ToGeometry(),1), Symbol = new SimpleFillSymbol() { Color = Colors.Red } }); 

     pb = new PolygonBuilder(wgs84); 

     combined = new List<MapPoint>(); 
     combined.Add(new MapPoint(0, 20, wgs84)); 
     combined.Add(new MapPoint(160, 20, wgs84)); 
     combined.Add(new MapPoint(160, -20, wgs84)); 
     combined.Add(new MapPoint(0, -20, wgs84)); 
     pb.AddPart(combined); 

     ContourOverlayScene.Graphics.Add(new Graphic() { Geometry = GeometryEngine.Densify(pb.ToGeometry(), 1), Symbol = new SimpleFillSymbol() { Color = Colors.Red } }); 

Я входившая ошибку в ArcGIS Время воспроизведения, так что надеюсь, это может исправляется - однако в настоящее время части> 180 будут идти коротко в 3D по дизайну, поэтому вам все равно придется разделить геометрию на две части.