2012-06-21 23 views
5

Tôi đang sử dụng Bing Maps Android SDK và tôi đang tìm cách nhấp vào đa giác mà tôi đã tạo và hiển thị hộp thông tin. Tôi đã có thể thực hiện điều này cho một đinh ghim, nhưng không thể cho một đa giác. Tôi đã thấy this answer, nhưng nhu cầu ứng dụng của tôi sẽ tạo ra hàng trăm đa giác như vậy và tôi đang tìm một giải pháp nhanh hơn bằng cách sử dụng phương pháp addHandler trên đa giác. Tôi biết điều này là có thể cho hương vị AJAX v7 của SDK, là nền tảng cơ sở của SDK Android.Infobox về đa giác trong SDK Bản đồ SDK của Bing

Mã tôi đã cố gắng cho phiên bản AJAX (thử nghiệm sử dụng this giả lập.)

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); 
} 

Tuy nhiên, tôi đẩy một mã tương tự như BingMapsAndroid.js từ thư mục nội dung của SDK, nhưng điều đó không' t làm việc. Trình xử lý được đính kèm, vì tôi đã kiểm tra bằng phương thức hasHandler. Chạm được ghi lại và giá trị lat và long của chúng được gửi tới nhật ký, nhưng sự kiện đa giác không được kích hoạt ngay cả khi chạm nằm bên trong đa giác.

Polygon thử nghiệm chức năng trong 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); 
    } 
} 

Trả lời

3

Sau khi thử nghiệm nhiều, tôi thấy vấn đề này nằm trong Android. Tôi đã thử các mã trên Bing Maps tương tác SDK cho AjaxV7 và đây là kết quả của tôi: trình duyệt

  • Desktop: công trình (như được viết trong câu hỏi)
  • iPhone 4S: Công việc
  • 2.3.4 Android với mặc định trình duyệt: không hoạt động
  • 2.3.4 Android với Opera: công việc
  • ICS Android với Opera: công việc
  • Android ICS với trình duyệt mặc định: không hoạt động