Erstellen Sie einen SqlGeography-Polygonkreis aus einem Mittelpunkt und einem Radius
Ich möchte einen Kreis in einem SQL Server 2008-Geografiefeld mit c # speichern.
In c # habe ich einen Breitengrad, einen Längengrad und einen Radius, aber ich kann einfach keine Möglichkeit finden, das Polygon zu berechnen, das den Kreis darstellt und ein erstelltSqlGeography
davon.
Ich habe folgende Funktion versucht, um das Polygon zu erstellen:
private List<Coordinate> getCirclePoints(Coordinate center, int radius, int speed) //speed 1: draws 360 sides, 2 draws 180 etc...
{
var centerLat = (center.Latitude * Math.PI) / 180.0; //rad
var centerLng = (center.Longitude * Math.PI) / 180.0; //rad
var dist = (float)radius / 6371.0; //d = angular distance covered on earth's surface
var circlePoints = new List<Coordinate>();
for (int x = 0; x <= 360; x += speed)
{
var brng = x * Math.PI / 180.0; //rad
var latitude = Math.Asin(Math.Sin(centerLat) * Math.Cos(dist) + Math.Cos(centerLat) * Math.Sin(dist) * Math.Cos(brng));
var longitude = ((centerLng + Math.Atan2(Math.Sin(brng) * Math.Sin(dist) * Math.Cos(centerLat), Math.Cos(dist) - Math.Sin(centerLat) * Math.Sin(latitude))) * 180.0) / Math.PI;
circlePoints.Add(new Coordinate((latitude * 180.0) / Math.PI, longitude));
}
return circlePoints;
}
Und versuchen Sie dann, dies zu konvertierenList<Coordinate>
zu einer syntaktisch analysierbaren Zeichenfolge:
var s = "POLYGON((" + string.Join(",", points.ConvertAll(p => p.Longitude + " " + p.Latitude).ToArray()) + "))";
var poly = SqlGeography.STPolyFromText(new System.Data.SqlTypes.SqlChars((SqlString)s), 4326);
Es wird jedoch immer beanstandet, dass sich das Polygon auf einer einzelnen Halbkugel befinden muss, wo dies sicher der Fall ist.
Bin ich überhaupt auf dem richtigen Weg? Gibt es eine andere (einfachere) Möglichkeit, dies zu tun?