正在读取c#中的形状文件坐标



我想使用shapefile的内容在"XAML Map Control"上绘制一条带纬度/经度的多段线。

我有两种类型的形状文件:

  • 一个是.dbf、.prj、qpj、.shx,显然还有.shp文件
  • 只有.shp文件的一个

通过阅读各种库(Net Topology Suite和现在的DotSpace)中的这两种类型的文件,我获得了一个坐标列表(DotSpace。Topology。Coordinate),如:

X   456874.625438354
Y   5145767.7929015327  
  • 如何将其转换为纬度/经度格式
  • 当前的格式是什么
  • .shp文件附带的文件有用吗

您可以使用DotSpace重新投影到lat-long。如果您正在读取shapefile,并且.prj文件在那里,因此投影是已知的,那么您所需要做的就是:

        Shapefile sf = Shapefile.OpenFile("C:myshapefile.shp");
        sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);

但是,如果缺少.prj文件,则需要首先定义投影,如:

        Shapefile sf = Shapefile.OpenFile("C:myshapefile.shp");
        sf.Projection = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
        sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);

但是,例如,如果你没有形状文件,而你只想将一组坐标从一个投影重新投影到另一个投影,你可以直接使用重新投影实用程序:

        // interleaved x and y values, so like x1, y1, x2, y2 etc.
        double[] xy = new double[]{456874.625438354,5145767.7929015327};
        // z values if any.  Typically this is just 0.
        double[] z = new double[]{0};
        // Source projection information.
        ProjectionInfo source = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
        // Destination projection information.
        ProjectionInfo dest = DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984;
        // Call the projection utility.
        DotSpatial.Projections.Reproject.ReprojectPoints(xy, z, source, dest, 0, 1);

最后一种方法使用这样的数组,这样投影模块就可以在不直接引用数据模块的情况下工作。

最新更新