Как и многие люди, я был взволнован, когда команда Microsoft Azure объявил о поддержке пространственных запросов в DocumentDB два месяца назад. В частности, DocumentDB поддерживает запрос ST_DISTANCE
, который позволяет запрашивать документы по их расстоянию от другой геометрии. Пример использования LINQ можно найти в документации Azure. :
foreach (UserProfile user in client.CreateDocumentQuery<UserProfile>(collection.SelfLink)
.Where(u => u.ProfileType == "Public" && a.Location.Distance(new Point(32.33, -4.66)) < 30000))
{
Console.WriteLine("\t" + user);
}
В этом примере запрос находится между двумя точками. Однако тот факт, что в документации говорится о расстоянии между «геометриями» и «точечными выражениями», наводит меня на мысль, что можно запросить не точечные геометрии, а другие геометрии.
У меня есть документы с ограничивающим многоугольником в качестве атрибута. Я хочу запросить эти документы по их близости друг к другу. Я пробовал следующее:
DocumentClient Client = Connection.Client;
var nearbyItems = Client
.CreateDocumentQuery<T>(Collection.DocumentsLink)
.Where(x.BoundingPolygon.Distance(adjacentPolygon) < 1000)
.ToList();
Я пробовал это со следующими соседними и очень простыми ограничивающими многоугольниками:
Полигон документа:
"geometry": {
"type": "Polygon",
"coordinates": [[
[-33,18],[-34,18],[-34,19],[-33,19],[-33,18]
]]
}
Смежный полигон:
"geometry": {
"type": "Polygon",
"coordinates": [[
[-33,19],[-34,19],[-34,20],[-33,20],[-33,19]
]]
}
Но документ не возвращается из моего запроса, даже при увеличении расстояния до тысячи километров.
Можно ли запросить документ DocumentDB с ограничивающим многоугольником по близости к другому ограничивающему многоугольнику?