如何读取Shapefile的prj文件?

3
我正在使用NetTopologySuite.IO.ShapefileDataReader读取shp文件,但我认为我还需要处理prj文件。是否有API可以读取prj文件?(这里提到了prj文件:https://en.wikipedia.org/wiki/Shapefile
我已经尝试查找NetTopologySuite.IO命名空间中的prj文件读取器,但没有找到,我也尝试查看NetTopologySuite.IO.ShapefileDataReader.Read()返回结果,但没有看到存储在prj文件中的数据。

prj文件是一个单行文本文件。你为什么认为需要读它呢? - FObermaier
嗨@FObermaier,我认为我需要读取文件,因为坐标可能根据文件内容进行调整。如果我正在使用两组具有不同prj文件的文件(两个不同的数据源),那么这些坐标需要重新调整为通用标准,是吗? - Alex B
请查看您的链接。在参考文献中有一个C库。 - jdweng
1个回答

4

读取.prj文件的库有几个:

https://www.nuget.org/packages/ProjNet/

https://www.nuget.org/packages/DotSpatial.Projections/

https://www.nuget.org/packages/GDAL/

https://www.nuget.org/packages/SharpProj.NetTopologySuite/

只有在将坐标投影到另一个坐标系时才需要处理.prj文件;例如,在单个地图中显示不同坐标系统的数据或在投影坐标系中进行线性测量。下面提供了一些读取.prj文件的示例,所有链接的项目都具有加载、投影和保存prj文件的方法。

在ProjNet中,您可以使用CoordinateSystemWktReader读取投影文件:

public void ReadProjection(string filename)
{
    var projection = CoordinateSystemWktReader.Parse(File.ReadAllText(filename)) as CoordinateSystem;
}

在GDAL中,SpatialReference类用于管理投影信息的方法。
public void ReadProjection(string filename)
{
    // Read in the vector data
    Driver driver = Ogr.GetDriverByName("ESRI Shapefile");
    DataSource inDataSource = driver.Open(filename, 0);
    OSGeo.OGR.Layer inLayer = inDataSource.GetLayerByIndex(0);
 
    SpatialReference srcSrs = inLayer.GetSpatialRef();
   
    inDataSource.FlushCache()
    inDataSource.Dispose()
}

在DotSpatial.Projections中:
public void ReadProjection(string filename)
{
    var projection = ProjectionInfo.Open(filename);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接