NoSQL için Azure Cosmos DB'de jeo-uzamsal ve GeoJSON konum verileri

ŞUNUN IÇIN GEÇERLIDIR: NoSQL

NoSQL için Azure Cosmos DB, geometrik şekilleri veya haritadaki gerçek konumları/çokgenleri temsil eden yerleşik jeo-uzamsal işlevlere sahiptir.

Jeo-uzamsal veriler genellikle yakınlık sorguları içerir. Örneğin, "geçerli konumumun yakınındaki tüm perakende satış konumlarını bul" sorusu, birden çok jeo-uzamsal veri nesnesi üzerinde yakınlık sorgusu kullanılarak yanıtlanır.

Yaygın jeo-uzamsal kullanım örnekleri şunlardır ancak bunlarla sınırlı değildir:

  • Coğrafi konum analizi, belirli konum tabanlı pazarlama girişimlerini yönlendirmektedir.
  • Perakende ve sağlık gibi sektörlerin kullanıcı deneyimini geliştirmesi için konum tabanlı kişiselleştirme.
  • İyileştirmenin kritik olduğu taşımacılık gibi sektörler için lojistik geliştirme.
  • Risk Analizi, diğer meta verileri desteklemek amacıyla sigorta ve finans gibi sektörlere yöneliktir.
  • Proxmiity tabanlı uyarılar ve bildirimler için durumsal farkındalık*.

Uzamsal verilere giriş

Uzamsal veriler uzaydaki nesnelerin konumunu ve şeklini açıklar. Çoğu uygulamada, bu noktalar ve şekiller dünyadaki nesnelere ve jeo-uzamsal verilere karşılık gelir. Uzamsal veriler, bir kişinin konumunu, ilgi alanını veya bir şehir sınırını ya da bir gölü temsil etmek için kullanılabilir.

NoSQL için Azure Cosmos DB iki uzamsal veri türünü destekler: geometri veri türü ve coğrafya veri türü.

  • Geometri türü, Öklid (düz) koordinat sistemindeki verileri temsil eder. Bu tür, çizgileri ölçme, çokgenleri kesiştirme ve noktalar arasındaki mesafeyi ölçme gibi yaygın geometrik görevler için kullanışlıdır.
  • Coğrafya türü, bir yuvarlak dünya koordinat sistemindeki verileri temsil eder. Bu tür, bir konumun belirli sınırlar içinde olup olmadığını belirleme ve konumlar arasındaki mesafeyi ölçme gibi yaygın coğrafi görevler için kullanışlıdır.

Desteklenen veri türleri

NoSQL için Azure Cosmos DB, GeoJSON belirtimi kullanılarak temsil edilen jeo-uzamsal nokta verilerinde dizin oluşturmayı ve sorgulamayı destekler. GeoJSON veri yapıları her zaman geçerli JSON nesneleridir, bu nedenle özel araçlar veya kitaplıklar olmadan Azure Cosmos DB kullanılarak depolanabilir ve sorgulanabilir.

Azure Cosmos DB aşağıdaki uzamsal veri türlerini destekler:

  • Nokta
  • Linestring
  • Poligon
  • Multipolygon

Noktalar

Nokta, boşlukta tek bir konumu belirtir. Jeo-uzamsal verilerde Nokta, bir marketin, bilgi noktasının, otomobilin veya şehrin sokak adresi olabilecek tam konumu temsil eder. Bir nokta, koordinat çifti (boylam ve enlem) kullanılarak GeoJSON (ve NOSQL için Azure Cosmos DB) ile temsil edilir.

Bu örnek GeoJSON noktasını göz önünde bulundurun. Boylam, -122.12826822304672 enlem ise şeklindedir 47.63980239335718.

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

İpucu

Coğrafi veri türü için GeoJSON belirtimi önce boylam, enlem saniyesini belirtir. Diğer eşleme uygulamalarında olduğu gibi boylam ve enlem açılardır ve derece cinsinden temsil edilir. Boylam değerleri Prime Meridian'dan ölçülür ve derece ile 180.0 derece arasında-180, enlem değerleri ise ekvatordan ölçülür ve derece ile 90.0 derece arasında -90.0 ölçülür.

