Construct DbGeography point from Latitude and Longitude doubles?

entity-framework geospatial

Question

I want to construct a DbGeography point from latitude and longitude doubles.

I know I can convert my doubles to strings and use the DbGeography.FromText method.

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

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

var point = DbGeography.FromText(pointString);

But it seems wasteful to convert my doubles to strings just so that DbGeography can parse them as doubles again.


I tried constructing a DbGeography directly like this:

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

but the Latitude and Longitude properties are read-only. (Which makes sense, because the DbGeography class handles much more than individual points)


The DbGeography class also provides a FromBinary method that takes a byte array. I'm not sure how to martial my latitude and longitude doubles into a correctly-formatted byte array.

Is there a simpler way to construct a DbGeography instance out of Latitude and Longitude doubles than the code at the top?

1
41
4/16/2014 1:51:40 PM

Popular Answer

In short, no there isn't.

SqlGeography has an appropriate method:

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

... but you would then have to convert to DbGeography anyway. If you are interested in this, see a previous answer of mine on converting: DbGeography to SqlGeography (and back)

That said, I completely agree with Raphael Althaus in that you should create a static method to make your life easier:

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);
}

Then all usage can go through that method.

EDIT

@Korayem Made an excellent suggestion that I actually have done myself since originally answering the question. Most people use the SRID 4326 so we can make the static method easier to use by carrying that as the parameter's default value.

52
5/23/2017 12:18:11 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow