繁体   English   中英

Google Maps Overlay Tiles:JSON base64 ajax调用而不是图像URL

[英]Google Maps Overlay Tiles: JSON base64 ajax call instead of image URL

我有一个带有Maptypes和Tiles的Google Maps自定义叠加层设置,如下所示: https : //developers.google.com/maps/documentation/javascript/examples/maptype-image

只要我使用虚拟图像创建服务,一切都可以完美运行,因为GetTileUrl部分返回直接图像URL。

但是,现在这是我的问题:最终应用程序利用了需要AJAX调用的API,该API返回具有Base64编码图像的JSON数据。 一旦我异步使用它,API将不会足够快地返回数据以填充变量。 如果我同步使用它,这将花费大量时间,冻结UI以及更多此类问题。 因此,我的首选方法是异步使用它,但是如何使它起作用。

这是代码:

Ajax呼叫:

function GetPicture(url) {
var _ajaxOptions = {
  critical: false,
  url: url,
  error: getCTerror,
  success: getGetPictureSuccess,
  cache: false
};

I THEN DO AN INIT ON AN AJAX UTIL, WHICH DOES THE SAME AS A NORMAL AJAX CALL, BUT THEN WITH PROPER SERVER LOGGING AND SUCH.

}

function getGetPictureSuccess(response) {
  // Feed the Base64 data to the URL
  the_url = response.BASE64STRING;
}

覆盖:

overlayOptions = {
getTileUrl: function (coord, zoom) {

  // Get the center point of the tile
  var centerpoint = new google.maps.Point((coord.x * tileSize) + (tileSize / 2), ((coord.y + 1) * 256) + (tileSize / 2));

  // Start a new Mercator projection for the x,y object
  var merc = new MercatorProjection();

  // Convert the Mercator object to Lat Long
  var centerLatLng = merc.fromDivPixelToLatLng(centerpoint, zoom);

  // Define the parameters for the Ajax call
  var apiParams = 'GetPicture?RequestorID=' + requestorID + '&Lat=' + centerLatLng.k + '&Lon=' + centerLatLng.B + '&Width=' + tileSize + '&Height=' + tileSize + '&Zoom=' + zoom + '&mapIDs=' + layers + '&includePicture=true&includePOI=true';


  ctGetPicture(apiBaseUrl + apiParams);

  if (!!the_url) {
    return "data:image/png;base64," + the_url;
  }
},
tileSize: new google.maps.Size(tileSize, tileSize),
isPng: true
};

overlayMapType = new google.maps.ImageMapType(overlayOptions);

function mapinit() {
 //Tiles overlays insert
  if (layers.length > 0) {
   map.overlayMapTypes.insertAt(0, overlayMapType);
  }
}

那么如何使它异步工作呢?

我最终使用了一个REST服务来为我打电话。 因此,我只是向包含REST服务的URL发送了一个http请求,获取了该图像,以便getTileUrl函数可以认为它正在获取URL。 在不更改Google API(getTileUrl部分)的情况下,我认为不可能以其他方式进行此操作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM