Я пытаюсь написать функцию, которая просто рисует круг на карте. Я в основном следую приведенному коду here. Вот мой фактический код:Нет метода расширения для метода, который я уже явно определил
using attempt2.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Device.Location;
using System.Windows;
using Windows.Foundation;
using Windows.UI.Xaml.Controls.Maps;
using Windows.Devices.Geolocation;
using Windows.Services.Maps;
using Windows.Storage.Streams;
using Windows.UI.Xaml.Shapes;
using System.Device.Location;
namespace attempt2
{
class MapsClass
{
//computes a point on the perimeter given an arbitrary point and distance
public GeoCoordinate getDistanceBearing(this GeoCoordinate point, double distance, double bearing = 180)
{
double radius = Convert.ToDouble(this.Set.container.Values["Radius"]);
const double degreestoRadian = Math.PI/180;
const double radiantoDegrees = 180/Math.PI;
const double earthRadius = 6378137.0;
var latA = point.Latitude * degreestoRadian;
var longA = point.Longitude * degreestoRadian;
var angularDistance = distance/earthRadius;
var trueCourse = bearing * degreestoRadian;
var lat = Math.Asin(Math.Sin(latA) * Math.Cos(angularDistance) + Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse));
var dlon = Math.Atan2(Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA),
Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat));
var lon = ((longA + dlon + Math.PI) % (Math.PI * 2)) - Math.PI;
var result = new GeoCoordinate(lat * radiantoDegrees, lon * radiantoDegrees);
return result;
}
//adds up a series of those points to create a circle
public static IList<GeoCoordinate> GetCirclePoints(this GeoCoordinate center,
double radius, int nrOfPoints = 50)
{
var angle = 360.0/nrOfPoints;
var locations = new List<GeoCoordinate>();
for (var i = 0; i <= nrOfPoints; i++)
{
locations.Add(center.getDistanceBearing(radius, angle * i));
}
return locations;
}
//draws the circle on the map
private void MainPageLoaded()
{
if (this.Data.CurrentOrNot == false) //searched location
{
var location = this.Data.SearchedLocation;
Map.Center = location;
Map.ZoomLevel = 16;
var fill = Windows.UI.Color.FromArgb(50, 100, 0, 100);
var stroke = Windows.UI.Color.FromArgb(150, 250, 0, 0);
fill.A = 80;
stroke.A = 80;
var circle = new MapPolygon
{
StrokeThickness = 2,
FillColor = fill,
StrokeColor = stroke,
StrokeDashed = false,
};
foreach (var p in location.GetCirclePoints(150))
{
circle.Path.Add(p);
}
Map.MapElements.Add(circle);
} else
{
var location = this.Data.CurrentLocation;
Map.Center = location;
Map.ZoomLevel = 16;
var fill = Windows.UI.Color.FromArgb(50, 100, 0, 100);
var stroke = Windows.UI.Color.FromArgb(150, 250, 0, 0);
fill.A = 80;
stroke.A = 80;
var circle = new MapPolygon
{
StrokeThickness = 2,
FillColor = fill,
StrokeColor = stroke,
StrokeDashed = false,
};
foreach (var p in location.GetCirclePoints(150))
{
circle.Path.Add(p);
}
Map.MapElements.Add(circle);
}
}
Единственные ошибки я получаю в линии, когда я звоню один из методов, так конкретно линия locations.Add(center.getDistanceBearing(radius, angle * i));
, и оба экземпляра foreach (var p in location.GetCirclePoints(150))
. Visual Studio дает мне ошибку
«System.Device.Location.GeoCoordinate» не содержит определение для «getDistanceBearing» и без метода расширения «getDistanceBearing» принимать первый аргумент типа «System.Device.Location .GeoCoordinate '(вы не указали ссылку на использование или ссылку на сборку?)
и ошибка того же типа, когда я ссылаюсь на GetCirclePoints. Но почему это дает мне эти ошибки, когда у меня уже определены методы? И почему в этом примере, по-видимому, работает тот же код?