Python 将形状文件纬度转换为真实纬度

Python 将形状文件纬度转换为真实纬度,python,shapefile,Python,Shapefile,我有一个地理坐标(lat,long)列表和一个具有不同层的shapefile。我希望能够识别每个坐标所属的层 但是shapefile(.shp)有一种策略,其中纬度和经度在一个奇怪的范围内以数字表示,例如120724.86008864和484497.34058312 我知道prj文件包含有关如何进行转换的信息,但我似乎不知道如何进行转换。就是这样: PROJCS[“RD_New”,GEOGCS[“GCS_Amersfoort”,基准[“D_Amersfoort”,球体[“Bessel_1841”

我有一个地理坐标(lat,long)列表和一个具有不同层的shapefile。我希望能够识别每个坐标所属的层

但是shapefile(.shp)有一种策略,其中纬度和经度在一个奇怪的范围内以数字表示,例如120724.86008864和484497.34058312

我知道prj文件包含有关如何进行转换的信息,但我似乎不知道如何进行转换。就是这样:

PROJCS[“RD_New”,GEOGCS[“GCS_Amersfoort”,基准[“D_Amersfoort”,球体[“Bessel_1841”,6377397.155299.1528128]],PRIMEM[“Greenwich”,0],单位[“度”,0.0174532925199432955]],投影[“双赤平”],参数[“假东距”,155000],参数[“假北距”,463000],参数[“中央子午线”,5.387688889],参数[“比例因子”,0.999079],参数[“原点纬度”,52.15616055555],单位[“米”,1]]

具体问题是如何将规则的lat/long点转换为shapefile的点

在Python中使用此库


非常感谢您的帮助。

您想获得坐标吗?或者解析prj文件?我可以毫无问题地解析该文件,但是shapefile中的lat/long处于不同的比例或范围。纬度120724.86008864显然是错的。我有正常的纬度,比如52.3605883。所以我想知道我必须对我的法向坐标应用哪种变换,才能像文件一样。然后,我将能够将它们与层中的多边形相交。你的目的是什么?我想从字符串中获取小数点后最多3位的所有小数。ex:12.55 3.44 321.11
        import re
        regex = "\d{1,3}\.\d+"
        s ="""PROJCS["RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199432955]],PROJECTION["Double_Stereographic"],PARAMETER["False_Easting",155000],PARAMETER["False_Northing",463000],PARAMETER["Central_Meridian",5.38763888888889],PARAMETER["Scale_Factor",0.9999079],PARAMETER["Latitude_Of_Origin",52.15616055555555],UNIT["Meter",1]] """

        m = re.search(regex, s)

        if m:
            print m.groups()
# define input
shape_file = "file.shp"
o_lat = 52.3605883
o_lon = 4.8593157

# geospatial bureocracy
driver = ogr.GetDriverByName('ESRI Shapefile')
shape = driver.Open(shape_file)
layer = shape.GetLayer()
geo_ref = layer.GetSpatialRef()
point_ref = ogr.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran = ogr.osr.CoordinateTransformation(point_ref, geo_ref)

# critical part: transform longitude/latitude to the shapefile's projection
[t_lon, t_lat, z] = ctran.TransformPoint(o_lon, o_lat)
print('original coords', o_lon, o_lat)
print('transformed coords', t_lon, t_lat)

# create the needle
point = ogr.Geometry(ogr.wkbPoint)
point.SetPoint_2D(0, t_lon, t_lat)
layer.SetSpatialFilter(point)

# look it up
for feature in layer:
    polygon = feature.GetGeometryRef()
    if polygon.Contains(point):
        print('Found it', feature.ExportToJson()