Pregunta ¿Construye DbGeography Point desde Latitude y Longitude Dobles?


Quiero construir un punto DbGeography a partir de dobles de latitud y longitud.

Sé que puedo convertir mis dobles en cadenas y usar el DbGeography.FromText método.

var latitude = 50.0d;
var longitude = 30.0d;

var pointString = string.Format(
    "POINT({0} {1})",
    longitude.ToString(),
    latitude.ToString());

var point = DbGeography.FromText(pointString);

Pero parece un desperdicio convertir mis dobles en cadenas solo para que DbGeography pueda analizarlos como dobles nuevamente.


Intenté construir una DbGeography directamente así:

var point = new DbGeography()
{
    Latitude = 50,
    Longitude = 30
};

pero las propiedades Latitude y Longitude son de solo lectura. (Lo cual tiene sentido, porque la clase DbGeography maneja mucho más que puntos individuales)


los DbGeography clase también proporciona un FromBinary método que toma una matriz de bytes. No estoy seguro de cómo marcial mi latitud y longitud se duplica en una matriz de bytes con formato correcto.

¿Hay una manera más simple de construir una instancia de DbGeography fuera de Latitude y Longitude que el código en la parte superior?


32
2018-04-16 13:51


origen


Respuestas:


En resumen, no, no hay.

SqlGeography tiene un método apropiado:

Microsoft.SqlServer.Types.SqlGeography.Point(latitude, longitude, srid);

... pero entonces tendría que convertir a DbGeography de todos modos. Si está interesado en esto, vea una respuesta anterior mía sobre la conversión: DbGeography a SqlGeography (y viceversa)

Dicho eso, estoy completamente de acuerdo con Raphael Althaus en eso deberías crear un método estático para hacerte la vida más fácil:

public static DbGeography CreatePoint(double lat, double lon, int srid = 4326)
{
    string wkt = String.Format("POINT({0} {1})", lon, lat);

    return DbGeography.PointFromText(wkt, srid);
}

Entonces todo el uso puede pasar por ese método.

EDITAR

@Korayem hizo una sugerencia excelente de que realmente me he hecho desde la primera respuesta a la pregunta. La mayoría de las personas usa el SRID 4326 para que podamos hacer que el método estático sea más fácil de usar al llevarlo como el valor predeterminado del parámetro.


45
2018-04-16 14:16