2012-06-21 9 views
5

私はBing Maps Android SDKを使用しています。私が作成したポリゴンをクリックしてインフォボックスを表示する方法を探しています。私は押しピンのためにこれを達成できましたが、ポリゴンのためにはできませんでした。私はthis answerを見たことがありますが、私のアプリの必要性はこのようなポリゴンを何百にもするでしょう、そして私はポリゴン上でaddHandlerメソッドを使うより速い解決法を探しています。私はこれがAndroid SDKの基本となるSDKのAJAX v7の味のために可能であることを知っています。Bing MapsのポリゴンのInfobox Android SDK

Iは、AJAXバージョンの試みコード(thisエミュレータを使用して試験。)

map.entities.clear(); 
latlon = map.getCenter(); 

var polygon = new Microsoft.Maps.Polygon([new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude+0.15), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15)], null); 
Microsoft.Maps.Events.addHandler(polygon, 'click', DisplayInfo); 

map.setView({zoom:10}); 
map.entities.push(polygon); 

function DisplayInfo (e) { 
    var vertices = e.target.getLocations(); 
    var verticeCenter = new Microsoft.Maps.Location(0,0); 

    //Calculating location of center 
    for (i=0; i<vertices.length-1; i++) { 
     verticeCenter.latitude = verticeCenter.latitude + vertices[i].latitude; 
     verticeCenter.longitude = verticeCenter.longitude + vertices[i].longitude; 
    } 
    verticeCenter.latitude = verticeCenter.latitude/(vertices.length - 1); 
    verticeCenter.longitude = verticeCenter.longitude/(vertices.length - 1); 
    defaultInfobox = new Microsoft.Maps.Infobox(verticeCenter, {width: 200, height: 50});  
    map.entities.push(defaultInfobox); 
} 

しかし、私はSDKの資産フォルダからBingMapsAndroid.jsのようなコードをプッシュ、それは」doesnの仕事。 hasHandlerメソッドを使ってチェックしたところ、ハンドラが添付されています。タッチが記録され、緯度と経度の値がログに送られますが、タッチがポリゴンの内側にあってもポリゴンイベントは誘発されません。 BingMapsAndroid.jsで

ポリゴンテスト機能は:

this.PolygonTest = function() { 
    _map.entities.clear(); 
    latlon = new Microsoft.Maps.Location(1,1); 
    console.log("Polygon test function"); 
    var polygon = new Microsoft.Maps.Polygon([new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude+0.15), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15)], null); 

    try { 
    Microsoft.Maps.Events.addHandler(polygon, 'click', function(e) { console.log("Polygon click!"); }); //This is never evoked 
    Microsoft.Maps.Events.addHandler(_map, 'click', function(e) { var point = new MM.Point(e.getX(), e.getY()); var loc = e.target.tryPixelToLocation(point); console.log("lat: " + loc.latitude + ", lon: " + loc.longitude); }); 

    } catch(e) { 
     alert("Error"); 
    } 

    _map.setView({zoom:10}); 
    _map.entities.push(polygon); 

    if (Microsoft.Maps.Events.hasHandler(polygon,'click')) { 
     console.log("Polygon has click handler."); //This works 
    } 

    //This function should be added to the click handler for polygon. I'll add it when I know the handler works. 
    function DisplayInfo (e) { 
     console.log("Polygon has been clicked."); 
     var vertices = e.target.getLocations(); 
     var verticeCenter = new Microsoft.Maps.Location(0,0); 
     for (i=0; i<vertices.length-1; i++) { 
      verticeCenter.latitude = verticeCenter.latitude + vertices[i].latitude; 
      verticeCenter.longitude = verticeCenter.longitude + vertices[i].longitude; 
     } 
     verticeCenter.latitude = verticeCenter.latitude/(vertices.length - 1); 
     verticeCenter.longitude = verticeCenter.longitude/(vertices.length - 1); 
     defaultInfobox = new Microsoft.Maps.Infobox(verticeCenter, { width: 200, height: 50 }); 
     _map.entities.push(defaultInfobox); 
    } 
} 

答えて

3

多くのテストの後、私はこの問題は、Androidにありました。私はAjaxV7のためのBing Mapsの対話SDKのコードを試してみましたが、これらは私の結果です:

  • デスクトップブラウザ:作品(質問に書かれた通り)
  • iPhone 4S:デフォルトで
  • のAndroid 2.3.4で動作しますブラウザ:オペラで
  • アンドロイドICSの作品:オペラで
  • のAndroid 2.3.4を動作しません。デフォルトのブラウザで
  • アンドロイドICSに動作します:動作しません
関連する問題