2016-09-14 25 views
2

テキストと小さなuriデータイメージを組み合わせたカスタムbing maps v8 APIの押し込みを作成しようとしていますが、Uncaught InvalidStateError: 'drawImage on' CanvasRenderingContext2D ':提供されたHTMLImageElementが' broken '状態です。'ブラウザのコンソールでエラーが発生しました。何か案は?Bing Maps API v8 - プッシュピンSVG URI画像

MapOptions = { credentials: 'mycredentials', mapTypeId: Microsoft.Maps.MapTypeId.road, zoom: 10, showMapTypeSelector: true, enableInertia: false, enableClickableLogo: false, disableKeyboardInput: true, navigationBarMode: navigationBarMode.minified, showLocateMeButton: true }; 

map = new Microsoft.Maps.Map(document.getElementById("MapDIV"), MapOptions); 

LayerShapes = new Microsoft.Maps.Layer(); 
LayerShapes.setZIndex(101); 

map.layers.insert(LayerShapes); 

var svgTemplate = '<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><foreignObject width="100%" height="100%"><div xmlns="http://www.w3.org/1999/xhtml"> <p>TEXT</p> {htmlContent} </div></foreignObject></svg>'; 
var customHtml = ' <image width="32" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAcCAYAAACUJBTQAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wQbECUudScMXAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAACGUlEQVRIx+3Wy2sTURTH8e/NTDIzaZMxadMWhyBUSheiiyo+QPpHuHIhdOfSP8GlbkXEhTv/gNau3LgRurEIUqlWU2ubh7evPEg6NjOZJHNdlIgLo11YRcj5A84Hfpx7zxFKKcUJlw7gOM6JAVLKIwTg4avbfxy4c/UJABH+Qg2QAfKfI98f48vc/CCuATJA/iEilFKq3/q98XTk2I0W5qp916/41SHhOM6xoIW5KlLK/t/K6oNbwlAdknELYSZpxTMkxrO4XoCUUv0O6gHlYkjHWxF+yyWTsKit57CGbbTMGSJWepTh05PIRof3mxLNjNP0Pdp+i9ziIyGl7BtFD1hdOqRdei5ijW2shkSvS8LAJTM2gh4JiWzvFNksFdAsA3s0Ram4TrtZJxnXCLwKWSF+CvWAt89czmffiEQ0gGYZzSuTX3tNx60Q1Pcxwyb67JUL7Jb38VsdojETz2ux8W6JqG6iJaOoGLTr98WP0fWAsZgQ849v8mnZYeriLNinwAup722RsW12cysYiRT62voGwymbbsQgMZREcMD1yzN4nkctrNEV4HbrTKeFKNeOJlFKiXtwV2ganJvKkF8rsvxiEd8P0FSTiXQa2wxJxEz2yl/QA2Mc2Qihq7NdqdE5rJAc2ufsZBbTiIIGXWXTVeCIa0glMQwh8vl7hMDHD5+Zmb7E16ZPtVrFilnsFLY42CngTDhEohbfALpF/s+4JwbyAAAAAElFTkSuQmCC"/> '; 

var PinPos = new Microsoft.Maps.Location(Lat, Lng); 
pin = new Microsoft.Maps.Pushpin(PinPos, { icon: svgTemplate.replace('{htmlContent}', customHtml), width: 32}); 

LayerShapes.add(pin); 
+0

私と同じ問題です。同じ問題を引き起こしたdiv要素にIDを追加しました。 –

答えて

1

私は同じ問題を抱えていました。 アンロードされたイメージで押しピンアイコンを描画しようとするために発生します。

サムスンのアイコンで使用する前にJSコードでイメージをプリロードするのが一般的な考えです。

私はこの方法でそれを解決:

  1. 私は私ではなく、 'SVG' あなたからのすべての機能を使用することができます
var imageArray = []; 
var imagesFiles = ['home_16.png', 'home_16_done.png', 'not existing.png']; 

    function preLoadImages(callback) { 

     var filesCount = imagesFiles.length; 
     for (var i = 0; i < imagesFiles.length; i++) { 
      var imageObj = new Image(); 
      imageObj.src = '/images/' + imagesFiles[i]; 
      imageObj.name = imagesFiles[i]; 
      imageObj.onload = (function (img) { 
      imageArray.push({ name: img.target.name, object: img.target }); 

      filesCount--; 

      if (filesCount === 0) { 
       if (callback) 
        callback(imageArray); 
      }}); 

      imageObj.onerror = function() { //even image is not loaded 

       filesCount--; 
       if (filesCount === 0) { 
       if (callback) 
        callback(imageArray); 
       }}; 
      } 
    } 


     .... 

     pushpin = new Microsoft.Maps.Pushpin(location, 
     { icon: createCanvasContent(imageArray[i], parameters[]) 
     ..... 

     function createCanvasContent(img, parameters){ 

      var c = document.createElement('canvas'); 
      c.width = img.width + 2; 
      c.height = img.height + 2; 

      var context = c.getContext('2d'); 

      context.fillStyle = bgrcolor; 
      context.fillRect(0, 0, 18, 18); 
      c.style.opacity = '0.8'; 
      //Draw image 
      context.drawImage(img, 1, 0, c.width - 2, c.height - 2); 

      return c.toDataURL(); 
     } 

のキャンバスを使用し、アレイ

  • に画像をプリロードキャンバスタグlike

    context.textAlign = "center"; 
    context.strokeText(text, x, y); 
    context.fillStyle = 'white'; 
    context.fillText(text, x, y); 
    
  • 関連する問題