3

私は以下にアプローチするための最良の方法を見つけようとしています:

地球の平面表現があるとします。これに、約 3 平方キロメートルに対応するグリッド上の各正方形を重ねるグリッドを作成したいと考えています。各正方形には、一意の地域 ID があります。このグリッドは、地域 ID と、おそらく地域の 4 隅の経度/緯度座標を持つデータベース テーブルに格納されるだけですよね? このテーブルを簡単に生成する方法について何か提案はありますか? 最初に、この「平らな地球」の幅と高さをキロ単位で調べ、地域の数を計算し、縦線と横線の各交点に長さ/緯度を何らかの方法で割り当てる必要があることを知っています。ただし、これは多くの手作業のように思えます。

次に、グリッド テーブルを作成したら、長い/緯度のペアを取り、それがどの論理「地域」にあるかを判断する fxn を設計する必要があります。これについてどうすればよいかわかりません。

どんな助けでも大歓迎です。

ありがとう。

4

5 に答える 5

3

地球が半径の球であると仮定しR = 6371 kmます。

(lat、long)=(0、0)度から開始します。赤道付近の3kmは経度の変化に相当します

dlong = 3 / (2 * pi * R) * 360 
      = 0.0269796482 degrees

赤道を歩き回り、3kmごとにマーカーを置くと、約3kmになり(2 * pi * R) / 3 = 13343.3912ます。余分な0.3912をどのように処理するかはあなたの決定であるため、「約」。

(0、0)から、北に3 km(lat、long)(0.0269796482、0)まで歩きます。最初に歩いた道と局所的に平行な道を再び地球の周りを歩きます。N極に少し近いので、この円の半径は、最初に歩いた円の半径よりも少し小さくなっています。この半径には小文字のrを使用しましょう

r = R * cos(lat)
  = 6371 * cos(0.0269796482)
  = 6 368.68141 km

dlong小さい方の半径を使用して再度計算します。

dlong = 3 / (2 * pi * r) * 360
      = 0.0269894704 deg

2番目のフラグセットを置きます。今回(2 * pi * r) / 3 = 13 338.5352はそれらについてあります。以前は13,343でしたが、現在は13,338です。あれは何でしょう?5つ少ない。

トップラインの角が5つ少ない場合、どのようにして正方形のリボンを描画しますか?実際、地球を歩き回っていると、最初はかなり良い正方形から始めましたが、領域の形状はかなり極端な平行四辺形になっていることがわかりました。

上下に同じ数のコーナーを与える別の戦略が必要です。下部境界(SW-SE)の長さが3 kmの場合、台形のリボンを作成するには、上部を少し短くする必要があります。

理想的な正方形のグリッドに近い妥協案を作成する方法はたくさんあります。 メトリックプロパティを保持する地図投影に関するこのウィキペディアの記事は、数十のそのような戦略にリンクしています。

アプリの詳細により、特に地球全体をマッピングする必要がない場合は、物事を大幅に簡素化できる可能性があります。

于 2009-11-01T21:09:09.557 に答える
2

Microsoft は、SQL Server 2008 製品で空間データ型に投資してきました。ここであなたを助けることができます。平坦化された地球領域を表すデータ型、一連の座標がジオメトリ内にあるかどうかを判断する演算子などがあるためです。これを使用しないことを選択した場合でも、次のリンクを確認することを検討してください。特に 2 番目のものには、問題に関する多くの優れた背景情報と、空間データの業界標準データ形式のいくつかに関する議論があります。

http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

http://jasonfollas.com/blog/archive/2008/03/14/sql-server-2008-spatial-data-part-1.aspx

于 2009-11-01T20:13:02.867 に答える
1

地球は球体なので、「3 平方キロメートル」は赤道付近と極付近では異なる度数になることをご存知ですか? そして、マップの上部と下部にあるグリッドの四角形は、実際には世界のパイ型の部分を表しますよね?

私は自分のデータベースで同様のことをしました - 私はそれをクワッドセルに分割しました。そこで私がしたことは、地球を (-180,-90)-(0,0)、(-180,0)-(0,90) などの 4 つの四分の一に分割することでした。データベースにポイント エンティティを追加したときに、「セル」が X 個を超えるエントリを取得した場合、セルを 4 つに分割しました。世界の他の地域では、私はほとんど持っていません。

クワッド ツリーのデータベースは次のようになります。

\d areaids;
                 Table "public.areaids"
    Column    |            Type             | Modifiers 
--------------+-----------------------------+-----------
 areaid       | integer                     | not null
 supercededon | timestamp without time zone | 
 supercedes   | integer                     | 
 numpoints    | integer                     | not null
 rectangle    | geometry                    | 
Indexes:
    "areaids_pk" PRIMARY KEY, btree (areaid)
    "areaids_rect_idx" gist (rectangle)
Check constraints:
    "enforce_dims_rectangle" CHECK (ndims(rectangle) = 2)
    "enforce_geotype_rectangle" CHECK (geometrytype(rectangle) = 'POLYGON'::text OR rectangle IS NULL)
    "enforce_srid_rectangle" CHECK (srid(rectangle) = 4326)

セル内のポイントを見つけるのに PostGIS を使用しています。セルを見ると、supercedon が null ではないため、セルが分割されているかどうかがわかります。その子は、その ID と等しい優先順位を持つ子を探すことで見つけることができます。そして、supercedeson null を持ち、その長方形が関心のある領域と重なっている領域を (PostGIS '&' 演算子を使用して) 探して、関心のある領域をカバーする領域を見つけるまで、上から下に掘り下げることができます。

于 2009-11-01T20:11:21.640 に答える
1

まず、ポールは正しい。残念ながら、地球は丸いので、このようなことは本当に複雑です.

何年も前に、地形マッピング サーバー用にこれに似たグリッドを作成しました。各地域の左上コーダーの座標を記録しました。また、緯度/経度の代わりに UTM 座標を使用しました。各地域が 3 平方キロメートルに及ぶことがわかっていて、UTM はメートルに基づいているため、適切な地域を見つけるために範囲クエリを実行するのは簡単です。

于 2009-11-01T20:13:06.580 に答える
0

長方形のセルでこれを行う方法はありませんが、六角形のセルのグリッドを使用してこれを簡単に行うことができるR パッケージdggridRを完成させました。ただし、3km のセル要件により、非常に多くのセルが生成され、マシンが過負荷になる可能性があります。

R を使用してグリッドを生成できます。

install.packages('devtools')
install.packages('rgdal')
library(devtools)
devools.install_github('r-barnes/dggridR')
library(dggridR)
library(rgdal)

#Construct a discrete global grid (geodesic) with cells of ~3 km^2
dggs <- dgconstruct(area=100000, metric=FALSE, resround='nearest')

#Get a hexagonal grid for the whole earth based on this dggs
grid <- dgearthgrid(dggs,frame=FALSE)

#Save the grid
writeOGR(grid, "grid_3km_cells.kml", "cells", "KML")

KML ファイルには、すべてのセルの ID とエッジ頂点座標が含まれます。

グリッドは次のようになります。

離散グローバル グリッド

私のパッケージは、これと同じグリッドを KML に直接生成できるKevin Sahr のDGGRIDに基づいていますが、自分でコンパイルする方法を理解する必要があります。

于 2016-07-12T22:48:01.823 に答える