2016-08-02 37 views
0

我想在为Google Maps API创建TileOverlay时访问需要用户/传递的不同主机上托管的一些自定义地图块。如何在ImageMapType的getTileUrl中添加授权标头Javascript

所以这是我当前的代码的Javascript:

var carte = new google.maps.ImageMapType({ 
    getTileUrl: function (tileCoord, zoom) { 
     var url = "http://host.com/" + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png"; 
     return url; 
    }, 
    tileSize: new google.maps.Size(256, 256), 
    minZoom: 8, 
    opacity: 0.6 
}); 
map.overlayMapTypes.push(carte); 

由于连接返回401 Anauthorized,我无法访问的瓷砖。我怎么能通过JavaScript/Jquery中的授权标题让URL知道我有权访问这些瓷砖?

我在寻找这样一个解决方案,但在Javascript:Adding an Authorization header in getTileUrl for Maps Tile Android

+0

您是否在寻找这个? https://developers.google.com/maps/documentation/javascript/get-api-key?hl=zh-CN –

+0

我正在寻找这样的解决方案:http://stackoverflow.com/questions/34739880/adding-an -authorization-header-in-gettileurl-for-maps-tile-android,但在Javascript中。 – Ulyanca

回答

1

我发现通过impementing代理的解决方案。 这里是代码Implemeted一个:

var carte = new google.maps.ImageMapType({ 
     getTileUrl: function (tileCoord, zoom) { 
      return 'http://myhost/myController/getTile?url=http://externe_url/' + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png"; 
     }, 
     tileSize: new google.maps.Size(256, 256), 
     minZoom: 8, 
     opacity: 0.6 
    }); 

我控制器代码:

def getTile() { 
def result 
try { 
    def http = new HTTPBuilder() 
    try { 
     http.setHeaders([Authorization: 'Basic ' + 'user:pass'.bytes.encodeBase64().toString()]) 
     http.request(params.url, Method.GET, ContentType.BINARY) { req -> 
      response.success = { resp, retour -> 
       result = retour.bytes 
      } 
     } 
    } catch (IOException | URISyntaxException e) { } 
} 

if(result) { 
    // on renvoie au navigateur le contenu de l'image 
    response.status = HttpServletResponse.SC_OK 
    response.contentType = 'image/x-png' 
    response.outputStream << result 
    response.outputStream.flush() 
} 
else { 
    response.status = HttpServletResponse.SC_NO_CONTENT 
} 
} 
1

当用户代理想要发送它可以使用授权领域的服务器身份验证凭据。

的授权字段的结构如下:

用户名和密码与单个结肠组合。 生成的字符串使用Base64的RFC2045-MIME变体进行编码,但不限于76字符/行。 然后将授权方法和空格(即“基本”)放在编码的字符串之前。

来源:Http Authentication

$.ajax({ 
     type: // POST OR GET, 
     url: //your url, 
     headers: { 
      Authorization:"Basic "+new Buffer(name+':'+pass).toString('base64'), 
      "Content-Type" : //according to you 
     } 
     }) 
     .done(function(data) { }); 
+0

尽管此代码可能会回答问题,但提供有关* how *和/或* why *解决问题的其他上下文会提高答案的长期价值。 –

+0

他问如何在javascript/jquery中传递授权标头,那是怎么传递的。 –

+0

即使发布的代码确实回答了这个问题,一个好的答案将有助于解释为什么代码可以解决问题。在StackOverflow上,仅有代码的答案被认为是低质量的。 –