使用Mapsui,如何为坐标系创建新的转换类,从ShapeFile PRJ文件读取



如何使用projnet4geoapi创建与mapsui.projections.itransformations.itransformations.itransformations.itransformation的新变换类,该类别使用projnet4geoapi从prj文件读取源坐标系统。

从mapsui源代码中,有一个最小值的形式,它实现了iTransformation界面以在球形磁极和WGS84之间转换。

来自Mapsui文档:开箱即用的Mapsui对预测的支持是有限的。最小化类仅在球形媒介(EPSG:3857)和WGS84(EPSG:4326)之间进行项目。但是,可以创建自己的转型。您需要实现ITRansformation界面。在此实施中,您需要使用其他一些投影库。推荐的是Projnet4Geoapi。

我可以使用ProJnet4GeoApi创建一个工作转换类,但它实现了geoapi.coordinatesystems.transormentions.IcoorDinateTransFormation not mapsui.proctivition.itransoction.itransformation

            // (FROM SOURCE) prj name: NAD_1983_StatePlane_Massachusetts_Mainland_FIPS_2001"
            ICoordinateSystemFactory csFac = new ProjNet.CoordinateSystems.CoordinateSystemFactory();
            string file = @"C:DRC_DataArcviewUSATownshipsNYTOWNS_POLY.prj";
            string wkt= System.IO.File.ReadAllText(file);
            var csFrom = csFac.CreateFromWkt(wkt);
            //(TO) Prj name: "WGS 84 / Pseudo-Mercator"
            file = @"C:DRC_DataArcview3857.prj";
            wkt = System.IO.File.ReadAllText(file);
            ICoordinateSystem csTo = csFac.CreateFromWkt(wkt);
            //Step 2) Create transformation class.
            CoordinateTransformationFactory ctFac = new CoordinateTransformationFactory();
            //To 3857                
            //var is ICoordinateTransformation
            ICoordinateTransformation ct = ctFac.CreateFromCoordinateSystems(csFrom, ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator);

如何使用mapsui使用iCoorDinateTryStransformation类?我是否在Mapsui中创建了类似球形的投影类。(请参阅下面的代码)?

来自mapsui.provention:

public class MinimalTransformation : ITransformation
    {
        private readonly IDictionary<string, Func<double, double, Point>> _toLonLat = new Dictionary<string, Func<double, double, Point>>();
        private readonly IDictionary<string, Func<double, double, Point>> _fromLonLat = new Dictionary<string, Func<double, double, Point>>();
        public MinimalTransformation()
        {
            _toLonLat["EPSG:4326"] = (x, y) => new Point(x, y);
            _fromLonLat["EPSG:4326"] = (x, y) => new Point(x, y);
            _toLonLat["EPSG:3857"] = SphericalMercato.ToLonLat;
            _fromLonLat["EPSG:3857"] = SphericalMercator.FromLonLat;
        }

源代码:https://github.com/garykindel/shapefileproctiveddemo用过的mapsui 2.0.0-beta.22 nuget软件包,我手动构建了mapsui.desktop.dll。

您已经做了很难的部分,即正确的部分是正确的。

对于您自己的投影类,您可以复制最小值的类别。然后将字典条目添加到"从和投影"到您的自定义投影。

            _toLonLat["EPSG:4326"] = (x, y) => new Point(x, y);
            _fromLonLat["EPSG:4326"] = (x, y) => new Point(x, y);
            _toLonLat["EPSG:3857"] = SphericalMercato.ToLonLat;
            _fromLonLat["EPSG:3857"] = SphericalMercator.FromLonLat;
            _toLonLat["EPSG:CUSTOM"] = MethodToProjectFromMyCustomProjectionToLonLat;
            _fromLonLat["EPSG:CUSTOM"] = MethodToProjectToMyCustomProjectionFromLonLat;

在数据源的CRS上设置" EPSG:自定义"。

相关内容

  • 没有找到相关文章

最新更新