Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Yapay Zeka Arama'te OData coğrafi uzamsal işlevleri -
Not
Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.
Azure Yapay Zeka Arama, OData filtre ifadelerindegeo.distance ve geo.intersects işlevleri aracılığıyla coğrafi uzamsal sorguları destekler. İşlev geo.distance , biri alan veya aralık değişkeni, diğeri de filtrenin bir parçası olarak geçirilen sabit olmak üzere iki nokta arasındaki mesafeyi kilometre cinsinden döndürür. İşlev geo.intersects, belirli bir nokta belirli bir çokgenin içindeyse true döndürür; burada nokta bir alan veya aralık değişkenidir ve çokgen, filtrenin bir parçası olarak sabit bir değer şeklinde belirtilir.
İşlev, geo.distance arama sonuçlarını belirli bir noktadan uzaklıklara göre sıralamak için $orderby parametresinde de kullanılabilir. $orderby için söz dizimigeo.distance, $filter ile aynıdır.
geo.distance
$orderby kullanırken, uygulandığı alanın Edm.GeographyPoint türünde olması ve ayrıca sıralanabilir olması gerekir.
Not
geo.distance'ü $orderby parametresinde kullanırken, işlev için geçtiğiniz alan yalnızca tek bir coğrafi nokta içermelidir. Başka bir deyişle, Edm.GeographyPoint türünde olmalı ve Collection(Edm.GeographyPoint) olmamalıdır. Azure Yapay Zeka Arama'te koleksiyon alanlarına göre sıralama yapmak mümkün değildir.
Sözdizimi
Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu), ve geo.distance işlevlerinin geo.intersects dil bilgisini ve üzerinde çalıştıkları coğrafi uzamsal değerleri tanımlar:
geo_distance_call ::=
'geo.distance(' variable ',' geo_point ')'
| 'geo.distance(' geo_point ',' variable ')'
geo_point ::= "geography'POINT(" lon_lat ")'"
lon_lat ::= float_literal ' ' float_literal
geo_intersects_call ::=
'geo.intersects(' variable ',' geo_polygon ')'
/* You need at least four points to form a polygon, where the first and
last points are the same. */
geo_polygon ::=
"geography'POLYGON((" lon_lat ',' lon_lat ',' lon_lat ',' lon_lat_list "))'"
lon_lat_list ::= lon_lat(',' lon_lat)*
Etkileşimli söz dizimi diyagramı da kullanılabilir:
Not
EBNF'nin tamamı için Azure Yapay Zeka Arama için OData ifade söz dizimi başvurusuna bakın.
coğrafi.mesafe
geo.distance işlevi, türünde Edm.GeographyPoint iki parametre alır ve kilometre cinsinden aralarındaki uzaklık olan bir Edm.Double değer döndürür. Bu, genellikle mesafeleri metre cinsinden döndüren OData coğrafi uzamsal işlemlerini destekleyen diğer hizmetlerden farklıdır.
geo.distance parametrelerinden biri coğrafya noktası sabiti, diğeri ise bir alan yolu (ve Collection(Edm.GeographyPoint) türündeki bir alan üzerinde yineleyen bir filtre durumunda aralık değişkeni) olmalıdır. Bu parametrelerin sırası önemli değildir.
Coğrafya noktası sabiti, boylam ve enlemlerin sayısal sabitler olduğu biçimindedir geography'POINT(<longitude> <latitude>)'.
Not
Filtrede kullanırkengeo.distance, işlevin döndürdiği uzaklığı , , ltleveya gtkullanarak gebir sabitle karşılaştırmanız gerekir. İşleçler eq ve ne, mesafeler karşılaştırılırken desteklenmez. Örneğin, bu doğru kullanımıdır geo.distance: $filter=geo.distance(location, geography'POINT(-122.131577 47.678581)') le 5.
geo.intersects
geo.intersects işlevi, türü Edm.GeographyPoint ve sabiti Edm.GeographyPolygon olan bir değişken alır ve nokta çokgen sınırları içindeyse bir Edm.Boolean -- true döndürür, aksi takdirde false.
Çokgen, sınırlayıcı halka tanımlayan nokta dizisi olarak depolanan iki boyutlu bir yüzeydir (aşağıdaki örneklere bakın). Çokgenin kapatılması gerekir, yani ilk ve son nokta kümeleri aynı olmalıdır. Çokgendeki noktalar saat yönünün tersine olmalıdır.
180. meridyeni kapsayan coğrafi uzamsal sorgular ve çokgenler
Çoğu coğrafi uzamsal sorgu kitaplığı için, 180. meridyeni (tarih çizgisine yakın) içeren bir sorgu oluşturmak ya yasaktır ya da çokgeni, meridyenin iki tarafında bir tane olmak üzere ikiye bölmek gibi bir alternatif çözüm gerektirir.
Azure Yapay Zeka Arama'te, 180 derece boylam içeren coğrafi uzamsal sorgular, sorgu şekli dikdörtgense ve koordinatlarınız boylam ve enlem boyunca bir kılavuz düzenine hizalanırsa beklendiği gibi çalışır (örneğin). geo.intersects(location, geography'POLYGON((179 65, 179 66, -179 66, -179 65, 179 65))' Aksi takdirde dikdörtgen olmayan veya hizalanmamış şekiller için bölünmüş çokgen yaklaşımını göz önünde bulundurun.
Coğrafi uzamsal işlevler ve null
Azure Yapay Zeka Arama'teki diğer tüm koleksiyon dışı alanlar gibi, türdeki Edm.GeographyPoint alanlar da değer içerebilir null . Azure Yapay Zeka Arama, geo.intersects olan bir alanı değerlendirdiğinde, sonuç her zaman null olurfalse. Bu durumda geo.distance'in davranışı bağlama göre değişir.
- Filtrelerde,
geo.distancebirnullalan sonuç olaraknullverir. Bu, herhangi bir null olmayan değere kıyaslanullfalseolarak değerlendirildiğinde, belgenin eşleşmeyeceği anlamına gelir. - $orderby kullanarak sonuçları sıralarken,
geo.distancebirnullalanın mümkün olan en yüksek uzaklığı elde edilir. Böyle bir alana sahip belgeler, sıralama yönüasckullanıldığında diğerlerinden daha düşük (varsayılan) ve yön olduğundadescdiğerlerinden daha yüksek sıralanır.
Örnekler
Filtre örnekleri
Belirli bir referans noktasına 10 kilometre mesafedeki tüm otelleri bulun (konum, türünde Edm.GeographyPointbir alantır):
geo.distance(location, geography'POINT(-122.131577 47.678581)') le 10
Çokgen olarak tanımlanan belirli bir görünüm penceresi içindeki tüm otelleri bulun (konum türündeki Edm.GeographyPointbir alandır). Çokgenin kapatıldığını (ilk ve son nokta kümeleri aynı olmalıdır) ve noktaların saat yönünün tersine listelenmesi gerektiğini unutmayın.
geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))')
Sıralama örnekleri
rating azalan sıralama ile otelleri sıralayın ve ardından verilen koordinatlardan olan uzaklıklara göre artan şekilde düzenleyin.
rating desc,geo.distance(location, geography'POINT(-122.131577 47.678581)') asc
Otelleri ve search.scoredeğerine göre azalan düzende rating sıralayın ve ardından verilen koordinatlara göre artan düzende sıralayın; böylece aynı derecelendirmeye sahip iki otel arasında en yakın olan önce listelenir:
search.score() desc,rating desc,geo.distance(location, geography'POINT(-122.131577 47.678581)') asc