代码是将WGS84地理坐标转换为WGS84UTM投影坐标,如果要转换为西安80或北京54坐标,则参数是:
北京54坐标:
地理坐标枚举值为:esriSRGeoCSType.esriSRGeoCS_Beijing1954
投影坐标枚举值为:
esriSRProjCSType.esriSRProjCS_Beijing1954GK_13……
西安80坐标:
地理坐标枚举值为:esriSRGeoCS3Type.esriSRGeoCS_Xian1980
投影坐标枚举值为:
esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_CM_102E……
代码如下:
public class WGS84UTM {/// /// 从地理坐标转换到投影坐标/// /// 经度/// 纬度,南半球为负数/// X/// Y/// 带区(1-60,从-180到+180,6度带)public static void GeoToPrj(double longitude, double latitude, out double x, out double y, out int zone) { ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); IGeographicCoordinateSystem pGeoCoordSys = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);int startprjnum = 32601;if (latitude < 0) startprjnum = 32701; zone = (int)Math.Round(((longitude + 3) / 6)) + 30;int prjnum = startprjnum + zone - 1; IProjectedCoordinateSystem pPrjCoordSys = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(prjnum); IPoint pt = new PointClass(); pt.PutCoords(longitude, latitude); IGeometry geo = (IGeometry)pt; geo.SpatialReference = pGeoCoordSys; geo.Project(pPrjCoordSys); x = pt.X; y = pt.Y;if (latitude < 0) y = 0 - y; }/// /// 从投影坐标转换到地理坐标/// /// X/// Y,南半球为负数/// 带区(1-60,从-180到+180,6度带)/// 经度/// 纬度public static void PrjToGeo(double x, double y, int zone, out double longitude, out double latitude) { ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); IGeographicCoordinateSystem pGeoCoordSys = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);int startprjnum = 32601;bool South = false;if(y < 0) { South = true; y = 0 - y; }if (South) startprjnum = 32701;int prjnum = startprjnum + zone - 1; IProjectedCoordinateSystem pPrjCoordSys = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(prjnum); IPoint pt = new PointClass(); pt.PutCoords(x, y); IGeometry geo = pt as IGeometry; geo.SpatialReference = pPrjCoordSys; geo.Project(pGeoCoordSys); longitude = pt.X; latitude = pt.Y;if (South) latitude = 0 - latitude; } }
本文作者:lai_xiao_hui
原文地址:
http://blog.163.com/lai_xiao_hui/blog/static/123037324201151443221942/
文末福利来袭公众号后台回复‘交流群’,即可进入我们地信交流群哦,进群回复论坛用户名即可获得500铜板奖励哦,群里还有更多论坛新活动和福利等着你的到来