円半径に測地線測定を使用していますか?


15

現在、OpenLayersマッピングサイトを開発しています。測定は、ラインツールとエリアツールを使用して行うことができます。現在、これらの両方は、OpenLayers APIで概説されている測地線測定値を計算するように設定されています

ユーザーのテスト中に、人々がツールの測定値に既に知っている距離(町間の運転など)を疑問視したため、平面測定ではなく測地線測定を使用します。

サイトの新機能は、ユーザーが設定された半径の地図上に円を描くことができることです。OpenLayersでは、平面距離を使用した円の描画のみが許可されているため、ユーザーが測地線測定ツールで円を測定すると、値が一致しません。下の画像では、円の平面半径は10kmですが、直径の測地線の測定値は12kmです。

これにより、ユーザー(と私)はどちらが正しいのか疑問に思うようになります。

代替テキスト

この答えを見ると、ほとんどのデスクトップGISシステムはこの問題を「無視」し、平面測定値と距離を返しているようです。では、平面および測地線の測定を処理するためのユーザーインターフェイスと精度の観点から、ベストプラクティスは何でしょうか。

更新

半径とメルカトル図法の問題を示すこのGoogleの例を見つけました。

http://maps.forum.nu/gm_sensitive_circle2.html

円を描くJavaScriptコードは次のとおりです。

    var lat1 = (PI/180)* center.lat(); // radians
    var lng1 = (PI/180)* center.lng(); // radians

    for (var a = 0 ; a < 361 ; a++ ) {
        var tc = (PI/180)*a;
        var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
        var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
        var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
        var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
        circlePoints.push(point);
        bounds.extend(point);
    }

この円は地球の曲率を考慮していますか?

最終更新

http://geographika.co.uk/creating-a-geodesic-circle-in-openlayersに投稿された作業コード


1
ここで何か間違っているに違いありません。直線と回転楕円体に続く線との間のこのような短い距離では、差は20%になりません。他の誰かが関与する必要があります。
ニックラスアベン

4
投影法はメルカトル図法である可能性が非常に高く、赤道での縮尺のみがあります(一般に、他の場所(単一の緯度)での縮尺法でのメルカトル図法を実際に使用できますが、ほとんどのグローバルパラメーター化では赤道を使用します)。また、メルカトルの縮尺誤差は、実際の縮尺緯度から北/南に向かうにつれて非常に大きくなります(実際、極では無限です)。
ポールラムジー

測定は北52度で行われ、実際にはメルカトル図法で行われています。これは、メルカトルで描かれたクライアント側のフィーチャが、赤道付近にない限り、非常に不正確な領域と長さを返すことを意味しますか?
geographika

1
はい、ほとんどそうです。ローカルグリッドにデータをメートルまたはフィートで投影すると、すべてうまくいきます。
イアンタートン

2
@ポールグッドコール。ただし、これらのデータは、メルカトル図法が投影法の1つであることを示しています。真の円筒投影では、水平歪みはsec(緯度)に等しくなります。この式により、20 / 12.13の歪みは52.66度の緯度になります。それはまさにリムリックの緯度です。
whuber

回答:


8

ブラウザで自作している場合は、「円」を取得できます(投影のために画面上で丸くなりません。描画したいポイント数のポリゴンで近似されます)。測地線計算の直接形式:点、方向(方位角)、および距離を指定すると、結果の点が得られます。無駄な詳細:http : //en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method

誰かがすでにjavascriptへの翻訳を行っているようです:http : //www.movable-type.co.uk/scripts/latlong-vincenty-direct.html あなたはラッキーです!

終了するには:

  • 最終結果をどの程度チャンキー(頂点の数、nと呼ぶ)にするかを決定します。
  • 360度をn個に分割します。
  • ポリゴンを構築する(範囲(n)のiの場合:polygon.add(vincenty_direct(start_point、i * 360 / n、distance)))
  • 事後、おそらくいくつかの投影と平面化の刺激を修正します:
    • ほぼ確実に通常のWebマップ投影を使用している場合、結果のポリゴンは極に近づくと垂直方向に大きく引き伸ばされます。
    • 同様に、結果のポリゴンが国際日付変更線と交差する場合、実際には中断されます。

乾杯!


1
Vincentyメソッドは、utils名前空間のdev.openlayers.org/apidocs/files/OpenLayers/…の OpenLayersに既に追加されています。これと説明、特にベアリングパラメーターを使用して、これをクリアします。ありがとう!
geographika

:)「刺激」がどれほど刺激的かを教えてください。理想的には、修正はすでにOpenLayersの一部であり、うまく機能するでしょうが、よくわかりません。
ダン

3

OpenLayersでは、平面距離を使用した円の描画のみが許可されます

測地線の円を取得するには、ESRIのジオメトリサービスでバッファー操作を使用できます。

...単位がフィートやメートルなどの線形の場合、測地線バッファリングが実行されます

自由にアクセスできるものはこちらから入手できます


便利なリンクをお寄せいただきありがとうございます。JavaScriptでサービスを呼び出して機能を更新できるかどうかを確認します。私の唯一の懸念は、いつでもオフにできるWebサービスに依存することです。測地線のバッファリングされたポイントは、正確な/実際の10kmの円になると思いますか?
geographika

円は正確である必要がありますが、測定ツールを使用して確認します。ジオメトリサービスは、標準のarcgisサーバーインストールの一部であると思います。そのため、そのサービスが廃止された場合は、Web上でさらに多くの選択肢があるはずです。google.com/...
カークKuykendall
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.