通过ArcGIS silverlight API实现输出地图到图片常用的有如下两种方式:向服务器端发送http请求、通过WriteableBitmap类在客户端直接对地图控件截图。
向服务器端发送http请求方式 虽然可以做到输出指定矩形范围的地图、设置控件参考、支持Png/jpg/bmp等图片格式,但这种方式每次只能对单一的地图服务进行截图,换句话讲,当我们叠加了多个地图服务时没有办法将输出区域内所有的地图服务一起输出;这种方式也不支持对Graphiclayer图层输出。
选择地图输出区域
服务器端返回的图片
private void Exportimage(ESRI.ArcGIS.Client.Geometry.Geometry extent)
{
try
{
Envelope sEnv = extent.Extent;
StringBuilder sUrl = new StringBuilder();
sUrl.Append("http://lingy/ArcGIS/rest/services/dxmap/MapServer");
sUrl.Append("/Export?");
sUrl.Append("f=json");
sUrl.Append(String.Format("&bBox={0},{1},{2},{3}",sEnv.XMin,sEnv.YMin,sEnv.XMax,sEnv.YMax));
sUrl.Append("&format=");
sUrl.Append("png");
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sbUrl.ToString());
request.BeginGetResponse(new AsyncCallback(ExportCall),request);
}
catch (Exception ex)
{
MessageBox.Show("导出图片失败:" + ex.ToString());
}
}
private void ExportCall(IAsyncResult asynchronousResult)
{
this.dispatcher.BeginInvoke(delegate()
{
try
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string result = reader.ReadToEnd();
string href = result.Split(new char[] { '"' })[3];
linkImageResult.NavigateUri = new Uri(href, UriKind.Absolute);
}
catch (Exception ex)
{
MessageBox.Show("导出图片失败:" + ex.ToString());
}
});
}
WriteableBitmap可以在客户端直接对地图控件截图保存,保存的图片格式需要自己编写格式编码。
通过WriteableBitmap截图源码:
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
cMapExportToImage imageExporter = new cMapExportToImage();
bool bResult = imageExporter.ExportPNG(mainMap as UIElement);
string strResult = bResult ? "成功!" : "失败!";
MessageBox.Show("图片导出" + strResult);
}
catch (Exception pEr)
{
string msg = pEr.Message;
}
}
cMapExportToImage、cPngEncoder.cs类文件详见下面附件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。