2011-01-19 7 views
1

複数のポリラインを含むポリゴンでオーバーレイを作成する際に問題があります。Google Maps Flash - 子午線を横切る穴のあるポリゴン

一部の国では穴が空いているポリゴンを作成したいと考えています(範囲外の部分は と表示されます)。私は複数のポリラインを持つポリゴンを作成することでこれを行います。 ポリライン。 最初のポリラインは地図の可視領域全体をカバーするように作成されました。

私はこれで始まった:

周りの1つの領域のみ-180分の180

var outer:Array = [ new LatLng(90, -180), 
         new LatLng(90, 180), 
         new LatLng(-90, 180), 
         new LatLng(-90, -180), 
         new LatLng(90, -180)] 

    donut = new Polygon([], 
             new PolygonOptions({ 
              strokeStyle: new StrokeStyle({ 
               thickness: 0}), 
              fillStyle: new FillStyle({ 
               color: 0x000000, 
               alpha: 0.5}) 
              })); 

    donut.setPolyline(0, outer) 
    map.addOverlay(donut);  

にまたがる取得するには明らかにこれは唯一の緯度/経度の一つのロットにまたがるに問題があります。 がズームアウトされたとき、これはうまくいきません。この問題を回避するために、マップのtoSpan()とgetNorth()、getSouth()などの境界を取得しようとしました( )。これらは、可視地図の真のスパンである を返すことはありませんでした。これは180/360に達しました。

var pnw:LatLng = map.fromViewportToLatLng(new Point(0, 0), true) 
    var pse:LatLng = map.fromViewportToLatLng(new Point(map.width, map.height), 
    true) 

これは、この

Lat Lng North West (89.77386689378173, -614.3294000000001) 
    LatLng South East (-89.07253945829217, 370.0455999999999) 

と類似の結果を生じ

マイ溶液を マップの画素点のfromViewportToLatLng()を使用し、「真」にopt_nowrapを設定しましたここで私は正確に、経度の範囲が何であっても、 が発生しても、地図全体をカバーするようにポリライン(地図上の移動とズームの イベント)を正しく設定できます:

outer = [ 
      new LatLng(pnw.lat(), pnw.lng(), true), 
      new LatLng(pnw.lat(), pse.lng(), true), 
      new LatLng(pse.lat(), pse.lng(), true), 
      new LatLng(pse.lat(), pnw.lng(), true),  
      new LatLng(pnw.lat(), pnw.lng(), true)  
      ] 
    donut.setPolyline(0, outer) 

*これまでのところ良いです。 * 今、ポリゴンにドーナツの穴を追加して、ドーナツポリゴンのポリラインを に追加します。

private var australia:Array = [ 
             new LatLng(-9.7716, 143.0241), 
             new LatLng(-23.4610, 158.1852), 
             new LatLng(-45.1338, 147.1549), 
             new LatLng(-35.2615, 111.5153), 
             new LatLng(-20.6921, 113.0094), 
             new LatLng(-10.0746, 130.3239), 
             new LatLng(-9.7716, 143.0241) 
            ] 

    private var nz:Array = [ 
           new LatLng(-33.5951, 165.8254), 
           new LatLng(-33.5951, 179.7341), 
           new LatLng(-48.3845, 179.7341), 
           new LatLng(-48.3845, 165.8254), 
           new LatLng(-33.5951, 165.8254) 
           ]     

    private var hawaii:Array = [    
            new LatLng(21.8000, -160.4347), 
            new LatLng(22.5477, -159.7975), 
            new LatLng(21.4067, -156.3533), 
            new LatLng(19.5336, -154.4197), 
            new LatLng(18.6511, -155.6392), 
            new LatLng(20.6633, -157.8639), 
            new LatLng(21.8000, -160.4347)  
            ] 

    donut.setPolyline(1, hawaii) 
    donut.setPolyline(2, nz) 
    donut.setPolyline(3, australia) 

マップビューポートで子午線が表示されるときに問題が発生します。この の問題は、ドーナツの穴のポリラインが視認可能なビューポートから緯度経度の他の側にジャンプするように、Zommedのときにはっきりと現れます。

時々外の配列のdoesntさえ正しくessentialy(むしろ 切り抜きよりも、国を超えるポリゴン)を反転させるためにドーナツ ポリゴンを引き起こし、レンダリング

私は、これは視覚化するためのタフな1であると認識。誰でもテストしたい場合は、.as + .fla ファイルを添付しました。

http://www.digital.leskiwis.com/maps/MapTest.zip

答えて

0

だから、NZ、オーストラリアのために切り取ら穴のある大きな多角形を作るためにハワイをしようとしていますか...?ポリラインを追加するコードが間違っているようです。私は大きな広場で始まりたい:

var outer:Array = [ new LatLng(90, -180), 
         new LatLng(90, 180), 
         new LatLng(-90, 180), 
         new LatLng(-90, -180), 
         new LatLng(90, -180)] 

    donut = new Polygon([outer], 
    new PolygonOptions({ 
    strokeStyle: new StrokeStyle({ 
     thickness: 0}), 
     fillStyle: new FillStyle({ 
     color: 0x000000, 
     alpha: 0.5}) 
})); 

はその後今3つの穴の大きな長方形であるdounut

//define au, nz, hi 
//... 

//the 0th polyline is already the outer edge... 
donut.setPolyline(1, hi); 
donut.setPolyline(2, nz); 
donut.setPolyline(3, au); 

あなたの穴を追加します。 そして、マップに追加します。私は前にGoogleマップに半球と経絡を交差ポリゴンがたくさん働いてきた

map.addOverlay(donut); 

、あなたはそのようなビューポートやズーム領域または何と混乱する必要はありません。ポリゴンを定義している限り、GMは任意の境界矩形に正しく描画します(ポリゴンのエッジが表示されないようにズームしていても)。

私が見るもう1つのことは、世界全体をカバーする巨大なポリゴンが少しあいまいであることです。たとえば、90、-180と90,180は同じポイント(北極)です。 0の長さになります。ポールでの作業は、メルカトルではちょっと辛いです。それを89°Nから切断する可能性はありますか?私はそれが外側の多角形をより幸せにすると思います。

関連する問題