Построить точку 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 из числа Широта и долготы, чем код вверху?
Ответы
Ответ 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, поэтому мы можем упростить использование статического метода, перенося его как значение по умолчанию для параметра.