Подтвердить что ты не робот

Построить точку DbGeography из широты и долготы?

Я хочу построить точку DbGeography из двойников широты и долготы.

Я знаю, что могу преобразовать свои двойные строки в строки и использовать метод 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);

Но представляется бесполезным преобразовать мои двойные строки в строки, чтобы DbGeography снова проанализировала их как двойные.


Я попытался построить DbGeography прямо следующим образом:

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

но свойства Latitude и Longitude доступны только для чтения. (Это имеет смысл, потому что класс DbGeography обрабатывает гораздо больше, чем отдельные точки)


Класс DbGeography также предоставляет метод FromBinary, который принимает байтовый массив. Я не уверен, как в боевой мере моя широта и долгота удваивается в правильно отформатированный массив байтов.

Есть ли более простой способ построить экземпляр DbGeography из числа Широта и долготы, чем код вверху?

4b9b3361

Ответ 1

Короче говоря, нет.

SqlGeography имеет соответствующий метод:

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

... но вам все равно придется конвертировать в DbGeography. Если вас это интересует, см. Предыдущий ответ на мой перевод: DbGeography to SqlGeography (и обратно)

Тем не менее, я полностью согласен с Raphael Althaus в том, что вы должны создать статический метод, облегчающий вашу жизнь:

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

Тогда все использование может пройти через этот метод.

ИЗМЕНИТЬ

@Korayem Сделал отличное предложение, что я действительно сделал сам с самого начала, отвечая на вопрос. Большинство людей используют SRID 4326, поэтому мы можем упростить использование статического метода, перенося его как значение по умолчанию для параметра.