【问题标题】:Can not read some layers with OGR?不能用 OGR 读取某些层?
【发布时间】:2020-03-28 00:05:45
【问题描述】:

我正在尝试使用 OGR 从带有 python 的 WFS 源中读取功能并将它们放入 PostgreSQL 数据库中。 要开始在迭代中读取特征,我首先获取第一个特征,然后再进入遍历所有特征的 while 循环:

layer.ResetReading()
feat = layer.GetNextFeature()
if not feat:
    self.log("error", "Kon niet naar de eerste feature in %s gaan." % layer.GetName())
else:
    if feat.GetFID():
        self.sourcelist.append(feat.GetFID())
    print ("\n%s : Source feature met dit nummer toevoegen aan %s" % (str(i),uitnaam), end = '\r' )

图层存在。我什至可以从中获取 ogr.layer.GetLayerDefn() ,我用它在执行这段代码之前在 postgresql 中创建字段。 这一切都适用于大多数 WFS 服务和层,但是,对于某些 WFS 层,无法读取任何特征。它不报告错误,只是没有功能。当我使用浏览器使用相同的 srs 和 bbox 发出请求时,它确实会生成一个功能列表。 我真的不明白为什么这适用于我使用的大多数 wfs 服务的大多数层,而对于某些它却不起作用? 我试图用 ogr2ogr 控制台应用程序来实现相同的目标。对于在我的程序中不起作用的层,它会返回一个错误:

ERROR 1: srsDimension = 4 not supported

有人知道这里发生了什么吗?

【问题讨论】:

标签: python postgis gdal ogr osgeo


【解决方案1】:

编辑:

我发现在谷歌上搜索你的错误很少,但可以发现大多数结果显示几何的这个属性设置为 2。可能是一个坏的几何?如果可以,请尝试跳过,或者在使用 ogr 阅读之前尝试使用下面的请求模块进行更正。

结束编辑;

您能否提供一份有效请求样本?我无法获得一个有效的...

在这种情况下,看起来 ogr 无法直接读取 wms,可能是因为 4 维的 srs 错误。在这种情况下,我会尝试使用 requests 模块发出请求,然后获取响应,将其转换为 ogr 可以理解的形式,然后将其放入数据库中。

import requests
url = 'http://geoservices.vlaamsbrabant.be/FSW/MapServer/WFSServer'
x=requests.get(url)
print(x.text)

【讨论】:

    【解决方案2】:

    尝试此请求后:

    https://geoservices.vlaamsbrabant.be/FSW/MapServer/WFSServer?service=wfs&version=2.0.0&request=getfeature&typenames=dataservices_FSW:FietssnelwegenFeatureType

    这似乎是一个证书问题。证书似乎没问题,但浏览器将请求标记为“不安全”。

    可能需要申请证书才能使用此服务?!

    【讨论】:

    • 如果这对任何人都有帮助:此 WFS 不需要请求和安装证书,但 WFS 通常会获得证书。我不确定该协议是如何工作的。通过一个大学,我发现首先从浏览器发出请求可以强制执行此操作,之后可以从代码中完善 Web 服务。我知道这并不能解决问题(似乎很神奇:D),但它可能会帮助某人,因此这个评论。
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多