150 строки
10 KiB
Ruby
150 строки
10 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
require 'test/unit'
|
|
require 'geos'
|
|
|
|
|
|
class TestIo < Test::Unit::TestCase
|
|
|
|
def check(wkt, ndr_hex_in, xdr_hex_in)
|
|
wkt_reader = Geos::WktReader.new
|
|
geom1 = wkt_reader.read(wkt)
|
|
|
|
wkb_reader = Geos::WkbReader.new
|
|
geom2 = wkb_reader.read_hex(ndr_hex_in)
|
|
geom3 = wkb_reader.read_hex(xdr_hex_in)
|
|
|
|
assert(geom1.eql?(geom2))
|
|
assert(geom1.eql?(geom3))
|
|
assert(geom2.eql?(geom3))
|
|
|
|
wkb_writer = Geos::WkbWriter.new
|
|
wkb_writer.byte_order = Geos::GEOS_WKB_NDR
|
|
ndr_hex_out = wkb_writer.write_hex(geom1)
|
|
assert_equal(ndr_hex_in, ndr_hex_out)
|
|
|
|
wkb_writer.byte_order = Geos::GEOS_WKB_XDR
|
|
xdr_hex_out = wkb_writer.write_hex(geom1)
|
|
assert_equal(xdr_hex_in, xdr_hex_out)
|
|
geom1
|
|
end
|
|
|
|
def test_output_dimensions
|
|
writer = Geos::WkbWriter.new
|
|
assert_equal(2, writer.output_dimensions)
|
|
|
|
writer.output_dimensions = 3
|
|
assert_equal(3, writer.output_dimensions)
|
|
end
|
|
|
|
def test_byte_order
|
|
writer = Geos::WkbWriter.new
|
|
assert_equal(Geos::GEOS_WKB_NDR, writer.byte_order)
|
|
|
|
writer.byte_order = Geos::GEOS_WKB_XDR
|
|
assert_equal(Geos::GEOS_WKB_XDR, writer.byte_order)
|
|
|
|
writer.byte_order = Geos::GEOS_WKB_NDR
|
|
assert_equal(Geos::GEOS_WKB_NDR, writer.byte_order)
|
|
end
|
|
|
|
def test_point
|
|
wkt = "POINT(0 0)"
|
|
ndr = "010100000000000000000000000000000000000000"
|
|
xdr = "000000000100000000000000000000000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::Point, geom)
|
|
assert_equal('Point', geom.geom_type)
|
|
assert_equal(Geos::GEOS_POINT, geom.type_id)
|
|
end
|
|
|
|
def test_line_string
|
|
wkt = "LINESTRING(1 2, 3 4)"
|
|
ndr = "010200000002000000000000000000F03F000000000000004000000000000008400000000000001040"
|
|
xdr = "0000000002000000023FF0000000000000400000000000000040080000000000004010000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::LineString, geom)
|
|
assert_equal('LineString', geom.geom_type)
|
|
assert_equal(Geos::GEOS_LINESTRING, geom.type_id)
|
|
end
|
|
|
|
def test_polygon
|
|
wkt = "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2))"
|
|
ndr = "0103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040"
|
|
xdr = "0000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::Polygon, geom)
|
|
assert_equal('Polygon', geom.geom_type)
|
|
assert_equal(Geos::GEOS_POLYGON, geom.type_id)
|
|
end
|
|
|
|
def test_multipoint
|
|
wkt = "MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)"
|
|
ndr = "010400000005000000010100000000000000000000000000000000000000010100000000000000000024400000000000000000010100000000000000000024400000000000002440010100000000000000000000000000000000002440010100000000000000000000000000000000000000"
|
|
xdr = "000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::MultiPoint, geom)
|
|
assert_equal('MultiPoint', geom.geom_type)
|
|
assert_equal(Geos::GEOS_MULTIPOINT, geom.type_id)
|
|
end
|
|
|
|
def test_multipoint
|
|
wkt = "MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 10 20),(2 2, 2 6, 6 4, 20 2))"
|
|
ndr = "010500000002000000010200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000002440000000000000344001020000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000034400000000000000040"
|
|
xdr = "000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::MultiPoint, geom)
|
|
assert_equal('MultiLineString', geom.geom_type)
|
|
assert_equal(Geos::GEOS_MULTILINESTRING, geom.type_id)
|
|
end
|
|
|
|
def test_multipoint
|
|
wkt = "MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))"
|
|
ndr = "0106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40"
|
|
xdr = "000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000"
|
|
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::MultiPolygon, geom)
|
|
assert_equal('MultiPolygon', geom.geom_type)
|
|
assert_equal(Geos::GEOS_MULTIPOLYGON, geom.type_id)
|
|
end
|
|
|
|
def test_collection
|
|
wkt = "GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 2,3 4),POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),MULTIPOINT(0 0,10 0,10 10,0 10,0 0),MULTILINESTRING((0 0,10 0,10 10,0 10,10 20),(2 2,2 6,6 4,20 2)),MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),((60 60,60 50,70 40,60 60))))"
|
|
ndr = "010700000006000000010100000000000000000000000000000000000000010200000002000000000000000000F03F00000000000000400000000000000840000000000000104001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000004000000000000000400104000000050000000101000000000000000000000000000000000000000101000000000000000000244000000000000000000101000000000000000000244000000000000024400101000000000000000000000000000000000024400101000000000000000000000000000000000000000105000000020000000102000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000024400000000000003440010200000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000344000000000000000400106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40"
|
|
xdr = "0000000007000000060000000001000000000000000000000000000000000000000002000000023FF00000000000004000000000000000400800000000000040100000000000000000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000"
|
|
|
|
assert_raise(RuntimeError) do
|
|
geom = check(wkt, ndr, xdr)
|
|
assert_instance_of(Geos::MultiPolygon, geom)
|
|
assert_equal('Collection', geom.geom_type)
|
|
assert_equal(Geos::GEOS_COLLECTION, geom.type_id)
|
|
end
|
|
end
|
|
|
|
def test_wkt_invalid
|
|
assert_raise(RuntimeError) do
|
|
reader = Geos::WktReader.new
|
|
geom = reader.read("invalid")
|
|
end
|
|
end
|
|
|
|
def test_wkb_invalid
|
|
assert_raise(RuntimeError) do
|
|
reader = Geos::WkbReader.new
|
|
geom = reader.read("invalid")
|
|
end
|
|
end
|
|
|
|
def test_hex_invalid
|
|
assert_raise(RuntimeError) do
|
|
reader = Geos::WkbReader.new
|
|
geom = reader.read_hex("invalid")
|
|
end
|
|
end
|
|
end |