0

私のプロジェクトには、Trip というエンティティがあります。この旅行には、開始と終了の 2 つのポイントがあります。開始と終了は、住所 atc などのいくつかのプロパティが追加された地理座標です。

必要なのは、開始と終了の両方の検索基準を満たすすべての旅行を照会することです。

みたいな

select from trips where start near 16,16 and finish near 18,20 where type = type

私の質問は次のとおりです。どのデータベースがそのような機能を提供できますか?

私が試したこと

geo インデックスをサポートしているが、このユース ケースをサポートしていない mongodb を調査しました。現在のソリューションは、トリップへの参照を持つ個別のドキュメントとしてポイントを保存します。開始と終了に対して 2 つの個別のクエリを実行し、関連付けられた旅行の ID を抽出して、開始と終了の両方で見つかった旅行 ID を選択し、最終的に旅行のコレクションを返します。

小さなサンプルでは問題なく動作しますが、コレクションが大きくなると遅くなり、右手で左耳を引っ掻くようなものです。

だから私はより良い解決策を探しています。

neo4j とその空間プラグインについては知っていますが、Windows で動作させることさえできませんでした。それは私たちのユースケースをサポートしますか?

または、より良い解決策はありますか?できればphpで書かれたオブジェクトマッパーを使用してください。

4

1 に答える 1

1

edze のように、Postgres (PostGIS) または SQLite(SpatiaLite) はあなたが探しているものです

SELECT
  *
FROM
  trips 
WHERE
  ST_Distance(ST_StartPoint(way), ST_GeomFromText('POINT(16 16)',4326) < 5
  AND ST_Distance(ST_EndPoint(way), ST_GeomFromText('POINT(18 20)',4326) < 5
  AND type = 'type'
于 2012-08-30T14:49:59.973 に答える