动态加载地图
说一下主要思想:通过判断相关点是否在视图范围,并且达到某一地图比例尺时加载相应范围的地图(需要有相应基础才能看懂本文章)。
1.首先得到关键点的图层
m_Map= axMapControl.Map;
int l = 0;
int f = 0;
for (int j = 0; j < m_Map.LayerCount; j++)
{
if (m_Map.get_Layer(j).Name =="Points")
{
l = j;//获得Points图层
}
}
2.取得该范围
double xmax = env.XMax;
double ymax = env.YMax;
double xmin = env.XMin;
double ymin = env.YMin;
3.经纬度以及名称字段的属性信息存入arraylist
ArrayListaList = new ArrayList();
ArrayList bList = new ArrayList();
ArrayList nList = new ArrayList();
IFeatureLayer ilayer =(IFeatureLayer)m_Map.get_Layer(l);//得到点图层
IFeatureCursor pFeatureCursor;
pFeatureCursor =ilayer.FeatureClass.Search(null, false);
IFeature pFeature;
pFeature =pFeatureCursor.NextFeature();
while (pFeature != null)
{
string jdValue =Convert.ToString(pFeature.get_Value(4));
string wdValue =Convert.ToString(pFeature.get_Value(5));
string name =Convert.ToString(pFeature.get_Value(2));
pFeature = pFeatureCursor.NextFeature();
aList.Add(jdValue);//经纬度以及name存入arraylist
bList.Add(wdValue);
nList.Add(name);
}
4.遍历arraylist并判断点是否在可视范围内
if(m_Map.MapScale < 400000)
{
for (int j = 0; j < 35; j++)
{
double jd =double.Parse(aList[j].ToString());
double wd =double.Parse(bList[j].ToString());
//判断土层中是否已经存在某个影像数据,若存在则不进行坐标的判断
if (jd >= xmin&& jd <= xmax)
{
if (wd >= ymin&& wd <= ymax)
{ nameid = nList[j].ToString();//获得name属性
for (int q = 0; q< axMapControl.Map.LayerCount; q++)
{
temp = getname== nameid + ".tif";
getname =Convert.ToString(axMapControl.get_Layer(q).Name);
if(temp)
indexa = q - 1;
}
5.调用添加影像数据函数dynamicadd()(目前是本地)
//动态加载删格数据
public void dynamicadd(string strFullPath)
{
int Index = strFullPath.LastIndexOf("\\");
string fileName = strFullPath.Substring(Index + 1);
string filePath = strFullPath.Substring(0, Index);
IWorkspaceFactory workspaceFactory =newRasterWorkspaceFactory();
IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(filePath,0);
IRasterDataset rasterDataset = (IRasterDataset)rasterWorkspace.OpenRasterDataset(fileName);
IRasterLayer rasterLayer =newRasterLayerClass();
rasterLayer.CreateFromDataset(rasterDataset);
axMapControl.AddLayer(raster