2016-12-07 10 views
0

Я борюсь с моей GMAP-приложенийПолучить список PointLatLng на виртуальной дуге заданных 3 точек (центр, начало, конец)

Использования библиотеки GMAP.NET, я пытаюсь нарисовать заполненный дуговых многоугольник, заданный тремя координатами: center_coordinate, start_coordinate и end_coordinate (Все в формате DD,MM.MMM).

Зная, что я хочу нарисовать дугу как многоугольник на карте с соответствующим разрешением, я дополнительно определяю несколько сегментов и информацию о направлении по часовой стрелке/против часовой стрелки.

Обычно я знаю, как нарисовать многоугольник (сгенерированный списком PointLatLng) на карту с помощью GMAP.NET. Это работает отлично, поэтому я решил получить список PointLatLng.

Моя проблема заключается в том, что у меня нет конкретной идеи о том, как рассчитать каждую точку идеальной дуги.

Что я сделал до сих пор

Public Function list_of_points_on_arc(point_center As PointLatLng, point_arc_start As PointLatLng, point_arc_end As PointLatLng, direction As String) As List(Of PointLatLng) 

     'direction: CW - clockwise/CC - Counter Clockwise 

     Const radiusEarthKilometres As Double = 6371.01 

     'sets the resolution of arc 
     Dim elements As Integer = 20 

     'unknown point on arc, each ...element 
     Dim point_on_arc As PointLatLng 

     'List collects all points aon arc 
     Dim gpollist As List(Of PointLatLng) = New List(Of PointLatLng) 

     For i As Integer = 0 To elements 
      ' ????????????????????????????????????????????????????????? 
      'calculates new point_on_arc based on following information 
      ' - elements, point_center, point_arc_start, point_arc_end 
      ' ... 
      ' 
      ' ... 
      ' 
      ' point_on_arc = New PointLatLng(on_arc_lat, on_arc_lon) 
      ' ????????????????????????????????????????????????????????? 

      'adds point_on_arc to list 
      gpollist.Add(point_on_arc) 
     Next 

     'returns list of pointsLatLon 
     Return gpollist 
    End Function 

Любая помощь, чтобы подтолкнуть меня в правильном направлении, высоко ценится. Благодарю.

ответ

0

Ну, вы можете использовать параметрическое уравнение для окружности (https://en.wikipedia.org/wiki/Circle#Equations):

x = cx + r * cos(a) 
y = cy + r * sin(a) 

где г радиус, Cx, Cy происхождение, а угол в радианах. В вашем случае, вы будете просто разделить общую окружность (2pi) путем, чтобы получить значение приращения, что-то вроде:

double a_part = 2 * PI/elements; 
for(i = 1; i <= elements; i++) 
{ 
    x = cx + r * cos(i * a_part); 
    y = cy + r * sin(i * a_part); 
} 

Если вы собираетесь рисовать круги много в GMAP, то лучше от всего создавая новый тип маркера, наследуя GMapMarker и используя функцию DrawEllipse для рисования круга с некоторым радиусом, который обсуждается здесь: How to draw circle on the MAP using GMAP.NET in C#.