2

私はビットマップを持っており、ユーザーは画像に2つ以上のマーカーを設定し、次に任意のマーカーに対して緯度と経度を設定しました。この情報を使用して、KML ファイルのグラウンド オーバーレイを作成する必要があるため、LatLonBox パラメーター (ビットマップの北、南、東、西、および回転) を計算する方法を知る必要があります。

何か案は?

これは結果の例です:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Folder>
    <name>Ground Overlays</name>
    <description>Examples of ground overlays</description>
    <GroundOverlay>
      <name>Large-scale overlay on terrain</name>
      <description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
      <Icon>
        <href>http://developers.google.com/kml/documentation/images/etna.jpg</href>
      </Icon>
      <LatLonBox>
        <north>37.91904192681665</north>
        <south>37.46543388598137</south>
        <east>15.35832653742206</east>
        <west>14.60128369746704</west>
        <rotation>-0.1556640799496235</rotation>
      </LatLonBox>
     </GroundOverlay>
  </Folder>
</kml>

私の問題は、北、南、東、西、および回転値です。実際、私のユーザーは画像を読み込んでから、2 つ以上のマーカーをその上に置き、すべてのマーカーに緯度と経度を設定する必要があります。このデータを使用すると、北、南、東、西、および回転値を取得できると思いますが、方法がわかりません。ユーザーが 2 つのマーカーのみを配置した場合は簡単です。dX と dY を計算してから北、南、東、西 (この場合は回転 = 0 を設定) を計算できますが、ユーザーが 2 つ以上のポイントを設定した場合は?

4

1 に答える 1

2

これはコメントには長すぎるので、回答として書きます (コメントとして 2 回書いてみました!)。最初に、マップ上に表示されるマーカーの数について説明します。完全な世界では、2 つのマーカーで十分です。これは、幾何学的には、マップ上の他のポイントの座標を後で取得するために必要なマーカーだけです。つまり、3 番目のマーカーは冗長である必要があり、正確な座標は最初の 2 点の座標を使用して計算できます。3 番目のポイントを使用して「回転」を抽出できることを暗示していますが、マップが 2D であるため、それは明らかに間違っています。以下は、2 点を使用して完全に定義された、回転した四角形の例です。

ユーザーが地図上でマークしたもの:

ここに画像の説明を入力

その情報がどのように解釈されるか: ここに画像の説明を入力

同じ長方形から 3 番目のポイントを取得した瞬間に、「エラー修正」を行う機会が得られます。長方形の左上隅の正確な座標を抽出したいとします。それを計算するために必要なのは、数学的には 2 つの点だけです。3 つのポイント (これらのポイントを A、B、C と呼びましょう) を取得した瞬間、3 つの方程式を使用して同じ座標を計算できます。

(A,B) => P1
(A,C) => P2
(B,C) => P3

...そして、左上隅の座標に対して 3 つの異なる値 (P1、P2、および P3) を取得することが実質的に保証されます! 3 つの異なる値を 1 つの値に "マージ" するために、いくつかのエラー修正計算を適用する必要があります。この種のエラー修正は、現実世界の測地線で行われることがよくあります (測地線マップを作成する黄色い三脚を持った人は、すべての建設現場で見かけます)。正しい解決策が必要な場合は、それを調べるか、単に 3 つの値を平均してそれで完了することができます。おそらく、それで十分です。

要求された出力 XML は、TOP、BOTTOM、LEFT、RIGHT、および ROTATION 座標を使用して画像の四角形を定義しているようです。座標をその形式に変換するには、ターゲット ソフトウェアが XML で何をするかを理解する必要があります。私が推測すると、次のようになります。画像は、最初に上/下/左/右の座標で定義された空間内のマップに配置され、次に指定された量だけ回転されます。それが本当なら、これは私があなたのビットマップを準備するために行うことです:

  1. まず、左上隅、右上隅、右下隅の座標を決定します。ここまでで、2 点で十分であることは明らかなはずですが、2 点を超える場合は、エラー修正スキームを考え出し、すべての点を使用して精度を高めます。
  2. 左上隅と右上隅の座標を使用して、現在の回転を計算します。
  3. ターゲット ソフトウェアが使用する回転点の中心の座標を計算します。ターゲット ソフトウェアは画像を中心に回転しますか? 左上隅を中心に画像を回転させますか? とにかく、その点の座標を計算します。
  4. 画像を水平軸に平行にするために、(2) で得た回転角度を使用して、(3) で計算した CENTER を中心に座標を回転させます。
  5. 回転した左上隅から北と西を取り、右下隅から南と東を取ります。(2) で回転角度を得たので、これで完全な解が得られました。
于 2012-10-08T08:08:29.147 に答える