gdal/autotest/ogr/ogr_ntf.py

185 строки
7.5 KiB
Python
Исполняемый файл

#!/usr/bin/env pytest
###############################################################################
# $Id$
#
# Project: GDAL/OGR Test Suite
# Purpose: Test read functionality for OGR NTF driver.
# Author: Even Rouault <even dot rouault at spatialys.com>
#
###############################################################################
# Copyright (c) 2009-2010, 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.
###############################################################################
# The following tests will download sample data from
# http://www.ordnancesurvey.co.uk/oswebsite/products/meridian2/sampledata/meridian2ntf.exe
# and http://www.ordnancesurvey.co.uk/oswebsite/products/strategi/sampledata/stratntf.exe
#
# That data is subject to the terms of the 'Discover' Data License, that can be found here :
# http://www.ordnancesurvey.co.uk/oswebsite/products/sampledata/discoverdatalicense.html
#
# Verbatim copy of it :
###############################################################################
# 'Discover' Data License
#
# Thank you for your interest in this Sample Data. The terms and conditions below set out a legal agreement
# between you and Ordnance Survey for your use of the Sample Data. Please read these terms carefully. If you do
# not agree to these terms and conditions, you should not use, download or access the Sample Data.
#
# 1 The Sample Data belongs to the Crown (or its suppliers).
#
# 2 Ordnance Survey grants you a limited, personal, non-exclusive, non-transferable, free-of-charge and fully terminable
# licence to use the Sample Data for the purpose of internal testing and evaluation only. By way of example, this means
# that you are not permitted to (i) sub-license, transfer, share or otherwise #distribute the Sample Data to any other
# person; (ii) incorporate the Sample Data into your products or services (unless solely for the purposes of internal
# testing and evaluation); or (iii) commercially exploit the Sample Data.
#
# 3 The Sample Data is provided "as is" and without any warranty as to quality, fitness for purpose, accuracy, availability
# or otherwise. You acknowledge that it is your responsibility to ensure that the Sample Data is suitable for your intended
# purposes.
#
# 4 To the fullest extent permitted by law, Ordnance Survey excludes all liability for any loss or damage of whatever nature
# arising from any use of the Sample Data.
#
# 5 You agree that Ordnance Survey (and its suppliers) shall retain all rights, title and interest in the Sample Data, including
# but not limited to any and all copyrights, patents, trade marks, trade secrets and all other intellectual property rights.
#
# 6 You agree not to tamper with or remove any copyright, trade mark, trade mark symbol or other proprietary notice of
# Ordnance Survey (or its suppliers) contained in the Sample Data.
#
# 7 Ordnance Survey may terminate this agreement immediately if you breach any of the terms and conditions.
# Ordnance Survey also reserves the right to terminate the agreement at any time on giving you thirty (30) days written
# notice (which may be given by email or by posting a notification on Ordnance Survey's website).
#
# 8 These terms and conditions are governed by English law, and you agree to the exclusive jurisdiction of the English courts.
# (C) Crown copyright and/or database right 2009 Ordnance Survey
#
# v1.0 May 2009
###############################################################################
import os
import gdaltest
import pytest
from osgeo import ogr
pytestmark = pytest.mark.require_driver("NTF")
###############################################################################
def test_ogr_ntf_1():
gdaltest.download_or_skip(
"http://www.ordnancesurvey.co.uk/oswebsite/products/strategi/sampledata/stratntf.exe",
"stratntf.exe",
)
try:
os.stat("tmp/cache/SS.ntf")
except OSError:
try:
gdaltest.unzip("tmp/cache", "tmp/cache/stratntf.exe")
try:
os.stat("tmp/cache/SS.ntf")
except OSError:
pytest.skip()
except OSError:
pytest.skip()
ds = ogr.Open("tmp/cache/SS.ntf")
assert ds.GetLayerCount() == 5
layers = [
("STRATEGI_POINT", ogr.wkbPoint, 9193),
("STRATEGI_LINE", ogr.wkbLineString, 8369),
("STRATEGI_TEXT", ogr.wkbPoint, 1335),
("STRATEGI_NODE", ogr.wkbNone, 10991),
("FEATURE_CLASSES", ogr.wkbNone, 224),
]
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:
assert lyr.GetSpatialRef().ExportToWkt().find("OSGB 1936") != -1
lyr = ds.GetLayerByName("STRATEGI_POINT")
feat = lyr.GetNextFeature()
assert feat.GetGeometryRef().ExportToWkt() == "POINT (222904 127850)"
ds.Destroy()
###############################################################################
def test_ogr_ntf_2():
gdaltest.download_or_skip(
"http://www.ordnancesurvey.co.uk/oswebsite/products/meridian2/sampledata/meridian2ntf.exe",
"meridian2ntf.exe",
)
try:
os.stat("tmp/cache/Port_Talbot_NTF/SS78.ntf")
except OSError:
try:
gdaltest.unzip("tmp/cache", "tmp/cache/meridian2ntf.exe")
try:
os.stat("tmp/cache/Port_Talbot_NTF/SS78.ntf")
except OSError:
pytest.skip()
except OSError:
pytest.skip()
ds = ogr.Open("tmp/cache/Port_Talbot_NTF/SS78.ntf")
assert ds.GetLayerCount() == 5
layers = [
("MERIDIAN2_POINT", ogr.wkbPoint, 408),
("MERIDIAN2_LINE", ogr.wkbLineString, 513),
("MERIDIAN2_TEXT", ogr.wkbPoint, 7),
("MERIDIAN2_NODE", ogr.wkbNone, 397),
("FEATURE_CLASSES", ogr.wkbNone, 50),
]
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:
assert lyr.GetSpatialRef().ExportToWkt().find("OSGB 1936") != -1
lyr = ds.GetLayerByName("MERIDIAN2_POINT")
feat = lyr.GetNextFeature()
assert feat.GetGeometryRef().ExportToWkt() == "POINT (275324 189274)"
lyr = ds.GetLayerByName("MERIDIAN2_LINE")
feat = lyr.GetNextFeature()
assert (
feat.GetGeometryRef().ExportToWkt()
== "LINESTRING (275324 189274,275233 189114,275153 189048)"
)
ds.Destroy()