如何从shapefile的.prj文件中获取Proj4细节?

5
我正在使用mapdotnet服务加载shapefiles来进行gis应用程序开发,而这个mapdotnet服务需要proj4的详细信息。我从spatialreference.org获取这些信息,但是对于这个投影,proj4的详细信息是空白的。我该如何从.prj文件或shapefile中获取proj4的详细信息?
以下是shapefile的.prj文件:
PROJCS["NAD_1983_HARN_WISCRS_EauClaire_County_Feet",GEOGCS["GCS_North_American_1983_HARN",DATUM["D_North_American_1983_HARN",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",394000.0],PARAMETER["False_Northing",300812.797],PARAMETER["Central_Meridian",-91.28888888888889],PARAMETER["Standard_Parallel_1",45.87228112638889],PARAMETER["Scale_Factor",1.000035079],PARAMETER["Latitude_Of_Origin",45.87228112638889],UNIT["Foot_US",0.3048006096012192]]

这样类似的GIS相关问题,您可以去GIS Stack Exchange发帖获取更高级别的专家关注。 - Brad Koch
6个回答

6
您可以使用这个Python脚本(在其他地方也可以看到):
#!/usr/bin/env python

import osr
import sys

def main(prj_file):
    prj_text = open(prj_file, 'r').read()
    srs = osr.SpatialReference()
    if srs.ImportFromWkt(prj_text):
        raise ValueError("Error importing PRJ information from: %s" % prj_file)
    print srs.ExportToProj4()
    #print srs.ExportToWkt()

if __name__=="__main__":
    main(sys.argv[1])

1
如果您无法“import osr”,请尝试安装GDAL Python模块(pip install gdal),然后使用“from osgeo import osr”。 - Marian

2
使用 和 rgdal 库的替代方案:
library(rgdal)
# read the .shp file - layer is the same name but without the .shp
mymap <- readOGR("CA_tract_2000.shp", layer="CA_tract_2000") 
# proj4 info is located in the layer's proj4string slot
mymap@proj4string

2

使用 perl 脚本的另一种解决方案(需要 Geo::GDAL):

#!/usr/bin/perl -w
use strict;
use Geo::OSR;
my $srs = Geo::OSR::SpatialReference->new;
my $prj_text = do { open my $fh, shift or die $!; local $/; <$fh> };
$srs->ImportFromWkt($prj_text);
print $srs->ExportToProj4, "\n";

0

可以从各个组件中解决它。Proj.4允许指定所有内容。您需要ESRI文档来了解他们的PRJ文件。这将包括他们的定义(例如,NAD83_HARN和普通NAD83之间有什么区别?它们可能相同,但我不知道)

另一种方法可能是查看GDAL/OGR库和实用程序。这些能够读取大多数PRJ文件。


0
安装GDAL
conda install -c conda-forge python gdal 

适用于Python 3

from osgeo import osr
import sys

prj_text = open('some.prj', 'r').read()
srs = osr.SpatialReference()
srs.ImportFromWkt(prj_text)

print(srs.ExportToProj4())

0

我使用了PyCRS和从圣地亚哥GIS门户网站下载的地址APN形状文件

在PyCharm中的Python控制台:

import pycrs
crs = pycrs.load.from_file("C:\GIS\Address_APN\Address_APN.prj")
crs.to_proj4()

输出:

> '+proj=lcc +datum=NAD83 +ellps=GRS80 +a=6378137.0 +rf=298.257222101
> +pm=0 +x_0=6561666.666666666 +y_0=1640416.666666667 +lon_0=-116.25 +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +units=us-ft +axis=enu +no_defs'

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