Zaznaczanie na mapie Bing zasięgu np. Wifi – WPF

By | 8 sierpnia 2014

Mapa Bing dla Windows Store 8 posiada świetne api i całe mnóstwo przydatnych klas i metod, lecz dla WPF pozostaje mocno okrojona biblioteka, która można pobrać stąd. Jednakże, pozostawia ona wiele do życzenia. Chciałbym więc podzielić się z Wami rozwiązaniem problemu zaznaczania zasięgu czegokolwiek na mapie za pomocą okręgu.

Okazało się, że przy rozwiązaniu tego problemu przydała się znajomość matematyki na poziomie maturalnym, tak więc czasami warto się przyłożyć do matury, bo w życiu ta wiedza też może się przydać.

 

Taki jest nasz cel

Taki jest nasz cel

Osiągniemy go poprzez dodanie tych dwóch poniższych funkcji. Pierwsza przyjmuje wartości współrzędnych długości i szerokości geograficznej. A druga przyjmuje, obiekt klasy punkt (dł, szer, geograficzna), radius(trzeba sobie przeliczyć, w komentarzach podane przykładowe wartości), oraz dokładność rysowania okręgu. W moim wypadku wytarczyło, że jeden okrąg składał się z 60 punktów, czyli punkt pojawiał się co 6 stopni.


public void AddWifiRange(double Latitude, double Longitude)
{
MapPolygon polygon = new MapPolygon();
polygon.Fill = new SolidColorBrush(Colors.Blue);
polygon.Opacity = 0.5;
// radius = 0.0003 = 75m
// radius = 0.0006 = 150m
polygon.Locations = CreateCircle(new Point(Latitude, Longitude), 0.0006, 60);

map.Children.Add(polygon);
}

private LocationCollection CreateCircle(Point point, double radius, int segments)
{
LocationCollection gpollist = new LocationCollection();

double seg = Math.PI * 2 / segments;

for (int i = 0; i < segments; i++)
{
double theta = seg * i;
double a = point.X + Math.Cos(theta) * radius;
double b = point.Y + Math.Sin(theta) * radius * 1.5;

Location gpoi = new Location(a, b);
gpollist.Add(gpoi);
}
return gpollist;
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *