ArcMap切图原理.docx

上传人:b****5 文档编号:3099215 上传时间:2022-11-17 格式:DOCX 页数:11 大小:96.66KB
下载 相关 举报
ArcMap切图原理.docx_第1页
第1页 / 共11页
ArcMap切图原理.docx_第2页
第2页 / 共11页
ArcMap切图原理.docx_第3页
第3页 / 共11页
ArcMap切图原理.docx_第4页
第4页 / 共11页
ArcMap切图原理.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

ArcMap切图原理.docx

《ArcMap切图原理.docx》由会员分享,可在线阅读,更多相关《ArcMap切图原理.docx(11页珍藏版)》请在冰豆网上搜索。

ArcMap切图原理.docx

ArcMap切图原理

ArcMap切图原理

(一)

——AO实现(C#)

一、工作环境

系统:

win764bit

软件:

ArcGIS10.0、ArcGISServer10.0

IDE:

MicrosoftVisualStudio2010

二、开发语言

C#

.Netframework3.0

ArcGISServerfor.netsdk

引用类库:

三、

地图切图参数

ArcGISServer发布切片地图服务流程:

准备地图文档发布地图服务设置缓存参数开始切图切图结束服务发布成功。

使用ArcGISServer发布切片地图服务时,需要确定以下参数:

比例尺级别、切片原点、图像高度和宽度、DPI。

下图所示为ArcGIS10.0中切片地图服务的一个缓存参数设置。

四、切片原理

ESRI使用的是二叉树索引法,将平面地图从地图左上角(切图原点)到地图右下角分成若干行列,指定比例尺下以行列号为切图图片的索引。

我们需要使用到的切图参数:

切图原点、图片宽高、地图范围、地图比例尺及DPI。

这里DPI的左右是将比例尺换算成像素比实际距离,即为了确定每张图片实际地理范围。

废话不多说,直接上实现代码。

五、代码实现

1、准备工作:

使用arcmap准备地图文档,发布地图服务,配置切图方案,不需切图。

(这一步也可代码实现,这里略过)

2、地图服务类

地图服务类提供对地图服务的访问,获取切图参数及地图文档的位置(地图文档MXD在ArcGISServer10.0中可获取,后面版本更新不可获取)

连接GISServer方法:

GISServerConnectionClassgisconnection=newGISServerConnectionClass();

gisconnection.Connect(host);

获取MapServer服务名方法:

Listnames=newList();

ESRI.ArcGIS.Server.IServerObjectManagersom=gisconnection.ServerObjectManager;

IEnumServerObjectConfigurationInfoinfos=som.GetConfigurationInfos();

infos.Reset();

IServerObjectConfigurationInfoinfo=infos.Next();

while(info!

=null)

{

if(info.TypeName.Equals("MapServer"))

{

names.Add(info.Name);

}

info=infos.Next();

}

获取切片信息方法:

IServerContextsc=gisconnection.ServerObjectManager.CreateServerContext(mapServerName,"MapServer");

IMapServerpMapServer=sc.ServerObjectasIMapServer;

ITiledMapServertm=pMapServerasITiledMapServer;

ITileCacheInfoinfo=tm.GetTileCacheInfo(pMapServer.DefaultMapName);

我们从ITileCacheInfo中可以获取到信息包括dpi、lod、切图原点及切图像素宽和高

3、

切片信息类

从ITileCacheInfo对象中提取我们需要的信息,这里创建了一个TileCacheInfoModel类

publicclassTileCacheInfoModel

{

#region变À?

量¢?

int_dpi=96;

int[]_levels;

double[]_resolutions;

double[]_scale;

double_originX=0;

double_originY=0;

int_tileCols=256;

int_tileRows=256;

#endregion

#region属º?

性?

publicintDpi

{

get{return_dpi;}

set{_dpi=value;}

}

publicint[]Levels

{

get{return_levels;}

set{_levels=value;}

}

publicdouble[]Resolutions

{

get{return_resolutions;}

set{_resolutions=value;}

}

publicdouble[]Scale

{

get{return_scale;}

set{_scale=value;}

}

publicdoubleOriginX

{

get{return_originX;}

set{_originX=value;}

}

publicdoubleOriginY

{

get{return_originY;}

set{_originY=value;}

}

publicintTileCols

{

get{return_tileCols;}

set{_tileCols=value;}

}

publicintTileRows

{

get{return_tileRows;}

set{_tileRows=value;}

}

#endregion

publicTileCacheInfoModel(ITileCacheInfoinfo)

{

_dpi=info.Dpi;

_levels=newint[info.LODInfos.Count];

_resolutions=newdouble[info.LODInfos.Count];

_scale=newdouble[info.LODInfos.Count];

for(inti=0;i

{

_levels[i]=info.LODInfos.get_Element(i).LevelID;

_resolutions[i]=info.LODInfos.get_Element(i).Resolution;

_scale[i]=info.LODInfos.get_Element(i).Scale;

}

_originX=info.Origin.X;

_originY=info.Origin.Y;

_tileCols=info.TileCols;

_tileRows=info.TileRows;

}

}

 

4、切片计算类

通过切片信息,我们能够计算需要切的地图中某比例尺下任意一个点所在的切片行列索引号,并能获取切片行列索引所对应的地图显示范围。

publicclassTileCacheHelper

{

privateTileCacheInfoModel_model;

publicTileCacheHelper(TileCacheInfoModelm)

{

_model=m;

}

publicintGetCol(doublex,intscaleindex)

{

return(int)((x-_model.OriginX)/(_model.Resolutions[scaleindex]*_model.TileCols));

}

publicintGetCol(doublex,doublescale)

{

inti;

for(i=0;i<_model.Scale.Length;i++)

{

if(scale==_model.Scale[i])

{

break;

}

}

return(int)((x-_model.OriginX)/(_model.Resolutions[i]*_model.TileCols));

}

publicintGetRow(doubley,intscaleindex)

{

return(int)((_model.OriginY-y)/(_model.Resolutions[scaleindex]*_model.TileRows));

}

publicintGetRow(doubley,doublescale)

{

inti;

for(i=0;i<_model.Scale.Length;i++)

{

if(scale==_model.Scale[i])

{

break;

}

}

return(int)((_model.OriginY-y)/(_model.Resolutions[i]*_model.TileRows))-1;

}

publicIEnvelopegetExtent(intscaleindex,introw,intcol)

{

doublexmin=this._model.OriginX+col*_model.Resolutions[scaleindex]*this._model.TileCols;

doublexmax=this._model.OriginX+(col+1)*_model.Resolutions[scaleindex]*this._model.TileCols;

doubleymin=this._model.OriginY-(row+1)*_model.Resolutions[scaleindex]*this._model.TileRows;

doubleymax=this._model.OriginY-row*_model.Resolutions[scaleindex]*this._model.TileRows;

IEnvelopeextent=newEnvelopeClass();

extent.XMin=xmin;

extent.XMax=xmax;

extent.YMin=ymin;

extent.YMax=ymax;

//xmin,ymin,xmax,ymax,this._tileInfo.spatialReference);

returnextent;

}

}

5、切图工具类

根据比例尺级别循环

foreach(intscaleindexinscaleindexs)

根据坐标范围获取行列索引范围

TileCacheHelpertcTool;

intr0=tcTool.GetRow(_ymax,scaleindex);

intc0=tcTool.GetCol(_xmin,scaleindex);

intrN=tcTool.GetRow(_ymin,scaleindex);

intcN=tcTool.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1