Bagikan melalui


Data lokasi Geospasial dan GeoJSON di Azure Cosmos DB untuk NoSQL

BERLAKU UNTUK: NoSQL

Azure Cosmos DB for NoSQL memiliki fungsionalitas geospasial bawaan untuk mewakili bentuk geometris atau lokasi/poligon aktual di peta.

Data geospasial sering melibatkan kueri kedekatan. Misalnya, pertanyaan "temukan semua lokasi ritel di dekat lokasi saya saat ini" dijawab menggunakan kueri kedekatan melalui beberapa objek data geospasial.

Kasus penggunaan geospasial umum termasuk, tetapi tidak terbatas pada:

  • Analitik geolokasi, mendorong inisiatif pemasaran berbasis lokasi tertentu.
  • Personalisasi berbasis lokasi, untuk industri seperti ritel dan layanan kesehatan untuk meningkatkan pengalaman pengguna.
  • Peningkatan logistik, untuk industri seperti transportasi di mana pengoptimalan sangat penting.
  • Analisis Risiko, untuk industri seperti asuransi dan keuangan untuk melengkapi metadata lainnya.
  • Kesadaran situasional*, untuk pemberitahuan dan pemberitahuan berbasis kedekatan.

Pengenalan data spasial

Data spasial menjelaskan posisi dan bentuk objek dalam ruang. Di sebagian besar aplikasi, titik dan bentuk ini sesuai dengan objek di bumi dan data geospasial. Data spasial dapat digunakan untuk mewakili lokasi seseorang, tempat menarik, atau batas kota, atau danau.

Azure Cosmos DB for NoSQL mendukung dua jenis data spasial: jenis data geometri dan jenis data geografi .

  • Jenis geometri mewakili data dalam sistem koordinat Euclidean (datar). Jenis ini berguna untuk tugas geometris umum, seperti mengukur garis, berpotangan poligon, dan mengukur jarak antar titik.
  • Tipe geografi mewakili data dalam sistem koordinat bumi bulat. Jenis ini berguna untuk tugas geografis umum, seperti menentukan apakah lokasi berada dalam batas tertentu dan mengukur jarak antar lokasi.

Tipe data yang didukung

Azure Cosmos DB for NoSQL mendukung pengindeksan dan kueri data titik geospasial yang diwakili menggunakan spesifikasi GeoJSON. Struktur data GeoJSON selalu merupakan objek JSON yang valid, sehingga dapat disimpan dan dikueri menggunakan Azure Cosmos DB tanpa alat bantu atau pustaka khusus.

Azure Cosmos DB mendukung tipe data spasial berikut:

  • Titik
  • LineString
  • Poligon
  • MultiPolygon

Titik

Titik menunjukkan posisi tunggal dalam ruang. Dalam data geospasi, Titik mewakili lokasi yang tepat, yang bisa jadi merupakan alamat jalan toko kelontong, kios, mobil, atau kota. Titik diwakili dalam GeoJSON (dan Azure Cosmos DB untuk NOSQL) menggunakan pasangan koordinatnya (bujur dan lintang).

Pertimbangkan contoh titik GeoJSON ini. Garis bujur adalah -122.12826822304672 dan garis lintang adalah 47.63980239335718.

{
  "type": "Point",
  "coordinates": [
    -122.12826822304672,
    47.63980239335718
  ]
}

Tip

Untuk tipe data geografi, spesifikasi GeoJSON menentukan bujur yang pertama dan lintang yang kedua. Seperti dalam aplikasi pemetaan lainnya, bujur dan lintang adalah sudut dan dinyatakan dalam derajat. Nilai garis bujur diukur dari Prime Meridian dan berada di antara -180 derajat dan 180.0 derajat, dan nilai garis lintang diukur dari khatulistiwa dan berada di antara -90.0 derajat dan 90.0 derajat.

Untuk tipe data geometri, spesifikasi GeoJSON menentukan sumbu horizontal yang pertama dan sumbu vertikal yang kedua.

Jenis data spasial dapat disematkan dalam item seperti yang ditunjukkan dalam contoh item fasilitas ini yang menyertakan data GeoJSON.

{
  "name": "Headquarters",
  "location": {
    "type": "Point",
    "coordinates": [
      -122.12826822304672,
      47.63980239335718
    ]
  },
  "category": "business-offices"
}

