Cree un círculo de polígonos de SqlGeography desde un centro y un radio
Me gustaría guardar un círculo en un campo de geografía de SQL Server 2008 usando c #.
En c # tengo una latitud, una longitud y un radio, pero simplemente no puedo encontrar una manera de calcular el polígono que representaría el círculo y crear unSqlGeography
de eso.
He intentado seguir la función para crear el polígono:
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;
}
Y luego tratar de convertir estoList<Coordinate>
a una cadena analizable:
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);
Pero siempre se queja de que el polígono tiene que estar en un solo hemisferio, donde estoy seguro de que es el caso.
¿Estoy en el camino correcto? ¿Hay alguna otra forma (más simple) de hacer esto?