NoSQL için Azure Cosmos DB'de jeo-uzamsal ve GeoJSON konum verileri
UYGULANANLAR: 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 bir 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önlendirme.
- Kullanıcı deneyimini geliştirmek için perakende ve sağlık gibi sektörlere yönelik konum tabanlı kişiselleştirme.
- İyileştirmenin kritik olduğu taşımacılık gibi sektörler için lojistik geliştirme.
- Diğer meta verileri desteklemek için sigorta ve finans gibi sektörler için Risk Analizi.
- Proxy 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 çekici bir yeri veya bir şehrin 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ü, 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 verilerinin dizine alınmasını ve sorgulanmasını 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 ve -122.12826822304672
enlem ş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 de açılardır ve derece cinsinden gösterilir. Boylam değerleri Asal Meridyen'den ölçülür ve derece ile derece arasında-180
, enlem değerleri ise ekvatordan ölçülür ve derece ile 90.0
derece arasındadır-90.0
.180.0
Geometri veri türü için GeoJSON belirtimi önce yatay ekseni, dikey ekseni saniye olarak belirtir.
GeoJSON verilerini içeren bu tesis öğesi örneğinde gösterildiği gibi uzamsal veri türleri 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 eyaletler 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 sağlanan son koordinat çiftinin, kapalı bir şekil oluşturmak için ilk koordinat çifti ile aynı olmasını gerektirir.
MultiPolygons
MultiPolygon, sıfır veya daha fazla Çokgenden oluşan bir dizidir. MultiPolygon'lar taraflarla çakışamaz veya ortak bir alana sahip olamaz. Bir veya daha fazla noktada dokunabilirler.
Aşağıda MultiPolygon örneği 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
Yerkürenin ş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 bir başvuru sistemidir, ancak bunun dışında değildir.
Günümüzde kullanılan 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 eşleme 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 bir SDK ile çalışıyorsanız geçerli Bir GeoJSON oluşturmanız gerekir.
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
});
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 kodlaması hakkında daha fazla bilgi için bkz . Bing Haritalar REST Hizmetleri.