ArcGIS Engine+GetScreen实现自动配准
来源:互联网 发布:淘宝网商店 编辑:程序博客网 时间:2024/05/17 08:27
GetScreen已经有好些年没用了,再次使用这个软件的时候,却问题百出,win7的64上没法用,最新的GE也没法用,网上搜索了下,不少人在问同样的问题,于是找到了源码,本想自己去修改下,但是发现比较费时间,还有就是这个用到了GE的一个库,这个库是否有变化,还不清楚,于是就找到了旧版本的GE。
可以使用GE4.3或者GE5.0(需要配置下,可以搜索),我用的是GE5.0实现了截屏。
有些人喜欢在数字中找规律,有的人喜欢爱折腾,而我属于后者,如果能用程序实现的功能,而且是批量的话,我绝不会去手动,但是有一个问题,有的时候,程序还没写好,别人将数据已经处理完了,没法,各有各的利弊,不是说了我喜欢折腾么。
很佩服那些能从数字中找到规律的人,也和佩服那些喜欢折腾配置文件的人,更佩服那些能从这些文件中能得知一个东西运行本质的人(以后自己要多学点)。
getscreen截下来的图,有一个map,里面存储了这幅数据的四个顶点的坐标,那么我们可以利用这四个坐标来给这个数据配准,直接上代码。
public bool GeoReferencing(IPointCollection pFromPoint, IPointCollection pTPoint, IRaster pRaster, ISpatialReference pSr, string pSaveFile, string pType)
{
try
{
IRasterGeometryProc pRasterGProc = new RasterGeometryProcClass();
pRasterGProc.Warp(pFromPoint, pTPoint, esriGeoTransTypeEnum.esriGeoTransPolyOrder1, pRaster);
pRasterGProc.Register(pRaster);
IRasterProps pRasterPro = pRaster as IRasterProps;
pRasterPro.SpatialReference = pSr;//定义投影
if (File.Exists(pSaveFile))
{
File.Delete(pSaveFile);
}
pRasterGProc.Rectify(pSaveFile, pType, pRaster);//路径和格式(String)
}
catch (System.Exception ex)
{ return false;
}
return true;
}
//创建金字塔
public bool CreatePyra(IRasterDataset pRdataset)
{
try
{
IRasterPyramid3 pRasterPyramid = pRdataset as IRasterPyramid3;
if (!pRasterPyramid.Present)
{
pRasterPyramid.Create();
}
}
catch (System.Exception ex)
{
return false;
}
return true;
}
///获取坐标
public IPointCollection GetPoints(IEnvelope pEnv)
{
IPointCollection pPoints = new MultipointClass();
pPoints.AddPoint(new PointClass
{
X = pEnv.XMin,
Y = pEnv.YMax
});
pPoints.AddPoint(new PointClass
{
X = pEnv.XMax,
Y = pEnv.YMax
});
pPoints.AddPoint(new PointClass
{
X = pEnv.XMax,
Y = pEnv.YMin
});
pPoints.AddPoint(new PointClass
{
X = pEnv.XMin,
Y = pEnv.YMin
});
return pPoints;
}
public IPointCollection GetPoints(string pStringFile)
{
IPointCollection pPoints = new MultipointClass();
StreamReader pSr = new StreamReader(pStringFile);
string sr = pSr.ReadLine();
while(sr!=null){
if (pPoints.PointCount == 4)
{
pSr.Close();
return pPoints;
}
if(sr.Contains("MMPLL,1"))
{
string[] pArr = sr.Split(',');
pPoints.AddPoint(new PointClass
{
X = Convert.ToDouble(pArr[2].Trim()),
Y = Convert.ToDouble(pArr[3].Trim())
});
}else if (sr.Contains("MMPLL,2"))
{
string[] pArr = sr.Split(',');
pPoints.AddPoint(new PointClass
{
X = Convert.ToDouble(pArr[2].Trim()),
Y = Convert.ToDouble(pArr[3].Trim())
});
}
else if (sr.Contains("MMPLL,3"))
{
string[] pArr = sr.Split(',');
pPoints.AddPoint(new PointClass
{
X = Convert.ToDouble(pArr[2].Trim()),
Y = Convert.ToDouble(pArr[3].Trim())
});
}
else if (sr.Contains("MMPLL,4"))
{
string[] pArr = sr.Split(',');
pPoints.AddPoint(new PointClass
{
X = Convert.ToDouble(pArr[2].Trim()),
Y = Convert.ToDouble(pArr[3].Trim())
});
}
// MMPLL,1, 102.230005, 23.500000
//MMPLL,2, 103.410051, 23.500000
//MMPLL,3, 103.410051, 22.581880
//MMPLL,4, 102.230005, 22.581880
sr = pSr.ReadLine();
}
pSr.Close();
return pPoints;
}
IWorkspace pWs = pRas.GetWorkspace(@"D:\2013\guest\贵州\8m\sv") as IWorkspace;
IEnumDataset pds= pWs.get_Datasets(esriDatasetType.esriDTRasterDataset);
IRasterDataset pRds = pds.Next() as IRasterDataset;
ISpatialReferenceFactory2 pSrfc = new SpatialReferenceEnvironmentClass ();
ISpatialReference pSr = pSrfc.CreateSpatialReference(4326);
while (pRds != null)
{
IRaster pRaster = pRds.CreateDefaultRaster();
IRasterProps pRpr = pRaster as IRasterProps;
IEnvelope pEnv = pRpr.Extent;
pFromCollection = pRas.GetPoints(pEnv);
IDataset pDataset = pRds as IDataset;
string pMapFile=System.IO.Path.ChangeExtension(pRds.CompleteName,".map");
pToCollection = pRas.GetPoints(pMapFile);
//IGeoDatasetSchemaEdit pEdit = pRds as IGeoDatasetSchemaEdit;
//if (pEdit.CanAlterSpatialReference)
//{
// pEdit.AlterSpatialReference(pSr);
//}
string pSaveFile = System.IO.Path.Combine(@"D:\2013\guest\贵州\8m\ge", System.IO.Path.GetFileNameWithoutExtension(pMapFile) + ".tif");
pRas.GeoReferencing(pFromCollection, pToCollection, pRaster, pSr, pSaveFile, "TIFF");
pRds = pds.Next() as IRasterDataset;
}
- ArcGIS Engine+GetScreen实现自动配准
- Arcgis Engine鹰眼功能的实现
- ArcGIS Engine下实现地图输出
- ArcGis Engine 要素折点转点的代码实现
- ArcGIS Engine下实现地图输出
- ArcGIS 10 影像分析工具及ArcGIS Engine的实现
- ArcGIS 10 影像分析工具及ArcGIS Engine的实现
- 使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0
- 基于ArcGIS Engine + C#实现用户自定义动态电力符号
- ArcGis Engine中实现对符号的预览图输出
- ArcGIS Engine中实现对符号的输出预览
- ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针
- ArcGIS Engine 实现注记引线的设置
- ArcGIS Engine中实现图层属性数据的显示
- ArcGIS Engine实现图层间空间选择的优化策略
- ArcGIS Engine实现图层间空间选择的优化策略
- ENVI/IDL与ArcGIS Engine一体化开发的实现
- ArcGIS Engine实现图层间空间选择的优化策略
- linux内存管理浅析 - 图不错
- 今天的快乐从何而来的飞鸽传书
- 剑指offer,位运算相关
- 文本框限制字符输入方法 JavaScript
- 关于UDB升级降版本的问题
- ArcGIS Engine+GetScreen实现自动配准
- MySql查询前n条记录
- C++输入输出运算符重载注意事项
- SQL Server 学习笔记(主键和外键)
- PV操作
- BIC指令
- Android 颜色选择器(ColorPicker)
- 今天的在一旁看电视的蜡笔小新
- PHP文件上传