GDAL TransformPoint方法3参数调用编译报错求助
解决GDAL CoordinateTransformation.TransformPoint的3参数重载编译错误
错误原因
你调用的TransformPoint(nad27Coordinates, nad83Coordinates[0], nad83Coordinates[1])是3参数版本,但从反编译的重载定义来看,该方法仅提供以下三种重载:
- 单参数:接受一个
double[]数组,原地修改数组内容为转换后的坐标 - 4参数:接受输出数组、x、y、z坐标值
- 5参数:接受输出数组、x、y、z、t坐标值
不存在匹配3个参数的重载,因此触发编译错误。
可行解决方案
方案1:使用单参数重载(原地转换)
该重载会直接修改传入的数组,将其更新为转换后的坐标,适合不需要保留原输入数组的场景:
// 将NAD83坐标放入数组(可添加z值,默认传0即可) double[] coords = new double[] { nad83Coordinates[0], nad83Coordinates[1], 0 }; // 执行转换,coords数组会被替换为NAD27坐标 transform.TransformPoint(coords); // 提取转换后的经纬度 nad27Coordinates[0] = coords[0]; nad27Coordinates[1] = coords[1];
方案2:使用4参数重载(指定输出数组)
补充一个z坐标值(地理坐标场景下通常传0),匹配4参数的重载:
// 将输出数组改为长度3,适配z值存储 double[] nad27Coordinates = new double[3]; // 执行转换,传入输出数组、x、y、z transform.TransformPoint(nad27Coordinates, nad83Coordinates[0], nad83Coordinates[1], 0);
修改后的完整代码示例
以下是采用方案2的完整可编译代码:
using System; using OSGeo.GDAL; using OSGeo.OSR; public static void Main() { // Register all GDAL drivers Gdal.AllRegister(); // Define the WKT for NAD83 and NAD27 coordinate systems string nad83Wkt = @"GEOGCS[\"\"NAD83\"\", DATUM[\"\"North_American_Datum_1983\"\", SPHEROID[\"\"GRS_1980\"\",6378137,298.257222101], AUTHORITY[\"\"EPSG\"\",\"\"6269\"\"]], PRIMEM[\"\"Greenwich\"\",0], UNIT[\"\"degree\"\",0.0174532925199433], AUTHORITY[\"\"EPSG\"\",\"\"4269\"\"]]"; string nad27Wkt = @"GEOGCS[\"\"NAD27\"\", DATUM[\"\"North_American_Datum_1927\"\", SPHEROID[\"\"Clarke_1866\"\",6378206.4,294.978698213898], AUTHORITY[\"\"EPSG\"\",\"\"6267\"\"]], PRIMEM[\"\"Greenwich\"\",0], UNIT[\"\"degree\"\",0.0174532925199433], AUTHORITY[\"\"EPSG\"\",\"\"4267\"\"]]"; // Create Spatial Reference objects for NAD83 and NAD27 SpatialReference nad83 = new SpatialReference(nad83Wkt); SpatialReference nad27 = new SpatialReference(nad27Wkt); // Create a Coordinate Transformation CoordinateTransformation transform = new CoordinateTransformation(nad83, nad27); // Example NAD83 coordinates (longitude, latitude) double[] nad83Coordinates = new double[] { -101.9296078000, 32.1094884400 }; // Variables to hold the transformed coordinates(改为长度3) double[] nad27Coordinates = new double[3]; // Perform the transformation to NAD27(补z值0) transform.TransformPoint(nad27Coordinates, nad83Coordinates[0], nad83Coordinates[1], 0); // Output the transformed coordinates Console.WriteLine($"NAD83 Coordinates: Longitude: {nad83Coordinates[0]}, Latitude: {nad83Coordinates[1]}"); Console.WriteLine($"NAD27 Coordinates: Longitude: {nad27Coordinates[0]:F10}, Latitude: {nad27Coordinates[1]:F10}"); // Cleanup nad83.Dispose(); nad27.Dispose(); transform.Dispose(); Console.ReadKey(); }
内容的提问来源于stack exchange,提问作者Jedd
相关产品推荐
相关产品推荐

