平面投影坐标转经纬度坐标

4 篇文章 0 订阅
4 篇文章 0 订阅

平面投影坐标转经纬度坐标

本人在进行开发时,使用geotools的GeoTiffReader类读取卫星影像的顶点坐标,得到的是平面坐标,单位是米,打开arcGIS,加载影像,右下角会有坐标,在视图->数据框属性->常规->单位,可以更改坐标显示单位,一开始默认单位是,我改成十进制度,如图:这里写图片描述
现想将平面坐标转化为经纬度,在网上看到一片博客:经纬度坐标和投影坐标的转换。参考该代码写类自己的,我的目的正好与博客写的相反。然后我就参考geotools-17的用户文档(
geotools/geotools-17.0-userguide/geotools-17.0/library/referencing/crs.html?highlight=transform
现摘取部分文档():
官方文档
程序主要靠这俩方法:CRS.findMathTransform()方法定义转换的坐标系,JTS.transform()进行坐标的转换。

package Test02;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.gce.geotiff.GeoTiffReader;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;

public class CoordinateConversion02 {

	/**
	 * 平面坐标转经纬度
	 */
	public static double[] convert(double x, double y,CoordinateReferenceSystem crs) 
            throws FactoryException, MismatchedDimensionException, TransformException {
	Coordinate sourceCoord = new Coordinate(x, y);
    GeometryFactory geoFactory = new GeometryFactory();
    Point sourcePoint = geoFactory.createPoint(sourceCoord);
            
    MathTransform transform = CRS.findMathTransform(crs, DefaultGeographicCRS.WGS84, false);
    Point targetPoint = (Point) JTS.transform(sourcePoint, transform);
    double[] targetCoord = {targetPoint.getX(), targetPoint.getY()};
    return targetCoord;
	}
	/**
	 * 测试
	 */
	public static void main( String[] args ) throws Exception
    {
        double x = -132202.486;
        double y = 1657014.274;
        //第一种获取方式,imageFile为卫星影像的文件地址,目的是获取影像的投影
//        GeoTiffReader reader = new GeoTiffReader(imageFile);
//        GridCoverage2D coverage = reader.read(null);
//        //获取投影
//        CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem2D();
        //这是第二种获取方式(参考博文),
        final String wkt="PROJCS[\"unnamed\"," 
                                +"GEOGCS[\"WGS 84\"," 
                                      + "DATUM[\"World Geodetic System 1984\", "
                                         +"SPHEROID[\"WGS 84\", 6378137.0, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]]," 
                                        + "AUTHORITY[\"EPSG\",\"6326\"]], "
                                     +  "PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]]," 
                                     + " UNIT[\"degree\", 0.017453292519943295], "
                                      + "AXIS[\"Geodetic longitude\", EAST], "
                                      +" AXIS[\"Geodetic latitude\", NORTH], "
                                      + "AUTHORITY[\"EPSG\",\"4326\"]], "
                                   + " PROJECTION[\"Albers_Conic_Equal_Area\"], "
                                   +  "PARAMETER[\"central_meridian\", 110.0], "
                                   + " PARAMETER[\"latitude_of_origin\", 12.0], "
                                    +" PARAMETER[\"standard_parallel_1\", 25.0], "
                                   +  "PARAMETER[\"false_easting\", 0.0], "
                                   +  "PARAMETER[\"false_northing\", 0.0]," 
                                    + "PARAMETER[\"standard_parallel_2\", 47.0]," 
                                    + "UNIT[\"m\", 1.0], "
                                    + "AXIS[\"Easting\", EAST], "
                                   +  "AXIS[\"Northing\", NORTH]]";
        CoordinateReferenceSystem crs = CRS.parseWKT(wkt);
        double[] coordinate = convert(x, y,crs);
        System.out.println("X: " + coordinate[0] + ", Y: " + coordinate[1]);
    }
}
";

好了,一切完成,用arcGIS进行检验正确。代码还不完整,不断更新中。
更新(2018年1月1日):
当我把这个类移植到另一台电脑上并添加 gt-geotiff-17.0.jar后,恩,就添加了这一个jar包没报错,运行时报错:Exception in thread “main” java.lang.NoClassDefFoundError: javax/media/jai/I。个人觉得这是jar包不全所致,解决办法是先删除全部的import* 引用,然后一个一个的添加jar包,jar包源码在GitHub上有,有的方法名不止一个jar包,这个需特别注意。

本人原创,转载请附上本文连接。
欢迎技术交流。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在ArcGIS中,平面坐标经纬度可以通过两种方式实现。第一种方式是使用ArcGIS自带的工具进行换,第二种方式是利用Python代码进行换。 在使用自带工具进行换时,需要将平面坐标作为输入数据,选择合适的投影坐标系,然后选择换方式为“平面坐标经纬度”或“投影坐标系到地理坐标系”,最后点击“运行”即可得到经纬度坐标。 如果想要使用Python代码进行换,则需要调用ArcPy模块下的相应函数,并输入平面坐标投影坐标系参数以及需要换的空间参考。例如,使用下列代码将平面坐标换为经纬度坐标系: ``` import arcpy arcpy.env.workspace = "C:/data" input_fc = "points.shp" sr = arcpy.SpatialReference(26915) #投影坐标系 with arcpy.da.UpdateCursor(input_fc, ['SHAPE@X', 'SHAPE@Y'], spatial_reference=sr) as cursor: for row in cursor: pt = arcpy.Point(row[0], row[1]) pt_geo = pt.projectAs(arcpy.SpatialReference(4326)) #将投影坐标化为地理坐标系 row[0] = pt_geo.X row[1] = pt_geo.Y cursor.updateRow(row) ``` 以上是ArcGIS平面坐标经纬度的方式,可以根据实际需求选择合适的方法。 ### 回答2: ArcGIS是一种常用的GIS软件,GIS意为地理信息系统,它是一种用来管理、分析、展示地理信息的技术。在使用ArcGIS时,有时需要将平面坐标换为经纬度。本文将详细介绍如何使用ArcGIS进行平面坐标经纬度的操作。 在ArcGIS中,平面坐标经纬度方法有两种:手动输入和使用ArcMap工具。 1. 手动输入 第一步:打开ArcMap软件,并创建一个新的空白文档 第二步:在添加图层的选项中选择“添加XY数据” 第三步:在“添加XY数据”对话框中,选择你的坐标系,确定X坐标和Y坐标字段,以及你的坐标单位 第四步:在输入X、Y坐标的时候,注意单位的选择,输入完成后点击“确定” 第五步:将添加的图层换为经纬度坐标系,选择“数据”菜单中的“导出数据” 第六步:在导出的对话框里,选择导出的输出类型为“Shapefile”,选择输出文件夹位置和名称,然后选择输出坐标系为“WGS84”,确定,就可以输出经纬度坐标。 2. 使用ArcMap工具 第一步:打开ArcMap软件,并添加需要的图层 第二步:在“工具”菜单中找到“数据管理工具”,选择“定义投影” 第三步:在定义投影对话框中,选择要化的数据,在目标坐标系中选择一个经纬度坐标系,如“WGS84” 第四步:如果需要化的是整个数据集,选择“全部化”,如果需要化的是选择的图形,选择“选择性化”,完成后点击“确定” 第五步:化完成后,就可以将数据中的平面坐标换为经纬度坐标系。 最后,需要注意的是,平面坐标经纬度时,如果换出来的坐标数据不对,可能是坐标系选择不正确。因此,选对坐标系是非常重要的。 ### 回答3: ArcGIS是一款地理信息软件,广泛应用于各个领域的地理信息系统。在使用ArcGIS进行地图制作或者数据分析时,经常会遇到需要将平面坐标换为经纬度的情况。 平面坐标经纬度的区别在于,平面坐标是基于横平竖直的坐标系进行的,如UTM坐标系,而经纬度是以地球为基准,基于经度和纬度的方式进行的。因此,需要进行两者之间的换,才能实现地图和数据的互通。 在ArcGIS中,平面坐标经纬度的具体步骤如下: 1. 打开ArcMap软件,选择菜单栏上的工具——数据框属性,进入"坐标系统"页面; 2. 在坐标系统页面中,选择"编辑"按钮,进入"投影坐标系统" 对话框,在"预定义的坐标系统"列表中,找到目标坐标系; 3. 点击"换"按钮,在"换" 对话框中,选择需要换的参照系,输入坐标值,点击"计算"按钮即可得到经纬度; 4. 在弹出的"计算XY定位"对话框中,可以查看当前坐标经纬度和高度信息。 需要注意的是,平面坐标换为经纬度时,需要选择具体的地理坐标系,并保证选择的坐标系与数据的实际情况相符合。 总之,ArcGIS平面坐标经纬度是一个比较常用的操作,能够帮助用户实现数据的换和互通,不仅在地图制作、空间分析等领域适用,也在其他领域得到广泛应用。通过以上的步骤,就可以实现平面坐标经纬度的操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值