读取c#中的shapefile坐标

我想使用shapefile的内容在纬度/经度上绘制“XAML Map Control”上的折线.

我有2种shapefile:

>一个使用.dbf,.prj,qpj,.shx和明显的.shp文件.
>一个只有.shp文件

使用各种库(Net Topology Suite,现在是DotSpatial)读取这两种类型的文件,我获得了一个坐标列表(DotSpatial.Topology.Coordinate),如:

X   456874.625438354
Y   5145767.7929015327

>我如何将其转换为纬度/经度格式?
>目前的格式是什么?
> .shp文件附带的文件是否有用?

解决方法

您可以使用DotSpatial重新投影到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);

但是,如果您没有shapefile并且只想将一组坐标从一个投影重新投影到另一个投影,则可以直接使用reproject实用程序:

// 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 @R_567_4045@ion.
        ProjectionInfo source = DotSpatial.Projections.KNownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
        // Destination projection @R_567_4045@ion.
        ProjectionInfo dest = DotSpatial.Projections.KNownCoordinateSystems.Geographic.World.WGS1984;
        // Call the projection utility.
        DotSpatial.Projections.Reproject.ReprojectPoints(xy,z,source,dest,1);

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...