標籤:
轉載地址:http://blog.163.com/lai_xiao_hui/blog/static/123037324201151443221942/
代碼是將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
{
/// <summary>
/// 從地理座標轉換到投影座標
/// </summary>
/// <param name="longitude">經度</param>
/// <param name="latitude">緯度,南半球為負數</param>
/// <param name="x">X</param>
/// <param name="y">Y</param>
/// <param name="zone">帶區(1-60,從-180到+180,6度帶)</param>
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;
}
/// <summary>
/// 從投影座標轉換到地理座標
/// </summary>
/// <param name="x">X</param>
/// <param name="y">Y,南半球為負數</param>
/// <param name="zone">帶區(1-60,從-180到+180,6度帶)</param>
/// <param name="longitude">經度</param>
/// <param name="latitude">緯度</param>
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;
}
}
ArcGIS 地理座標與投影座標轉換 [轉]