Azure Cosmos DB for NoSQL menginterpretasikan koordinat seperti yang diwakili sesuai sistem referensi WGS-84. Untuk informasi selengkapnya, lihat mengoordinasikan sistem referensi.

Garis

Garis mewakili serangkaian dua titik atau lebih dalam ruang dan segmen garis yang menghubungkannya. Dalam data geospasi, Garis umumnya digunakan untuk mewakili jalan raya atau sungai.

Dalam contoh ini, string garis digunakan untuk mewakili garis yang digambar di antara dua titik.

{
  "type": "LineString",
  "coordinates": [
    [ 31.8, -5 ],
    [ 31.8, -4.7 ]
  ]
}

Poligon

Poligon adalah batas titik terhubung yang membentuk LineString tertutup. Poligon umumnya digunakan untuk mewakili formasi alami seperti danau atau yurisdiksi politik seperti kota dan negara bagian.

Titik dalam Poligon harus ditentukan dalam urutan berlawanan arah jarum jam. Poligon yang ditentukan dalam urutan searah jarum jam mewakili inversi wilayah di dalamnya.

Dalam contoh ini, poligon dibuat dengan menghubungkan beberapa titik.

{
    "type":"Polygon",
    "coordinates":[ [
        [ 31.8, -5 ],
        [ 32, -5 ],
        [ 32, -4.7 ],
        [ 31.8, -4.7 ],
        [ 31.8, -5 ]
    ] ]
}

Tip

Spesifikasi GeoJSON mengharuskan bahwa untuk Poligon yang valid, pasangan koordinat terakhir yang disediakan harus sama dengan yang pertama, untuk membuat bentuk tertutup.

MultiPoligon

MultiPoligon adalah sekumpulan Poligon nol atau lebih. MultiPolygon tidak dapat tumpang tindih atau memiliki area umum. Mereka mungkin menyentuh satu atau beberapa titik.

Berikut adalah contoh MultiPolygon.

{
    "type":"MultiPolygon",
    "coordinates":[[[
            [52.0, 12.0],
            [53.0, 12.0],
            [53.0, 13.0],
            [52.0, 13.0],
            [52.0, 12.0]
        ]],
        [[
            [50.0, 0.0],
            [51.0, 0.0],
            [51.0, 5.0],
            [50.0, 5.0],
            [50.0, 0.0]
        ]]]
}

Sistem referensi koordinat

Karena bentuk bumi tidak teratur, koordinat data geospasial geografi diwakili dalam banyak sistem referensi koordinat (CRS). Setiap CRS memiliki bingkai referensi dan unit pengukuran mereka sendiri. Contohnya, "National Grid of Britain" adalah sistem referensi yang akurat untuk Inggris, tetapi tidak di luarnya.

CRS paling populer yang digunakan saat ini adalah World Geodetic System WGS-84. Perangkat GPS, dan banyak layanan pemetaan termasuk Google Maps dan Bing Maps API menggunakan WGS-84. Azure Cosmos DB for NoSQL mendukung pengindeksan dan kueri data geospasial geografi menggunakan WGS-84 CRS saja.

Membuat item dengan data spasial

Saat Anda membuat item yang berisi nilai GeoJSON, item tersebut secara otomatis diindeks dengan indeks spasial. Pengindeksan default ini terjadi sesuai dengan kebijakan pengindeksan kontainer. Kebijakan pengindeksan default, jika tidak ditentukan, akan secara akurat mengindeks data GeoJSON. Jika Anda bekerja dengan SDK dalam bahasa yang diketik secara dinamis seperti Python atau Node.js, Anda harus membuat GeoJSON yang valid.

var userProfileitem = {
    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

client.createitem(`dbs/${databaseName}/colls/${collectionName}`, userProfileitem, (err, created) => {
    // additional code within the callback
});

Jika Anda tidak memiliki informasi garis lintang dan bujur, tetapi memiliki alamat fisik atau nama lokasi, cari koordinat aktual menggunakan layanan online. Layanan seperti Bing Maps dapat membantu menemukan data geografi aktual dari nama lokasi yang diketahui. Untuk informasi selengkapnya tentang geocoding Bing Maps, lihat Layanan REST Bing Maps.