1つの軸に沿ってポリゴンのサイズを変更する


8

次のを使用すると、縮尺と原点によってサイズを変更できます。

    polygonFeature.geometry.resize(scale, origin);
    vectorLayer.redraw();

しかし、誰かがその軸の1つでポリゴンのサイズを変更する方法についての提案やサンプルコードはありますか?

たとえば、オレンジ色のポリゴンのサイズを赤いポリゴンのようなものに変更したいとします。したがって、北と南のエッジのみが移動し、東と西のエッジは一定のままです。

ここに画像の説明を入力してください

編集#1 ユースケースとサンプルデータを次に示します。ユーザーはオレンジ色の四角形の一部のみを必要としています。これは、海岸線にのみ関心があり、衛星ベンダーが画像全体に対してより多く請求するためです。ユーザーは、注文したい画像のどの部分を指定する必要があります。

ただし、サイズ変更ハンドルを備えたソリューション全体は必要ありませんが、必要なのは、ポリゴンの高さをサイズ変更する機能だけです。

ここに画像の説明を入力してください ここに画像の説明を入力してください

ここに画像の説明を入力してください

編集#2:多分私はこれについて間違っているのでしょう。openlayers javascript(browser)solutionが必要で、サイズ変更のためにサーバーに戻ることができません。多分私がしなければならないことは、ポリゴンジオメトリの東端と西端(黒い点)に沿って点を補間することです。次に、ユーザーがドラッグできる2つの線(緑の線)を作成しますが、これらの補間された点に移動(ドラッグ)を制限できます。ユーザーが「完了」すると、残りの黄色のポリゴンが表示されますか?

ここに画像の説明を入力してください


2
ポリゴンは常に長方形ですか?エッジは任意に位置合わせされていますか、それとも座標参照系のマップグリッド方向に沿っていますか?
Mike T

良い質問ですが、実際には常に長方形になるので、はい。それらは測地線であり、そのため、上端と下端が同じではありません(または同じように見えません)。それらは衛星帯であるため、世界中を回っていますが、EPSG:4326では波状に上下します。
CaptDragon 2011年

@マイク:詳細については、編集#1を参照してください。
CaptDragon 2011年

あなたが後にしていることであるアフィンtrasformationそれがこれをサポートしている場合、私は良く見かけるOpenLayersを知らないこと..私は誰かが答えを提供するために、このリード上でチャイムことができると確信してい除き、
マイク・T

私がやったアフィン変換画像が地図横向きに正しくlignedする方法を...通知を...私は本当にただのポリゴンの高さを変更する必要があります。
CaptDragon 2011年

回答:



1

一般的なケースでは、透視変換を使用して、元の四辺形を単位正方形に変換し、再び元に戻します。

基本的な手順は次のとおりです。

  1. クワッドから単位正方形へのアフィン変換行列を見つけます。
  2. 元の四角形をスケーリングしたいのと同じ比率で単位四角形をスケーリングします。
  3. 手順1で取得した行列を反転します。
  4. その逆行列を押しつぶされた正方形に適用して、マップ空間に変換し直します。

警告:

  • 有効な行列があり、それが反転可能であることを確認してください。
  • 凸四角形でのみ正常に機能します。

あなたがしている仕事のために、凹面のポリゴンのような奇妙なケースがあるべきではありません。極域をカバーするクワッドで何が起こるかわからないので、まずそれを極極図法に投影する必要があると思います。

手順1で投稿されたリンクは、数学を多用した論文とC ++テンプレートを多用したコードにつながります。ただし、コードはファイルの先頭にある小さな関数なので、コードの動作を理解するのはそれほど難しくありません。


ありがとう...しかし、私は本当にopenlayers javascriptソリューションが必要です。
CaptDragon 2011年

1
数学はそれよりはるかに単純で一般的です。クワッドに頂点(x0、x1、x2、x3)を(順番に)持たせ、x0x1側を修正します。x1x2側とx0x3側に沿って係数aで再スケーリングすると、新しいポリゴン(x0、x1、x2 '、x3')が作成されます。ここで、x2 '= x1 +(x2-x1)* aおよびx3' = x0 +(x3-x0)* a。投影座標で作業するのが最善です。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.