`
lp895876294
  • 浏览: 284823 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

GIS坐标系、投影和转换

 
阅读更多

整理资料信息如下:

坐标转换工具:几个常用坐标系,在投影坐标和高斯坐标之间相互转换。

空间直角坐标系转换:使用七参数转换不同的坐标系。

GIS坐标系和ArcGIS坐标系介绍:GIS地理坐标系(大地坐标系)、投影坐标系(主要是高斯克吕格投影、测量坐标系)、地理坐标和投影坐标之间转换。同一个坐标系的经纬度坐标和投影坐标之间可以直接转换,不需要其它参数。

高斯克吕格投影:高斯克吕格投影坐标系中X轴和Y轴的定义,投影坐标值的构成方式、3度分带和6度分带的划分方式。

Yaw(偏航角)、Pitch(倾斜角)、Roll(旋转角):三维坐标系中这个三个角度的定义。

 

Java使用七参数做坐标变换:

package gis.util;

public class XYTransformor {
	
	private double dx = 0 ;
	
	private double dy = 0 ;
	
	private double dz = 0 ;
	
	private double wx = 0 ;
	
	private double wy = 0 ;
	
	private double wz = 0 ;
	
	private double m = 0 ;
	
	private double targetX = 0 ;
	
	private double targetY = 0 ;
	
	private double targetZ = 0 ;
	
	/**
	 * 设置坐标转换的七参数
	 * @param dx :x方向平移量
	 * @param dy :y方向平移量
	 * @param dz :z方向平移量
	 * @param wx :x方向旋转量
	 * @param wy :y方向旋转量
	 * @param wz :z方向旋转量
	 * @param m :比例因子
	 */
	public XYTransformor(double dx,double dy,double dz,double wx,double wy,double wz,double m){
		this.dx = dx ;
		this.dy = dy ;
		this.dz = dz ;
		this.wx = wx ;
		this.wy = wy ;
		this.wz = wz ;
		this.m = m ;
	}
        //........set and get method	
	public boolean transform(double x,double y ,double z){
		targetX = dx + (1+m)*x + wz*y - wy*z ;
		
		targetY = dy + (1+m)*y - wz*x + wx*z ;
		
		targetZ = dz + (1+m)*z + wy*x - wx*y ;
		
		return true ;
	}

}

 坐标投影、距离计算、三维坐标角度计算、经纬度与弧度相互转换帮助类:

package gis.util;

public class GISUtil {
	/**
	 * 默认地球长半轴长度
	 */
	public static double EARTH_RADIUS = 6378140.0;
	/**
	 * 弧度转度参数
	 */
	public static double RADIAN_CONSTANT = 180.0/Math.PI ;
	/**
	 * 度转弧度参数
	 */
	public static double ANGLE_CONSTANT = Math.PI/180.0 ;
	/**
	 * 计算地球上两点之间的实际距离,单位米
	 * @param longitude:第一个点经度,单位度
	 * @param latitude:第一个点纬度,单位度
	 * @param longitude2:第二个点经度,单位度
	 * @param latitude2:第二个点纬度,单位度
	 */
	public static double getGeographicDistance(double longitude,double latitude,double longitude2,double latitude2,double semimajorAxis){
		double tempLongitude = angleToRadian(longitude);
		double tempLatitude = angleToRadian(latitude);
		double tempLongitude2 = angleToRadian(longitude2);
		double tempLatitude2 = angleToRadian(latitude2);
		double angleValue = Math.sin(tempLatitude)*Math.sin(tempLatitude2)+Math.cos(tempLatitude)*Math.cos(tempLatitude2)*Math.cos(Math.abs(tempLongitude-tempLongitude2)) ;
		return semimajorAxis * Math.acos(angleValue) ;
	}
	/**
	 * angle to radian
	 * @param angle
	 * @return the length ,unit is meter
	 */
	public static double angleToRadian(double angle){
		return angle * ANGLE_CONSTANT ;
	}
	/**
	 * 获取偏航角
	 * @param x:单位米
	 * @param y:单位米
	 * @param x2:单位米
	 * @param y2:单位米
	 * @return
	 */
	public static double getYawAngle(double x, double y, double x2, double y2){
		return Math.atan2(y2-y,x2-x) * RADIAN_CONSTANT ;
	}
	/**
	 * 获取倾斜角
	 * @param x:第一个点经度,单位度
	 * @param y:第一个点纬度,单位度
	 * @param z:第一个点高程,单位米
	 * @param x2:第二个点经度,单位度
	 * @param y2:第二个点纬度,单位度
	 * @param z2:第二个点高程,单位米 
	 * @return
	 */
	public static double getPitchAngle(double x, double y, double z, double x2, double y2, double z2,double semimajorAxis){
		double length = getGeographicDistance(x,y,x2,y2,semimajorAxis);
	    return Math.atan2(-length,z2-z)* RADIAN_CONSTANT ;
//		return Math.atan2(z2-z,length)* RADIAN_CONSTANT ;
	}
	/**
	 * @param longitude:经度 <br>
	 * @param latitude:纬度 <br>
	 * @param zoneWide:经度分带类型 <br>
	 * @param semimajorAxis:地球长半轴长度,单位米
	 * @param inverseFlattening:扁心率的倒数
	 */
	public static double[] gaussKrugerProject(double longitude, double latitude,int zoneWide,double semimajorAxis,double inverseFlattening){
		//默认为6的分带
		if(zoneWide != 3&&zoneWide != 6){
			zoneWide = 6 ;
		}
//		//计算所在位置分带的中央经线
		double primeMeridian = 0 ;
		int projNo= (int)((longitude-1.5) / zoneWide) ; 
		if(zoneWide==3){
			primeMeridian = projNo * zoneWide + zoneWide/2.0 + 1.5; 
		}else{
			primeMeridian = projNo * zoneWide + zoneWide/2.0 ; 
		}
		//度转弧度
		primeMeridian = angleToRadian(primeMeridian);
		longitude = angleToRadian(longitude);
		latitude = angleToRadian(latitude);
		//第一扁心率
		double e2=(2-1/inverseFlattening)/inverseFlattening ;
		//第二扁心率
		double ee=e2*(1.0-e2);
		
		double N=semimajorAxis/Math.sqrt(1.0-e2*Math.sin(latitude)*Math.sin(latitude));
		double T = Math.pow(Math.tan(latitude),2);
		double C = ee*Math.pow(Math.cos(latitude),2);
		double A=(longitude-primeMeridian)*Math.cos(latitude);
		double M=semimajorAxis*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude-(3*e2/8+3*e2*e2/32+45*e2*e2
				*e2/1024)*Math.sin(2*latitude)+(15*e2*e2/256+45*e2*e2*e2/1024)*Math.sin(4*latitude)-(35*e2*e2*e2/3072)*Math.sin(6*latitude));
		double x = N*(A+(1-T+C)*A*A*A/6+(5-18*T+T*T+72*C-58*ee)*A*A*A*A*A/120);
		double y = M+N*Math.tan(latitude)*(A*A/2+(5-T+9*C+4*C*C)*A*A*A*A/24 + (61-58*T+T*T+600*C-330*ee)*A*A*A*A*A*A/720);
		
		//正北方向为x轴,正东方向为y轴,为了避免x轴出现负值,将坐标原点向西偏移500千米,并添加前缀分带编号
		x += 1000000L*(projNo+1)+500000L;
		return new double[]{y,x} ;
	}
}

 

  • 大小: 105.3 KB
  • 大小: 423.1 KB
分享到:
评论

相关推荐

    GIS地理坐标系与投影坐标转换技术资料

    总的来说,GIS地理坐标系与投影坐标转换是GIS技术中的基础部分,它涉及到地理空间数据的定位、存储、分析和呈现。理解和掌握这些知识对于GIS专业人员来说至关重要,无论是在数据处理、软件开发还是地图制作中,都...

    同坐标系平面坐标和投影坐标转换代码

    这个代码示例展示了如何使用`pyproj`库进行坐标转换,但实际使用时,需要根据具体的坐标系和投影方法调整`source_crs`和`target_crs`。 总的来说,坐标转换在GIS领域中扮演着核心角色,确保了地图数据的准确性和...

    GIS坐标、投影、切图

    GIS 坐标系统包括墨卡托投影坐标系、地理坐标系和地面分辨率等。 一、墨卡托投影坐标系(Mercator Projection) 墨卡托投影坐标系是由荷兰地图学家墨卡托(Mercator)在 1569 年拟定的。该投影方法假设地球被围在...

    CAD文件转入GIS中投影坐标设置方法.pdf

    在将CAD文件转入GIS之前,需要先了解地图的地理坐标系和投影坐标系,这样才能确保CAD文件中的坐标能正确转换为GIS文件中的地理平面坐标。由于CAD软件自身无法建立完整的地理坐标系统,不具备地理意义上的查询和分析...

    ArcGIS坐标系定义和转换

    这些工具可以实现复杂的坐标系转换和投影变换。 在ArcEngine中,坐标系的定义和转换也可以通过ISpatialReferenceFactory接口实现。该接口可以创建地理坐标系和投影坐标系,并实现坐标系的转换。例如,可以通过...

    ArcGIS中平面坐标系与大地坐标系之间的转换

    投影转换的目的是为了使不同坐标系下的数据能够在同一个坐标系下进行操作和分析。 四、ArcGIS中的坐标系转换方法 在ArcGIS中,坐标系转换可以通过Data Management Tools-&gt;Projections and Transformations-&gt;Define...

    地理坐标系与投影坐标系

    ### 地理坐标系与投影坐标系详解 ...通过以上内容的介绍,我们可以更深入地了解地理坐标系与投影坐标系的相关知识点,这对于地理信息系统(GIS)的应用、地图制作以及其他相关领域的研究具有重要意义。

    GPS工具箱exe 文件,实现不同坐标系之间的坐标转换,包括空间坐标,大地坐标,投影坐标在不同坐标系之间的转换

    GPS工具箱exe文件就是专为此目的设计的,它能够处理各种类型的坐标,包括空间坐标、大地坐标和投影坐标,进行不同坐标系之间的高效转换。这篇文章将深入探讨这个工具箱的功能和应用。 首先,我们要理解坐标系的基础...

    最新坐标转换含(2000坐标系转换)

    - **Gauss-Kruger坐标系**(或3度带投影):在中国,54坐标系(1954北京坐标系)和80坐标系(1980西安坐标系)都是基于高斯-克吕格投影的区域坐标系。 2. **坐标系转换**: 坐标系之间的转换是为了确保不同坐标系...

    【GIS坐标系转换专题】坐标系转换相关基本理论

    GIS坐标系转换是地理信息系统(GIS)中至关重要的一个概念,涉及到如何在不同的坐标系统之间准确地转换地理位置信息。在GIS应用中,我们通常需要处理多种坐标系,例如大地坐标系、空间直角坐标系以及各种特定地区...

    对点坐标和数据集进行投影坐标系和地理坐标系之间的转换

    "对点坐标和数据集进行投影坐标系和地理坐标系之间的转换"是GIS工作中的常见任务,尤其对于使用SuperMap软件的用户来说。下面将详细阐述这个主题。 首先,我们要理解坐标系的基本概念。地理坐标系是以地球的自然...

    坐标转换含2000坐标系.rar

    "坐标转换含2000坐标系"的标题和描述暗示了这个压缩包可能包含与使用和转换2000坐标系相关的文件。2000坐标系通常指的是中国2000国家大地坐标系(CGCS2000),这是一个现代化的地理坐标系统,旨在取代传统的北京54和...

    WGS84坐标系与任意坐标系坐标转换

    2. **求解转换参数**:利用已知点的两种坐标系(WGS84和任意坐标系)下的坐标值,通过数学模型计算转换参数,包括平移参数、尺度因子和旋转角。这些参数用于描述两个坐标系之间的相对位置和方向差异。 3. **坐标...

    坐标系及投影面转换

    在地理信息系统(GIS)中,坐标系和投影面的转换是一项至关重要的任务。"坐标系及投影面转换"是GIS专业人员必须掌握的核心技能之一,它涉及到地球表面位置的精确表示和不同空间参考系统的互换。这个主题涵盖了一系列...

    解决python gdal投影坐标系转换的问题

    在地理信息系统(GIS)的处理中,经常需要进行坐标系统的转换,尤其是从地理坐标系(Geographic Coordinate System,GCS)转换到投影坐标系(Projected Coordinate System,PCS)。地理坐标系使用基于球体或椭球体的...

    SuperMap Objects Java 点坐标投影转换

    总的来说,"SuperMap Objects Java 点坐标投影转换"是GIS开发中的基础操作,掌握这个技能可以帮助开发者准确无误地处理各种地理数据,从而实现复杂的地图应用和空间分析。理解并熟练运用这个知识点,将使你在GIS领域...

Global site tag (gtag.js) - Google Analytics