2

私はそのトピックについて多くの調査を行いましたが、十分ではないようですので、ここで助けを求めています :-) Google マップは、場所を指定するために QRST コードを使用できます。私はそのような行を持っています:

trtqtqsss... 

等々。他のいくつかのフォーラムで、GM がかつてそれを URL 構文で使用していたことを知りました。しかし、今ではもう機能していないようです-または、少なくとも私にはその方法がわかりません.

以下は、機能しなくなったリンクの例です。

kh0.google.com/kh?n=404&v=8&t=tq
kh1.google.com/kh?n=404&v=8&t=tr

この URL では、象限は の後の文字列で指定されますt=

コンバーターなどはありますか?

前もって感謝します!

4

1 に答える 1

1

部分的な答え:

私が収集したものによると、 の長い文字列はtrtqtqss、本質的に、場所のバイナリ検索を示しています。大まかに訳すと次のようになります。

  1. 文字から始めtます。これにより、「浅い世界」が得られます
  2. 地図上でポイントを探します。左上の象限にある場合は、q. 右上の場合は、 を追加しrます。右下、追加s。左下、追加t
  3. 新しい象限を拡大します。繰り返す。

文字を追加するたびに、タイルのサイズが半分になり、新しい左下隅が見つかります。世界地図を幅と高さ = 1 の長方形と考えると、追加された文字ごとに新しいコーナーを見つけることができます。これは、コメントでリンクしたアルゴリズムの本質です。

それに加えて、既知の文字列から衛星画像への変換の「ロゼッタ ストーン」(再びリンクから) を加えて、次のコードを示します。これにより、文字列に基づいてポイントの経度/緯度が得られます。それをコンパイルし、文字列を引数として実行可能ファイルに渡します。

#include <stdio.h>
#include <string.h>
#include <math.h>

double NormalToMercator(double y) {
  double pi;
  pi = 2 * asin(1);
  y -= 0.5;
  y *= 2 * pi; 
  y = exp( 2 * y );
  y = ( y - 1 ) / ( y + 1 );
  y = -asin( y );
  return -y * 180 / pi;
}

int main(int argc, char* argv[]) {
  double x=0, y=0, scale=1;
  char buf[100]={' '};
  int ii;

  buf[0]=argv[1][0];
  for(ii = 1; ii < strlen(argv[1]); ii++) {
    buf[ii-1]=argv[1][ii];
    scale *= 0.5;
    switch (tolower(argv[1][ii])) {
      case 'q':
        y+=scale;
        break;
      case 'r':
        y+=scale;
        x+=scale;
        break;
      case 's':
        x+=scale;
        break;
      case 't':
        break;
      default:
        break;
      }
    printf("the string %s gets you to (x,y): %.9lf, %.9lf\n", \
      buf, x, y);
    }
  printf("the final lat/long is %.5lf, %.5lf\n", 360.0 * (x - 0.5), NormalToMercator(y));
}

中間printfステートメントは、アルゴリズムがゆっくりと適切な場所に向かっている様子を示すためにあります。あなたのコメント ( tsrrtrsqsqqqrqrtsst) のリンクからの文字列でこれをテストし、座標を取得しました153.39935ºE 28.32372ºS(注 - 経度の負の数は「W」を意味し、緯度の負の数は「S」を意味します。153.39935、-28.32372 を得ました)。 . それらをGoogleマップに入力すると、ブログ投稿のリンクを入力すると表示される病院の写真が表示されました。

于 2013-07-22T21:21:19.560 に答える