Pertanyaan Bangun titik DbGeography dari garis lintang dan garis bujur ganda?


Saya ingin membangun titik DbGeography dari garis lintang dan garis bujur ganda.

Saya tahu saya dapat mengkonversi ganda saya ke string dan menggunakan DbGeography.FromText metode.

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

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

var point = DbGeography.FromText(pointString);

Tapi tampaknya sia-sia untuk mengubah ganda saya menjadi string hanya agar DbGeography dapat mengurai mereka sebagai ganda lagi.


Saya mencoba membangun DbGeography secara langsung seperti ini:

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

tetapi properti Garis Lintang dan Bujur adalah hanya-baca. (Yang masuk akal, karena kelas DbGeography menangani lebih banyak daripada poin individu)


Itu DbGeography kelas juga menyediakan FromBinary metode yang mengambil array byte. Saya tidak yakin bagaimana cara bela diri lintang dan bujur saya berfungsi ganda menjadi array byte yang diformat dengan benar.

Apakah ada cara yang lebih mudah untuk membuat contoh DbGeografi dari garis lintang dan garis bujur ganda daripada kode di atas?


32
2018-04-16 13:51


asal


Jawaban:


Singkatnya, tidak ada.

SqlGeography memiliki metode yang tepat:

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

... tetapi Anda kemudian harus mengonversi ke DbGeography. Jika Anda tertarik dengan ini, lihat jawaban saya sebelumnya tentang konversi: DbGeography to SqlGeography (dan kembali)

Yang mengatakan, saya sepenuhnya setuju dengan Raphael Althaus karena itu Anda harus membuat metode statis untuk mempermudah hidup Anda:

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

Kemudian semua penggunaan bisa melalui metode itu.

EDIT

@Korayem Membuat saran yang sangat bagus yang saya benar-benar telah lakukan sendiri sejak awalnya menjawab pertanyaan itu. Kebanyakan orang menggunakan SRID 4326 sehingga kita dapat membuat metode statis lebih mudah digunakan dengan membawa itu sebagai nilai default parameter.


45
2018-04-16 14:16