Docs Menu
Docs Home
/ / /
C#/.NET
/

地理空間で検索する

項目一覧

  • Overview
  • 地理空間データ形式
  • GeoJSON
  • Legacy Coordinate Pairs
  • 地理空間インデックス
  • クエリ演算子
  • 近接性によるクエリ
  • 多角形によるクエリ
  • 追加リソース

このガイドでは、地理空間データ、データ形式、インデックス、クエリの扱い方を説明します。

地理空間データは、地球の表面上の地理的ロケーションを表します。

地理空間データの例には、次のようなものがあります。

  • 映画館のロケーション

  • 国境

  • 自転車走行ルート

  • ニューヨーク市の犬の運動エリア

  • グラフ上の点

MongoDB 内のすべての地理空間データは、次のいずれかの形式で保存されます。

  • GeoJSON は、地球のような球体上で地理空間データを表す形式です。

  • legacy coordinate pairsは、ユークリッド平面上で地理空間データを表す形式です。

GeoJSONを使用して、地球のような球体上で地理空間情報を表すデータを保存します。GeoJSON は、1 つ以上の位置で構成されます。

位置は単一のロケーションを表し、コード内では次の値を含む配列として存在します。

  • 最初の位置の経度(必須)

  • 2 番目の位置の緯度(必須)

  • 3 番目の位置での高度(任意)

ニューヨーク州ニューヨーク市にある MongoDB 本社の位置は、以下の通りです。

GeoJson.Position(-73.986805, 40.7620853)

あるいは、 GeoJson.Geographic()メソッドを使用して座標ペアを構築することもできます。

GeoJson.Geographic(-73.986805, 40.7620853)

重要

経度、次に緯度

GeoJSON は、最初に 経度 、次に 緯度 の座標を並べ替えます。 作業に使用する他のツールがどのような形式を使用しているかを必ず確認しましょう。OpenStreetMap や Google マップなどの一般的なツールの多くは、緯度を最初に、経度が 2 番目の座標をリストしています。

GeoJSON オブジェクトの型によって、それが表す幾何学的形状が決まります。 幾何学的形状は位置で構成されています。

以下に、一般的な GeoJSON の型と、それらを位置で指定する方法を示します。

  • Point: 単一つの位置。次の Point は MongoDB 本社の所在地を表しています。

    GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853))
  • LineString: 一連の線セグメントを形成する 2 つ以上の位置の配列。 LineStringは、パス、ルート、境界、またはその他の線形地理空間データを表すことができます。 次のLineStringは、中国の グレー表示 のセグメントを表します。

    GeoJson.LineString
    (
    GeoJson.Position(116.572, 40.430),
    GeoJson.Position(116.570, 40.434),
    GeoJson.Position(116.567, 40.436),
    GeoJson.Position(116.566, 40.441)
    )
  • Polygon: 最初と最後の位置が同じで、スペースを含む位置の配列。 次のPolygonは、 バチカン市国内の土地 をほぼ表します

    GeoJson.Polygon
    (
    GeoJson.Position(12.446086, 41.901977),
    GeoJson.Position(12.457952, 41.901559),
    GeoJson.Position(12.455375, 41.907351),
    GeoJson.Position(12.449863, 41.905186),
    GeoJson.Position(12.446086, 41.901977)
    }

MongoDB で使用できる GeoJSON タイプの詳細については、 GeoJSON マニュアルの エントリを参照してください。

GeoJSON 形式の詳細については、 公式 IETF 仕様 を参照してください。

legacy coordinate pairs を使用して、2 次元平面上の地理空間情報を表すデータを保存します。

legacy coordinate pairsは 2 つの値の配列で表され、1 つ目は x 軸の値を表し、2 つ目は y 軸の値を表します。

legacy coordinate pairs の詳細については、legacy coordinate pairsに関する MongoDB Server のマニュアル ページを参照してください。

地理空間データのクエリを有効にするには、データ形式に対応するインデックスを作成する必要があります。以下のインデックス型により、地理空間クエリが可能になります。

  • 2dsphere、GeoJSON データに使用

  • 2d、legacy coordinate pairs に使用

地理空間インデックスの作成方法の詳細については、「インデックス ガイド」の地理空間インデックス」セクションを参照してください。

地理空間データをクエリするには、次のいずれかのクエリ演算子を使用します。

  • $near

  • $geoWithin

  • $nearSphere

  • $geoIntersects2 dsphere インデックスが必要

$near 演算子を使用する場合、次の距離演算子を指定できます。

  • $minDistance

  • $maxDistance

$geoWithin 演算子を使用する場合、次の図形演算子を指定できます。

  • $box

  • $polygon

  • $center

  • $centerSphere

地理空間クエリ演算子の詳細については、サーバー マニュアルの「地理空間クエリ演算子 」を参照してください。

次の例では、MongoDB Atlas サンプル データセットを使用します。 このサンプル データセットを取得するには、「クイック スタート 」を参照してください。

例では、サンプル データセットの sample_mflix データベースの theaters コレクションを使用します。theaters コレクションには、 location.geo フィールドに 2dsphere インデックスが含まれています。

次の例では、ニューヨーク州ニューヨーク市にある MongoDB 本社から1000メートル以内にあるlocation.geoフィールド値を持つドキュメントをクエリします。 ドキュメントは最も近いものから最も遠いものへと返されます。

// Point representation of the MongoDB Headquarters
var point = GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853));
// Specifies a maxDistance of 1000 meters and a minDistance of 0 meters
var filter = Builders<Theater>.Filter.Near(m => m.Location.Geo, point, 1000.0, 0.0);
// Only fetches the _id and theaterId fields
var projection = Builders<Theater>.Projection.Include("theaterId");
var results = collection.Find(filter).Project(projection);

前の例の結果には、次のドキュメントが含まれています。

{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 }

次の例では、MongoDB の境界内に存在するlocation.geoフィールド値を持つドキュメントをクエリします。

// Polygon representation of Manhattan
var polygon = GeoJson.Polygon
(
GeoJson.Position(-73.925492, 40.877410),
GeoJson.Position(-73.910372, 40.872366),
GeoJson.Position(-73.935127, 40.834020),
GeoJson.Position(-73.929049, 40.798569),
GeoJson.Position(-73.976485, 40.711432),
GeoJson.Position(-74.015747, 40.701229),
GeoJson.Position(-74.018859, 40.708367),
GeoJson.Position(-74.008007, 40.754307),
GeoJson.Position(-73.925492, 40.877410)
);
var filter = Builders<Theater>.Filter.GeoWithin(m => m.Location.Geo, polygon);
// Only fetches the _id and theaterId fields
var projection = Builders<Theater>.Projection.Include("theaterId");
var results = collection.Find(filter).Project(projection);

前の例の結果には、次のドキュメントが含まれています。

{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51eccb"), "theaterId" : 835 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 }
{ "_id" : ObjectId("59a47286cfa9a3a73e51e744"), "theaterId" : 1028 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51ebe1"), "theaterId" : 609 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51e8ed"), "theaterId" : 1906 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51e87d"), "theaterId" : 1531 }
{ "_id" : ObjectId("59a47287cfa9a3a73e51eb63"), "theaterId" : 482 }

戻る

使用中の暗号化