RavenDBでは、空間データを扱うためのインデックスを定義できます。 -
public class EventWithWKT
{
public string Id { get; set; }
public string Name { get; set; }
public string WKT { get; set; }
}
私はその後
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
あなたができるようなものを意味ポリゴンWKTによって (>ウェルノウンテキストマークアップhttps://en.wikipedia.org/wiki/Well-known_text WKT): あなたはWKTのように定義空間ポリゴンとの文書を持っていると仮定しましょう
public class EventsWithWKT_ByNameAndWKT : AbstractIndexCreationTask<EventWithWKT>
{
public EventsWithWKT_ByNameAndWKT()
{
Map = events => from e in events
select new
{
Name = e.Name,
WKT = e.WKT
};
Spatial(x => x.WKT, options => options.Geography.Default());
}
}
インデックス定義の "Spatial"メソッドを呼び出すことによって、次のようにWKTを処理するインデックスを定義します。 RavenDBは特別な列を作成し、空間クエリを使用してクエリを実行することができます。
は今、特定のポイントがたりない、次のクエリで行うことができる書類のポリゴン内にあるかどうかでフィルタリング:定義し、空間データを使用するための唯一の方法ではありません
var results = session
.Query<EventWithWKT, EventsWithWKT_ByNameAndWKT>()
.Customize(x => x.RelatesToShape("WKT", "POINT (30 10)", SpatialRelation.Within))
.ToList();
を。あなたは、これらのドキュメントの記事でRavenDB空間インデックスについての詳細を読むことができます:
私は、ある程度、空間インデックスを認識しています。私の質問は、単一の単純なポリゴンでポイントデータを照会する方法ではありません。問題はむしろです:ポイント数とポリゴン数の両方が大きい場合(あるいは非常に複雑なポリゴンが1つの場合)、ポリゴン内のポイントをどのように見つけることができますか?限界。 – AdamAL
セッションごとの制限をバイパスすることについて話している場合は、遅延クエリを実行することがバイパスする方法の1つです(https://ravendb.net/docs/article-page/3.5/csharp/client-api/session/)。クエリ/実行方法 - クエリ - 遅れて)。レイジークエリは1つの要求にグループ化され、サーバー上で並列に処理されます – Michael
また、MULTIPOINTとMULTIPOLYGONも同様に動作します。それぞれの「参加」のためにいくつのポイントとポリゴンを持つことができますか?また、この種の質問はRavenDBのメーリングリストに適しています。なぜなら、議論が必要かもしれないからです(https://groups.google.com/forum/#!forum/ravendb) – Michael