Я пытаюсь отправить запрос с точкой местоположения в Azure Cosmos DB (MongoDB) и получить местоположения рядом с этой точкой.Я получил большую часть информации от здесь .И я использую Microsoft.Azure.Documents.Spatial;
.
До сих пор я пробовал много решений других старых постов, и у меня ничего не получалось.
Мое определение класса:
public class Place : INotifyPropertyChanged
{
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
public Guid Id { get; set; }
Point _location;
[BsonElement("Location")]
public Point Location
{
get => _location;
set
{
if (_location == value)
return;
_location = value;
HandlePropertyChanged();
}
}
long _addedDate;
[BsonElement("AddedDate")]
public long AddedDate
{
get => _addedDate;
set
{
if (_addedDate == value)
return;
_addedDate = value;
HandlePropertyChanged();
}
}
void HandlePropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Монго соединение:
// APIKeys.Connection string is found in the portal under the "Connection String" blade
MongoClientSettings settings = MongoClientSettings.FromUrl(
new MongoUrl(APIKeys.ConnectionString)
);
settings.SslSettings =
new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };
// Initialize the client
var mongoClient = new MongoClient(settings);
// This will create or get the database
var db = mongoClient.GetDatabase(dbName);
// This will create or get the collection
var collectionSettings = new MongoCollectionSettings { ReadPreference = ReadPreference.Nearest };
PlacesCollection = db.GetCollection<Place>(collectionName, collectionSettings);
Запрос:
var point = new Point(22, -5);
IMongoQueryable<Place> query = PlacesCollection.AsQueryable().Where(p => p.Location.Distance(point) < 30000);
return query.ToList();
Я получаю следующую ошибку в return query.ToList()
:
Необработанное исключение:
System.InvalidOperationException: {document} {Location} .Distance (значение (Microsoft.Azure.Documents.Spatial.Point)) не поддерживается.
Я не понимаючто не поддерживается ни как создать правильный запрос для этого.Есть идеи?
Редактировать: стек вызовов
0xE0 in XamFormsMaps.Core.Services.MongoService.GetPlacesNear at C:\Users\Role\source\repos\XamFormsMaps\XamFormsMaps\XamFormsMaps.Core\Services\MongoService.cs:84,13 C#
[External Code]
0x20 in XamFormsMaps.Core.Services.DatabaseService.GetPlacesNear at C:\Users\Role\source\repos\XamFormsMaps\XamFormsMaps\XamFormsMaps.Core\Services\DatabaseService.cs:20,13 C#
0x7A in XamFormsMaps.Core.ViewModels.MapViewModel.GetPlacesAsync at C:\Users\Role\source\repos\XamFormsMaps\XamFormsMaps\XamFormsMaps.Core\ViewModels\MapViewModel.cs:112,17 C#
0x6D in XamFormsMaps.Core.Pages.MapPage.<-ctor<-ctor>b__0_1>d at C:\Users\Role\source\repos\XamFormsMaps\XamFormsMaps\XamFormsMaps.Core\Pages\MapPage.xaml.cs:27,17 C#