You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArcGIS Pro SDK中将折线的起点和终点转换为WGS84坐标系

米单位坐标转WGS84坐标系实现方案

首先明确:你代码里的米单位坐标属于投影坐标系(比如Web墨卡托EPSG:3857、UTM分带坐标系等),WGS84是地理坐标系(经纬度),转换需要依赖投影转换工具,这里以.NET常用的Proj.NET库为例实现:

步骤1:安装Proj.NET库

通过NuGet包管理器安装ProjNet,或在Package Manager Console执行:

Install-Package ProjNet

步骤2:修改代码实现坐标转换

假设你的米坐标是Web墨卡托(EPSG:3857),如果是其他投影坐标系,替换对应的EPSG编码即可:

using ProjNet.CoordinateSystems;
using ProjNet.CoordinateSystems.Transformations;

private async void ShowBalloonCallout(Geometry geometry)
{
    if (geometry is Polyline polyline)
    {
        var startPoint = polyline.Points.FirstOrDefault();
        var endPoint = polyline.Points.LastOrDefault();

        // 定义原始投影坐标系(Web墨卡托,EPSG:3857)和目标坐标系(WGS84,EPSG:4326)
        var csFactory = new CoordinateSystemFactory();
        var transformFactory = new CoordinateTransformationFactory();

        var sourceCs = csFactory.CreateFromWkt("PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"3857\"]]");
        var targetCs = csFactory.CreateFromWkt("GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]");

        // 创建转换器
        var transformation = transformFactory.CreateFromCoordinateSystems(sourceCs, targetCs);

        // 转换起点坐标(X=东向米,Y=北向米)
        if (startPoint != null)
        {
            var transformedStart = transformation.MathTransform.Transform(new[] { startPoint.X, startPoint.Y });
            // transformedStart[0]是经度,transformedStart[1]是纬度
            var wgsStartLon = transformedStart[0];
            var wgsStartLat = transformedStart[1];
            // 这里可以使用转换后的经纬度做后续处理
        }

        // 转换终点坐标
        if (endPoint != null)
        {
            var transformedEnd = transformation.MathTransform.Transform(new[] { endPoint.X, endPoint.Y });
            var wgsEndLon = transformedEnd[0];
            var wgsEndLat = transformedEnd[1];
            // 后续处理逻辑
        }
    }
}

关键注意事项

  • 确认原始坐标系EPSG编码:如果你的米坐标不是Web墨卡托,一定要替换对应的WKT字符串或EPSG编码(比如UTM 50N是EPSG:32650),否则转换结果完全错误。
  • 异步方法优化:async void一般用于事件处理,若转换逻辑耗时,建议用async Task替代,避免阻塞UI。
  • 空值判断:代码里已经对startPoint和endPoint做了空值判断,避免空引用异常。

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:03:18