在OpenLayers4中将地图及叠加显示的图层生成图片保存到数据库方法
在调用自己发布的图层服务时注意在图层源属性中加入跨域。
new ol.layer.Image({
source: new ol.source.ImageArcGISRest({
ratio: 1,
params: {},
crossOrigin: ‘anonymous’,
url: “http://10.5.1.186:6080/arcgis/rest/services/thly/thlyfq/MapServer”
})
})
否则在图片转换时报错。
navigator.msSaveBlob(canvas.msToBlob(), ‘map.png’); 中提示canvas.msToBlob()发生严重性错误。
openlayers4获取地图及叠加图层的代码如下:
//*****************************************************************************************************
//*****************************************图片持久化转换**********************************************
//*****************************************************************************************************
function readBlobAsDataURL(blob, callback) {
var a = new FileReader();
a.onload = function (e) {
callback(e.target.result);
}
a.readAsDataURL(blob);
}
$(“#savemap”).click(function () {
map.once(‘postcompose’, function (event) {
var canvas = event.context.canvas;
var SLT_pic = new ArrayBuffer();
if (navigator.msSaveBlob) {
var ttt = canvas.msToBlob();
readBlobAsDataURL(ttt, function (dataurl)
{
var name = “testpic.png”;
post_webservice_async_json({ “oper”: “SaveIMG”,”picname”:name,”oge”: dataurl });
})
} else {
canvas.toBlob(function (blob) {
var mmm = blob;
alert(“Binary pic”,mmm);
});
}
});
map.renderSync();
});
function post_webservice_async_json(paramObj) {
var returnStr = “”;
var defer = $.Deferred();
$.ajax({
type: ‘post’,
async: true,
dataType: ‘json’,
url: ‘JiangSu.ashx’,
traditional: true,
data: { paramInfo: JSON.stringify(paramObj) },//图片转成二进制长度很大,故采用Json格式进行处理。
success: function (data) {
//alert(“保存图层成功”);
defer.resolve(data);
}
})
return defer.promise();
}
JiangSu.ashx代码如下:
//js通过ajax传递参数至该模块
public void ProcessRequest (HttpContext context) {
string res;
string paramInfo = null;
paramInfo = context.Request.Form[“paramInfo”];
//图片读取
if (paramInfo != null && paramInfo != “”)
{
JavaScriptSerializer aa = new JavaScriptSerializer();
Dictionary<string, string> dic = aa.Deserialize<Dictionary<string, string>>(paramInfo);
string obj = dic[“oge”].Replace(” “, “+”).Split(‘,’)[1];
byte[] array = Convert.FromBase64String(obj);//转成二进制数组
string oper = dic[“oper”];
string picname = dic[“picname”];
////////MemoryStream ms = new MemoryStream(array);
////////Image image = new Bitmap(ms);
////////image.Save(context.Server.MapPath(@”~1.png”));
//调用持久化函数,将图片二维数组进行保存
res = JS_PicBinaryFunc(“SaveCons”, oper, picname, array);
}
转载自:https://blog.csdn.net/pdw521/article/details/78551937