homepage functions framework ejemplo curso entity-framework geospatial

entity-framework - functions - function in entity framework



¿Construye DbGeography Point desde Latitude y Longitude Dobles? (2)

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 previa mía sobre la conversión: DbGeography a SqlGeography (y viceversa)

Dicho esto, estoy completamente de acuerdo con Raphael Althaus en que debes 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.

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

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

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)


La clase DbGeography también proporciona un método FromBinary 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?


Puedes simplificarlo así:

DbGeography.FromText(String.Format(CultureInfo.InvariantCulture, "POINT({0} {1})", longitude, latitude));

por ejemplo:

DbGeography.FromText("POINT(-73.935242 40.730610)"),

sin usar int srid = 4326; que es el valor predeterminado.

Si lo usa muchas veces, úselo en un método estático:

private static DbGeography CreatePoint(double latitude, double longitude) { return DbGeography.FromText(String.Format(CultureInfo.InvariantCulture, "POINT({0} {1})", longitude, latitude)); }

PD: No te olvides de usar CultureInfo.InvariantCulture porque obtendrás una excepción para algunas culturas.