Geometri veri türü için GeoJSON belirtimi önce yatay ekseni, ikinci dikey ekseni belirtir.

Uzamsal veri türleri, GeoJSON verilerini içeren bu tesis öğesi örneğinde gösterildiği gibi bir öğeye eklenebilir.

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

NoSQL için Azure Cosmos DB, WGS-84 başvuru sistemi başına gösterilen koordinatları yorumlar. Daha fazla bilgi için bkz. koordinat başvuru sistemleri.

Linestrings

LineStrings , boşluktaki iki veya daha fazla noktayı ve bunları bağlayan çizgi kesimlerini temsil eder. Jeo-uzamsal verilerde LineStrings genellikle otoyolları veya nehirleri temsil etmek için kullanılır.

Bu örnekte, iki nokta arasında çizilen bir çizgiyi temsil etmek için bir çizgi dizesi kullanılır.

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

Çokgen

Çokgen, kapalı bir LineString oluşturan bağlı noktaların sınırıdır. Çokgenler genellikle göller gibi doğal oluşumları veya şehirler ve devletler gibi siyasi yargı alanlarını temsil etmek için kullanılır.

Çokgen içindeki noktalar saat yönünün tersine belirtilmelidir. Saat yönünde belirtilen çokgen, içindeki bölgenin tersini temsil eder.

Bu örnekte, birden çok nokta bağlanarak çokgen oluşturulur.

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

İpucu

GeoJSON belirtimi, geçerli Çokgenler için, kapalı bir şekil oluşturmak için sağlanan son koordinat çiftinin ilk ile aynı olmasını gerektirir.

MultiPolygons

MultiPolygon, sıfır veya daha fazla Çokgenden oluşan bir dizidir. MultiPolygon'lar taraflarla örtüşemez veya ortak bir alana sahip olamaz. Bir veya daha fazla noktaya dokunabilirler.

MultiPolygon örneği aşağıda verilmiştir.

{
    "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]
        ]]]
}

Koordinat başvuru sistemleri

Dünyanın şekli düzensiz olduğundan, coğrafya jeo-uzamsal verilerinin koordinatları birçok koordinat başvuru sisteminde (CRS) temsil edilir. Her CRS'nin kendi referans çerçeveleri ve ölçü birimleri vardır. Örneğin, "National Grid of Britain", Birleşik Krallık için doğru olan ancak dışında olmayan bir başvuru sistemidir.

Günümüzde en popüler CRS, Dünya Jeodetik Sistemi WGS-84'dür. GPS cihazları ve Google Haritalar ve Bing Haritalar API'leri dahil olmak üzere birçok haritalama hizmeti WGS-84 kullanır. NoSQL için Azure Cosmos DB, yalnızca WGS-84 CRS kullanılarak coğrafya jeo-uzamsal verilerinin dizine alınmasını ve sorgulanmasını destekler.

Uzamsal verilerle öğe oluşturma

GeoJSON değerleri içeren öğeler oluşturduğunuzda, bunlar otomatik olarak uzamsal dizinle dizine oluşturulur. Bu varsayılan dizin oluşturma, kapsayıcının dizin oluşturma ilkesine uygun olarak gerçekleşir. Belirtilmezse, varsayılan dizin oluşturma ilkesi GeoJSON verilerini doğru bir şekilde dizine alır. Python veya Node.js gibi dinamik olarak yazılan bir dilde sdk ile çalışıyorsanız geçerli Bir GeoJSON oluşturmanız gerekir.

var userProfileitem = {
    "id":"cosmosdb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

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

Enlem ve boylam bilgilerine sahip değilseniz, ancak fiziksel adreslere veya konum adına sahipseniz, çevrimiçi bir hizmeti kullanarak gerçek koordinatları arayın. Bing Haritalar gibi hizmetler, bilinen bir konum adından gerçek coğrafya verilerini bulma konusunda yardımcı olabilir. Bing Haritalar coğrafi kodlama hakkında daha fazla bilgi için bkz. REST Hizmetleri'Bing Haritalar.