gdal/autotest/ogr/ogr_ogdi.py

251 строка
9.8 KiB
Python
Исполняемый файл

#!/usr/bin/env pytest
###############################################################################
# $Id$
#
# Project: GDAL/OGR Test Suite
# Purpose: Test read functionality for OGR OGDI driver.
# Author: Even Rouault <even dot rouault at spatialys.com>
#
###############################################################################
# Copyright (c) 2010-2011, Even Rouault <even dot rouault at spatialys.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
###############################################################################
import os
import gdaltest
import ogrtest
import pytest
from osgeo import ogr
###############################################################################
def test_ogr_ogdi_1():
ogrtest.ogdi_ds = None
# Skip tests when -fsanitize is used because of memleaks in libogdi
if gdaltest.is_travis_branch("sanitize"):
ogrtest.ogdi_drv = None
pytest.skip("Skipping because of memory leaks in OGDI")
ogrtest.ogdi_drv = ogr.GetDriverByName("OGDI")
if ogrtest.ogdi_drv is None:
pytest.skip()
gdaltest.download_or_skip(
"http://freefr.dl.sourceforge.net/project/ogdi/OGDI_Test_Suite/3.1/ogdits-3.1.0.zip",
"ogdits-3.1.0.zip",
)
try:
os.stat("tmp/cache/ogdits-3.1")
except OSError:
try:
gdaltest.unzip("tmp/cache", "tmp/cache/ogdits-3.1.0.zip")
try:
os.stat("tmp/cache/ogdits-3.1")
except OSError:
pytest.skip()
except OSError:
pytest.skip()
url_name = (
"gltp:/vrf/" + os.getcwd() + "/tmp/cache/ogdits-3.1/data/vpf/vm2alv2/texash"
)
ds = ogr.Open(url_name)
ogrtest.ogdi_ds = ds
assert ds is not None, "cannot open " + url_name
assert ds.GetLayerCount() == 57, "did not get expected layer count"
layers = [
("libref@libref(*)_line", ogr.wkbLineString, 15),
("libreft@libref(*)_text", ogr.wkbPoint, 4),
("markersp@bnd(*)_point", ogr.wkbPoint, 40),
("polbnda@bnd(*)_area", ogr.wkbPolygon, 6),
]
for l in layers:
lyr = ds.GetLayerByName(l[0])
assert lyr.GetLayerDefn().GetGeomType() == l[1]
assert lyr.GetFeatureCount() == l[2]
# if l[1] != ogr.wkbNone:
# if lyr.GetSpatialRef().ExportToWkt().find('WGS 84') == -1:
# return 'fail'
lyr = ds.GetLayerByName("libref@libref(*)_line")
feat = lyr.GetNextFeature()
wkt = "LINESTRING (-97.570159912109375 31.242000579833984,-97.569938659667969 31.242116928100586,-97.562828063964844 31.245765686035156,-97.558868408203125 31.247797012329102,-97.555778503417969 31.249361038208008,-97.55413818359375 31.250171661376953)"
ref_geom = ogr.CreateGeometryFromWkt(wkt)
assert (
ogrtest.check_feature_geometry(feat, ref_geom) == 0
), feat.GetGeometryRef().ExportToWkt()
###############################################################################
# Run test_ogrsf
def test_ogr_ogdi_2():
if ogrtest.ogdi_ds is None:
pytest.skip()
import test_cli_utilities
if test_cli_utilities.get_test_ogrsf_path() is None:
pytest.skip()
url_name = (
"gltp:/vrf/" + os.getcwd() + "/tmp/cache/ogdits-3.1/data/vpf/vm2alv2/texash"
)
ret = gdaltest.runexternal(
test_cli_utilities.get_test_ogrsf_path()
+ ' --config OGR_OGDI_LAUNDER_LAYER_NAMES YES -ro "'
+ url_name
+ '" markersp_bnd contourl_elev polbnda_bnd extractp_ind'
)
assert ret.find("INFO") != -1 and ret.find("ERROR") == -1
###############################################################################
# Test GetFeature()
def test_ogr_ogdi_3():
if ogrtest.ogdi_ds is None:
pytest.skip()
lyr0 = ogrtest.ogdi_ds.GetLayer(0)
lyr0.ResetReading()
feat00_ref = lyr0.GetNextFeature()
feat01_ref = lyr0.GetNextFeature()
feat02_ref = lyr0.GetNextFeature()
lyr1 = ogrtest.ogdi_ds.GetLayer(1)
lyr1.ResetReading()
feat10_ref = lyr1.GetNextFeature()
feat11_ref = lyr1.GetNextFeature()
feat02 = lyr0.GetFeature(2)
feat00 = lyr0.GetFeature(0)
feat01 = lyr0.GetFeature(1)
feat10 = lyr1.GetFeature(0)
feat11 = lyr1.GetFeature(1)
assert feat00.Equal(feat00_ref), "features not equal"
assert feat01.Equal(feat01_ref), "features not equal"
assert feat02.Equal(feat02_ref), "features not equal"
assert feat10.Equal(feat10_ref), "features not equal"
assert feat11.Equal(feat11_ref), "features not equal"
###############################################################################
# Extract of full dataset
def test_ogr_ogdi_4():
if ogrtest.ogdi_drv is None:
pytest.skip()
url_name = "gltp:/vrf/" + os.getcwd() + "/data/vm2alv2_texash/texash"
ds = ogr.Open(url_name)
assert ds is not None, "cannot open dataset"
assert ds.GetLayerCount() == 6, "did not get expected layer count"
layers = [("polbnda@bnd(*)_area", ogr.wkbPolygon, 6)]
for l in layers:
lyr = ds.GetLayerByName(l[0])
assert lyr.GetLayerDefn().GetGeomType() == l[1]
assert lyr.GetFeatureCount() == l[2]
lyr = ds.GetLayerByName("polbnda@bnd(*)_area")
feat = lyr.GetNextFeature()
if feat["id"] != 1 or feat["f_code"] != "FA001" or feat["acc"] != 1:
feat.DumpReadable()
pytest.fail("bad attributes")
wkt = "POLYGON ((-97.6672973632812 31.250171661377,-97.5832977294922 31.250171661377,-97.5780029296875 31.250171661377,-97.5780029296875 31.250171661377,-97.5780944824219 31.2494583129883,-97.5779724121094 31.2492084503174,-97.577751159668 31.24880027771,-97.5776443481445 31.2484683990479,-97.5775451660156 31.2482070922852,-97.5774078369141 31.2479457855225,-97.5772705078125 31.2477989196777,-97.5771331787109 31.2477321624756,-97.5768661499023 31.2476787567139,-97.5766830444336 31.2476959228516,-97.5763168334961 31.2477016448975,-97.576042175293 31.247673034668,-97.5757141113281 31.2475509643555,-97.5754852294922 31.2473278045654,-97.5752792358398 31.2470207214356,-97.5751190185547 31.2467250823975,-97.5750122070312 31.2465076446533,-97.5748443603516 31.2462825775147,-97.5746002197266 31.2460918426514,-97.5742874145508 31.2459144592285,-97.5739288330078 31.2458171844482,-97.5736083984375 31.2457542419434,-97.5731201171875 31.2456817626953,-97.5728302001953 31.245641708374,-97.5724792480469 31.2455806732178,-97.5721817016602 31.2454471588135,-97.5719223022461 31.2453022003174,-97.5717086791992 31.2450218200684,-97.5715408325195 31.2446899414062,-97.5713882446289 31.2445201873779,-97.5711669921875 31.2442722320557,-97.5710678100586 31.2440910339355,-97.5711975097656 31.2438926696777,-97.5713577270508 31.2437191009521,-97.5718154907227 31.2434253692627,-97.5724258422852 31.2431831359863,-97.5726470947266 31.2430419921875,-97.5728530883789 31.2427291870117,-97.5728759765625 31.2424869537354,-97.57275390625 31.2423858642578,-97.5727996826172 31.2423534393311,-97.5712738037109 31.2422771453857,-97.5710067749023 31.2422466278076,-97.5707092285156 31.2421951293945,-97.5702285766602 31.2420444488525,-97.5701599121094 31.242000579834,-97.5701599121094 31.242000579834,-97.5794296264648 31.2372093200684,-97.5909194946289 31.2314224243164,-97.6050415039062 31.2241363525391,-97.6213302612305 31.2157878875732,-97.6490707397461 31.201566696167,-97.6662445068359 31.1928386688232,-97.6803207397461 31.1855792999268,-97.6936721801758 31.1787204742432,-97.7042617797852 31.1732997894287,-97.7107391357422 31.1699485778809,-97.7178192138672 31.1663246154785,-97.7325134277344 31.1587982177734,-97.7502975463867 31.1499614715576,-97.7502975463867 31.1499614715576,-97.7502975463867 31.1671733856201,-97.7502975463867 31.1671733856201,-97.7502975463867 31.250171661377,-97.6672973632812 31.250171661377))"
ref_geom = ogr.CreateGeometryFromWkt(wkt)
assert (
ogrtest.check_feature_geometry(feat, ref_geom) == 0
), feat.GetGeometryRef().ExportToWkt()
ds = None
# Test opening one single layer
ds = ogr.Open(url_name + ":polbnda@bnd(*):area")
assert ds is not None, "cannot open dataset"
assert ds.GetLayerCount() == 1, "did not get expected layer count"
###############################################################################
# Run test_ogrsf
def test_ogr_ogdi_5():
if ogrtest.ogdi_drv is None:
pytest.skip()
import test_cli_utilities
if test_cli_utilities.get_test_ogrsf_path() is None:
pytest.skip()
url_name = "gltp:/vrf/" + os.getcwd() + "/data/vm2alv2_texash/texash"
ret = gdaltest.runexternal(
test_cli_utilities.get_test_ogrsf_path()
+ ' --config OGR_OGDI_LAUNDER_LAYER_NAMES YES -ro "'
+ url_name
+ '"'
)
assert ret.find("INFO") != -1 and ret.find("ERROR") == -1
###############################################################################
def test_ogr_ogdi_cleanup():
if ogrtest.ogdi_ds is None:
pytest.skip()
ogrtest.ogdi_ds = None