主要内容

本页采用了机器翻译。点击此处可查看英文原文。

将坐标系转换到不同的投影坐标系

若直接比较采用不同投影坐标参考系 (CRS) 的数据集,则结果将不准确。因此,在比较数据集之前,首先应验证其坐标参考系 (CRS) 是否相同。如果不同的投影坐标系具有相同的底层地理坐标系,则可以将坐标从一个投影坐标系转换到另一个投影坐标系。一旦数据集都参照到相同的投影坐标系,即可进行比较。

要将投影的 x-y 坐标转换为不同的投影坐标参考系,首先需使用projinv函数将 x-y 坐标解投影为经纬度坐标。然后,使用projfwd函数将经纬度坐标投影到不同投影坐标系中的 x-y 坐标。

例如,导入一个包含波士顿道路的 xy 坐标的 shapefile。同时将 shapefile 的信息作为结构导入。通过访问该结构的 CoordinateReferenceSystem 字段,可获取坐标对应的投影 CRS。

s = shaperead('boston_roads.shp');
x1 = [s.X];
y1 = [s.Y];
info = shapeinfo('boston_roads.shp');
p1 = info.CoordinateReferenceSystem;

x-y 坐标解投影,并返回经纬度坐标。

[lat,lon] = projinv(p1,x1,y1);

为目标投影选择新的投影坐标系。在此示例中,为 UTM 19N 分区创建一个 projcrs 对象。验证两个投影坐标系是否具有相同的地理坐标系。如果地理坐标系不同,则投影坐标可能不准确。您可以通过查询 projcrs 对象的 GeographicCRS 属性来获取地理坐标参考系。

p2 = projcrs(26919);
p2.GeographicCRS.Name
ans = 
"NAD83"
p1.GeographicCRS.Name
ans = 
"NAD83"

通过指定您创建的 projcrs 对象,将经纬度坐标投影到 x-y 坐标系。

[x2,y2] = projfwd(p2,lat,lon);

通过显示原始坐标系 x-y 与新坐标系 x-y 进行比较。为每幅图添加标签和标题。

figure
mapshow(x1,y1)
xlabel('x (meters)')
ylabel('y (meters)')
title(p1.Name)

Figure contains an axes object. The axes object with title NAD83 / Massachusetts Mainland, xlabel x (meters), ylabel y (meters) contains an object of type line.

figure
mapshow(x2,y2)
xlabel('x (meters)')
ylabel('y (meters)')
title(p2.Name)

Figure contains an axes object. The axes object with title NAD83 / UTM zone 19N, xlabel x (meters), ylabel y (meters) contains an object of type line.

可视化效果相似,但轴标尺上显示的坐标对应不同的投影坐标系。

另请参阅

| | | |

主题