148 строки
5.7 KiB
Python
Исполняемый файл
148 строки
5.7 KiB
Python
Исполняемый файл
#!/usr/bin/env pytest
|
|
###############################################################################
|
|
# $Id$
|
|
#
|
|
# Project: GDAL/OGR Test Suite
|
|
# Purpose: Test support for the various "EMPTY" WKT geometry representations.
|
|
# Author: Frank Warmerdam <warmerdam@pobox.com>
|
|
#
|
|
###############################################################################
|
|
# Copyright (c) 2004, Frank Warmerdam <warmerdam@pobox.com>
|
|
# Copyright (c) 2008, Even Rouault <even dot rouault at spatialys.com>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Library General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Library General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Library General Public
|
|
# License along with this library; if not, write to the
|
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
# Boston, MA 02111-1307, USA.
|
|
###############################################################################
|
|
|
|
|
|
import pytest
|
|
|
|
from osgeo import ogr
|
|
|
|
wkt_list = [
|
|
("GEOMETRYCOLLECTION(EMPTY)", "GEOMETRYCOLLECTION EMPTY"),
|
|
("MULTIPOLYGON( EMPTY )", "MULTIPOLYGON EMPTY"),
|
|
("MULTILINESTRING(EMPTY)", "MULTILINESTRING EMPTY"),
|
|
("MULTIPOINT(EMPTY)", "MULTIPOINT EMPTY"),
|
|
("POINT ( EMPTY )", "POINT EMPTY"),
|
|
("LINESTRING(EMPTY)", "LINESTRING EMPTY"),
|
|
("POLYGON ( EMPTY )", "POLYGON EMPTY"),
|
|
("GEOMETRYCOLLECTION EMPTY", "GEOMETRYCOLLECTION EMPTY"),
|
|
("MULTIPOLYGON EMPTY", "MULTIPOLYGON EMPTY"),
|
|
("MULTILINESTRING EMPTY", "MULTILINESTRING EMPTY"),
|
|
("MULTIPOINT EMPTY", "MULTIPOINT EMPTY"),
|
|
("POINT EMPTY", "POINT EMPTY"),
|
|
("LINESTRING EMPTY", "LINESTRING EMPTY"),
|
|
("POLYGON EMPTY", "POLYGON EMPTY"),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("test_input,expected", wkt_list, ids=[r[0] for r in wkt_list])
|
|
def test_empty_wkt(test_input, expected):
|
|
geom = ogr.CreateGeometryFromWkt(test_input)
|
|
wkt = geom.ExportToWkt()
|
|
|
|
if expected != "POINT EMPTY":
|
|
assert ogr.CreateGeometryFromWkb(geom.ExportToWkb()).ExportToWkt() == wkt
|
|
|
|
assert wkt == expected
|
|
|
|
try:
|
|
ogr.Geometry.IsEmpty
|
|
except AttributeError:
|
|
pytest.skip()
|
|
|
|
try:
|
|
assert geom.IsEmpty(), "IsEmpty returning false for an empty geometry"
|
|
finally:
|
|
geom.Destroy()
|
|
|
|
|
|
def test_ogr_wktempty_test_partial_empty_geoms():
|
|
|
|
# Multipoint with a valid point and an empty point
|
|
wkt = "MULTIPOINT (1 1)"
|
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbPoint))
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Multipoint with an empty point and a valid point
|
|
geom = ogr.CreateGeometryFromWkt("MULTIPOINT EMPTY")
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbPoint))
|
|
geom.AddGeometry(ogr.CreateGeometryFromWkt("POINT (1 1)"))
|
|
wkt = "MULTIPOINT (1 1)"
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Multilinestring with a valid string and an empty linestring
|
|
wkt = "MULTILINESTRING ((0 1,2 3,4 5,0 1))"
|
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbLineString))
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Multilinestring with an empty linestring and a valid linestring
|
|
geom = ogr.CreateGeometryFromWkt("MULTILINESTRING EMPTY")
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbLineString))
|
|
geom.AddGeometry(ogr.CreateGeometryFromWkt("LINESTRING (0 1,2 3,4 5,0 1)"))
|
|
wkt = "MULTILINESTRING ((0 1,2 3,4 5,0 1))"
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Polygon with a valid external ring and an empty internal ring
|
|
wkt = "POLYGON ((100 0,100 10,110 10,100 0))"
|
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbLinearRing))
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Polygon with an empty external ring and a valid internal ring
|
|
wkt = "POLYGON EMPTY"
|
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbLinearRing))
|
|
ring = ogr.Geometry(type=ogr.wkbLinearRing)
|
|
ring.AddPoint_2D(0, 0)
|
|
ring.AddPoint_2D(10, 0)
|
|
ring.AddPoint_2D(10, 10)
|
|
ring.AddPoint_2D(0, 10)
|
|
ring.AddPoint_2D(0, 0)
|
|
geom.AddGeometry(ring)
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Multipolygon with a valid polygon and an empty polygon
|
|
wkt = "MULTIPOLYGON (((0 0,0 10,10 10,0 0)))"
|
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbPolygon))
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|
|
|
|
# Multipolygon with an empty polygon and a valid polygon
|
|
geom = ogr.CreateGeometryFromWkt("MULTIPOLYGON EMPTY")
|
|
geom.AddGeometry(ogr.Geometry(type=ogr.wkbPolygon))
|
|
geom.AddGeometry(ogr.CreateGeometryFromWkt("POLYGON ((100 0,100 10,110 10,100 0))"))
|
|
wkt = "MULTIPOLYGON (((100 0,100 10,110 10,100 0)))"
|
|
assert geom.ExportToWkt() == wkt, (
|
|
"WKT is wrong: " + geom.ExportToWkt() + ". Expected value is: " + wkt
|
|
)
|