4

鳥瞰図でマップの隅の緯度と経度を見つけようとしています。地図上にピンをプロットできるようにしたいのですが、何十万もの住所があり、地図上に表示する必要があるものに制限できるようにしたいと考えています。

通常のビューでは、VEMap.GetMapView().TopLeftLatLong と .BottomRightLatLong が必要な座標を返します。ただし、Birdseye ビューでは空白 (または暗号化された値) を返します。SDK は VEBirdseyeScene.GetBoundingRectangle() の使用を推奨していますが、これは私のシーンの中心から最大 2 マイルの境界を返しますが、主要都市ではまだあまりにも多くの住所が返されます。

以前のバージョンの VE コントロールには、鳥瞰図シーンの LatLong 値を解読するために使用できる文書化されていない VEDecoder オブジェクトがありましたが、このオブジェクトは消えたようです (おそらく名前が変更されました)。バージョン 6.1 でこれらの値をデコードするにはどうすればよいですか?

4

5 に答える 5

3

この問題の解決策の例は、画面上の現在のマップの中心のみを見つけるように常に思えます。まるでそこが常にクリックする場所であるかのようです! とにかく、私はこの小さな関数を書いて、画面上でクリックした実際のピクセル位置を取得し、そのための VELatLong を返します。これまでのところ、それはかなり正確に思えます (私はこれを 1 つの大きな恐ろしいハックと見なしていますが、現時点では選択の余地はありません)。

入力として VEPixel を受け取ります。これは、マップ上でクリックした場所の x 座標と y 座標です。マップの onclick ハンドラーに渡されるマウス イベントで十分に簡単に取得できます。

function getBirdseyeViewLatLong(vePixel)
{
    var be = map.GetBirdseyeScene();

    var centrePixel = be.LatLongToPixel(map.GetCenter(), map.GetZoomLevel());

    var currentPixelWidth = be.GetWidth();
    var currentPixelHeight = be.GetHeight();

    var mapDiv = document.getElementById("map");
    var mapDivPixelWidth = mapDiv.offsetWidth;
    var mapDivPixelHeight = mapDiv.offsetHeight;

    var xScreenPixel = centrePixel.x - (mapDivPixelWidth / 2) + vePixel.x;
    var yScreenPixel = centrePixel.y - (mapDivPixelHeight / 2) + vePixel.y;

    var position = be.PixelToLatLong(new VEPixel(xScreenPixel, yScreenPixel), map.GetZoomLevel())
    return (new _xy1).Decode(position);
}
于 2009-05-13T20:19:03.353 に答える
2

マップの中心緯度/経度ポイントを取得するためのコードを次に示します。この方法は、Road/Aerial および Birdseye/Oblique マップ スタイルの両方で機能します。

function GetCenterLatLong()
        {
            //Check if in Birdseye or Oblique Map Style
            if (map.GetMapStyle() == VEMapStyle.Birdseye || map.GetMapStyle() == VEMapStyle.BirdseyeHybrid)
            {
                //IN Birdseye or Oblique Map Style


                //Get the BirdseyeScene being displayed
                var birdseyeScene = map.GetBirdseyeScene();


                //Get approximate center coordinate of the map
                var x = birdseyeScene.GetWidth() / 2;
                var y = birdseyeScene.GetHeight() / 2;

                // Get the Lat/Long 
                var center = birdseyeScene.PixelToLatLong(new VEPixel(x,y), map.GetZoomLevel());

                // Convert the BirdseyeScene LatLong to a normal LatLong we can use
                return (new _xy1).Decode(center);
            }
            else
            {
                // NOT in Birdseye or Oblique Map Style
                return map.GetCenter();
            }
        } 

このコードはここからコピーされました: http://pietschsoft.com/post/2008/06/Virtual-Earth-Get-Center-LatLong-When-In-Birdseye-or-Oblique-Map-Style.aspx

于 2008-09-15T21:44:18.257 に答える
2

VEMap.GetCenter メソッドのドキュメントから:

マップ スタイルが VEMapStyle.Birdseye または VEMapStyle.BirdseyeHybrid に設定されている場合、このメソッドは null を返します。

しかし、ここに私が見つけたものがあります:

var northWestLL = (new _xy1).Decode(map.GetMapView().TopLeftLatLong);
var southEastLL = (new _xy1).Decode(map.GetMapView().BottomRightLatLong);

(新しい _xy1) は、文書化されていない古い VEDecoder オブジェクトと同じように機能するようです。

于 2008-09-02T16:37:07.390 に答える
0

http://dev.live.com/virtualearth/sdk/によると、これでうまくいくはずです:

function GetInfo()         
{
  alert('The latitude,longitude at the center of the map is: '+map.GetCenter());         
}
于 2008-08-28T19:52:37.583 に答える