Saya merancang tabel di SQL Server 2008 yang akan menyimpan daftar pengguna dan koordinat Google Maps (bujur & lintang).
Apakah saya membutuhkan dua bidang, atau dapatkah dilakukan dengan 1?
Apa tipe data terbaik (atau paling umum) yang digunakan untuk menyimpan jenis data ini?
Saya tidak tahu jawaban untuk SQL Server tetapi ...
Di MySQL, simpan sebagai
FLOAT( 10, 6 )
Ini adalah rekomendasi resmi dari dokumentasi pengembang Google .
sumber
lat
danlng
mengungguligeorgraphy
, bahkan dengan indeks kepadatan tinggi di SQL 2014. Misalnya: menemukan semua titik dalam persegi panjang. Hanya saja saya tidak yakin, saya melihat bahwa Google Maps sekarang menggunakan 7, bukan 6 digit?Cara saya melakukannya: Saya menyimpan lintang dan bujur dan kemudian saya memiliki kolom ketiga yang merupakan tipe geografi turunan otomatis dari dua kolom pertama. Tabelnya terlihat seperti ini:
Ini memberi Anda fleksibilitas kueri spasial di kolom geoPoint dan Anda juga bisa mengambil nilai lintang dan bujur saat Anda membutuhkannya untuk ditampilkan atau diekstrak untuk tujuan csv.
sumber
Point
daripadaSTGeomFromText
. Sebagai contoh:[geography]::Point([Latitude], [Longitude], 4326)
.Saya benci menjadi pelawan bagi mereka yang mengatakan "ini adalah tipe baru, mari kita gunakan". Jenis spasial SQL Server 2008 yang baru memiliki beberapa kelebihan - yaitu efisiensi, namun Anda tidak dapat secara membabi buta mengatakan selalu menggunakan jenis itu. Itu benar-benar tergantung pada beberapa masalah gambaran yang lebih besar.
Sebagai contoh, integrasi. Tipe ini memiliki tipe yang setara di .Net - tapi bagaimana dengan interop? Bagaimana dengan mendukung atau memperluas versi .Net? Bagaimana dengan mengekspos jenis ini di seluruh lapisan layanan ke platform lain? Bagaimana dengan normalisasi data - mungkin Anda tertarik pada informasi lintang atau bujur sebagai informasi yang berdiri sendiri. Mungkin Anda sudah menulis logika bisnis yang kompleks untuk menangani long / lat.
Saya tidak mengatakan bahwa Anda tidak boleh menggunakan tipe spasial - dalam banyak kasus Anda harus menggunakannya. Saya hanya mengatakan Anda harus mengajukan beberapa pertanyaan kritis sebelum menempuh jalan itu. Agar saya dapat menjawab pertanyaan Anda dengan paling akurat, saya perlu tahu lebih banyak tentang situasi spesifik Anda.
Menyimpan panjang / lintang secara terpisah atau dalam tipe spasial keduanya merupakan solusi yang layak, dan satu mungkin lebih disukai daripada yang lain tergantung pada keadaan Anda sendiri.
sumber
Yang ingin Anda lakukan adalah menyimpan Latitude dan Longitude sebagai tipe Spasial SQL2008 yang baru -> GEOGRAPHY.
Ini screen shot dari sebuah tabel, yang saya punya.
teks alt http://img20.imageshack.us/img20/6839/zipcodetable.png
Dalam tabel ini, kami memiliki dua bidang yang menyimpan data geografi.
Alasan utama mengapa Anda ingin menyimpannya ke database sebagai tipe GEOGRAFI adalah agar Anda dapat memanfaatkan semua metode SPASIAL darinya -> mis. Titik di Poly, Jarak antara dua titik, dll.
BTW, kami juga menggunakan Google Maps API untuk mengambil data lintang / bujur dan menyimpannya di DB Sql 2008 kami - jadi metode ini berfungsi.
sumber
SQL Server memiliki dukungan untuk informasi terkait spasial. Anda dapat melihat lebih lanjut di http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx .
Sebagai alternatif, Anda dapat menyimpan informasi sebagai dua bidang dasar, biasanya pelampung adalah tipe data standar yang dilaporkan oleh sebagian besar perangkat dan cukup akurat dalam satu atau dua inci - lebih dari cukup untuk Google Maps.
sumber
latitute dan longitude dari Google Maps harus disimpan sebagai data Point (note capital P) di SQL server dengan tipe data geografi.
Dengan asumsi data Anda saat ini disimpan dalam tabel
Sample
sebagai varchar di bawah kolomlat
danlon
, di bawah kueri akan membantu Anda mengonversi ke geografiPS: Lain kali ketika Anda melakukan seleksi pada tabel ini dengan data geografi, selain dari tab Hasil dan Pesan, Anda juga akan mendapatkan tab hasil Spasial seperti di bawah ini untuk visualisasi
sumber
Jika Anda menggunakan Entity Framework 5 <Anda dapat menggunakan
DbGeography
. Contoh dari MSDN:https://msdn.microsoft.com/en-us/library/hh859721(v=vs.113).aspx
Sesuatu yang saya perjuangkan kemudian saya mulai gunakan
DbGeography
adalahcoordinateSystemId
. Lihat jawaban di bawah untuk penjelasan dan sumber yang sangat baik untuk kode di bawah ini.https://stackoverflow.com/a/25563269/3850405
sumber
Jika Anda hanya akan menggantinya menjadi URL, saya kira satu bidang akan melakukannya - sehingga Anda dapat membentuk URL seperti
tetapi karena ini adalah dua bagian data, saya akan menyimpannya di bidang terpisah
sumber
Simpan keduanya sebagai float, dan gunakan kata kunci unik di atasnya. I.em
sumber
House A
, dan akan pindah keHouse B
, rumah tempat Alice dulu tinggal. Bob segera tidak akan dapat menyimpan alamatnya (lokasi), karena Alice belum mengupdatenya - atau tidak akan pernah.