Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NetTopologySuite TransformGeometry时出错_C#_.net_Gis_Nettopologysuite - Fatal编程技术网

C# 使用NetTopologySuite TransformGeometry时出错

C# 使用NetTopologySuite TransformGeometry时出错,c#,.net,gis,nettopologysuite,C#,.net,Gis,Nettopologysuite,我正在尝试读取一个形状文件,该文件将英国北/东坐标系(BritishNationalGridOSGB36)转换为纬度/经度(WGS1984)。我发现了一篇关于如何使用NetTopologySuite实现这一点的优秀文章。shapefile的读取工作正常,但在加载期间转换地理位置时遇到问题 我已将问题归结为NetTopologySuite变换几何方法。如果我使用DotSpatial ReprojectPoints转换一个点,它将正常工作(一旦我为BritishNationalGridOSGB36获

我正在尝试读取一个形状文件,该文件将英国北/东坐标系(BritishNationalGridOSGB36)转换为纬度/经度(WGS1984)。我发现了一篇关于如何使用NetTopologySuite实现这一点的优秀文章。shapefile的读取工作正常,但在加载期间转换地理位置时遇到问题

我已将问题归结为NetTopologySuite变换几何方法。如果我使用DotSpatial ReprojectPoints转换一个点,它将正常工作(一旦我为BritishNationalGridOSGB36获得了正确的定义,请参阅以获取关于此的有用帖子)。然而,NetTopologySuite的变换几何给了我一个错误的答案。答案在两个方面是错误的

  • 它具有经度中的纬度值(应为-0.095399303)
  • 纬度是181560(应该是51.517489)
  • 我想使用NetTopologySuite的TransformGeometry,因为它处理几何图形的效果要比取消选中每个坐标并对其进行更改要好得多。我也认为我一定做了一些事情,所以我想修复它并学习

    这是我的NUNIT测试代码

    class TestConvert
    {
        //The standard DotSpatial definition, KnownCoordinateSystems.Projected.NationalGrids.BritishNationalGridOSGB36, is incorrect so needed defined string below
        const string BritishNationalGridOsgb36String = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs";
    
        readonly ProjectionInfo _britishNationalGridOsgb36 = ProjectionInfo.FromProj4String(BritishNationalGridOsgb36String);
        readonly ProjectionInfo _wgs84 = KnownCoordinateSystems.Geographic.World.WGS1984;
    
        [Test]
        public void ConvertAPointUsingDotSpatialReproject()
        {
            //SETUP
            var xy = new double[] { 532248.29992272425, 181560.30052819476 };
            var z = new double[] { 0 };
    
            //ATTEMPT
            Reproject.ReprojectPoints(xy, z, 
                _britishNationalGridOsgb36, _wgs84, 0, z.Length);
    
            //VERIFY            
            xy[0].ShouldEqualWithTolerance(-0.095399303, 0.001);
            xy[1].ShouldEqualWithTolerance(51.517489, 0.001);
        }
    
    
        [Test]
        public void ConvertAPointUsingNetTopologySuiteTransformGeometry()
        {
            //SETUP
            var factory = NetTopologySuite.Geometries.GeometryFactory.Default;
            var pointNatGrid = new NetTopologySuite.Geometries.Point(532248.29992272425, 181560.30052819476);    
    
            //ATTEMPT
            var transform = new DotSpatialMathTransform(
                _britishNationalGridOsgb36, _wgs84);
            var result = GeometryTransform.TransformGeometry(
                factory, pointNatGrid, transform);
    
            //VERIFY            
            result.GeometryType.ShouldEqual("Point");
            result.Coordinates.Count().ShouldEqual(1);
            result.Coordinates[0].X.ShouldEqualWithTolerance(-0.095399303, 0.001);
            result.Coordinates[0].Y.ShouldEqualWithTolerance(51.517489, 0.001);
        }
    
    }
    
    第一个测试通过,第二个测试在两个应满足的公差测试中失败


    非常感谢您的帮助。

    在进一步的研究中,我在NetTopologySuite.CoordinateSystems.Transformation.DotSpatial.Projections代码中发现了一个bug。我报告了,现在已经修复了。有关我发现的问题的详细信息以及已修复的确认信息,请参见此处