mapnik/tests/python_tests/geometry_io_test.py
2012-01-05 17:30:21 -08:00

100 lines
3.2 KiB
Python

#encoding: utf8
from nose.tools import *
import os
from utilities import execution_path
import mapnik
wkts = [
[1,"POINT(30 10)"],
[1,"POINT(30.0 10.0)"],
[1,"POINT(30.1 10.1)"],
[1,"LINESTRING(30 10,10 30,40 40)"],
[1,"POLYGON((30 10,10 20,20 40,40 40,30 10))"],
[1,"POLYGON((35 10,10 20,15 40,45 45,35 10),(20 30,35 35,30 20,20 30))"],
[4,"MULTIPOINT((10 40),(40 30),(20 20),(30 10))"],
[2,"MULTILINESTRING((10 10,20 20,10 40),(40 40,30 30,40 20,30 10))"],
[2,"MULTIPOLYGON(((30 20,10 40,45 40,30 20)),((15 5,40 10,10 20,5 10,15 5)))"],
[2,"MULTIPOLYGON(((40 40,20 45,45 30,40 40)),((20 35,45 20,30 5,10 10,10 30,20 35),(30 20,20 25,20 15,30 20)))"],
[3,"GEOMETRYCOLLECTION(POLYGON((1 1,2 1,2 2,1 2,1 1)),POINT(2 3),LINESTRING(2 3,3 4))"]
]
def compare_wkb_from_wkt(wkt,num):
# create a Path from geometry(s)
paths = mapnik.Path.from_wkt(wkt)
# add geometry(s) to feature from wkt
f = mapnik.Feature(1)
f.add_geometries_from_wkt(wkt)
# ensure both have same result
# compare number of geometry parts
eq_(len(paths),num)
eq_(len(f.geometries()),num)
# compare collection off all geometries
eq_(paths.to_wkb(mapnik.wkbByteOrder.XDR),f.geometries().to_wkb(mapnik.wkbByteOrder.XDR))
# compare all parts
for idx,path in enumerate(paths):
eq_(f.geometries()[idx].to_wkb(mapnik.wkbByteOrder.XDR),path.to_wkb(mapnik.wkbByteOrder.XDR))
# compare round trip
paths2 = mapnik.Path()
for path in paths:
paths2.add_wkb(path.to_wkb(mapnik.wkbByteOrder.XDR))
# ensure result
eq_(len(paths2),num)
eq_(paths2.to_wkb(mapnik.wkbByteOrder.XDR),paths.to_wkb(mapnik.wkbByteOrder.XDR))
for idx,path in enumerate(paths2):
eq_(f.geometries()[idx].to_wkb(mapnik.wkbByteOrder.XDR),path.to_wkb(mapnik.wkbByteOrder.XDR))
def compare_wkt_from_wkt(wkt,num):
# create a Path from geometry(s)
paths = mapnik.Path.from_wkt(wkt)
# add geometry(s) to feature from wkt
f = mapnik.Feature(1)
f.add_geometries_from_wkt(wkt)
# compare to original, which may not have significant digits
if '.0' not in wkt:
eq_(f.geometries().to_wkt().upper().replace('.0',''),wkt)
else:
eq_(f.geometries().to_wkt().upper(),wkt)
# ensure both have same result
eq_(len(paths),num)
eq_(len(f.geometries()),num)
eq_(paths.to_wkt(),f.geometries().to_wkt())
for idx,path in enumerate(paths):
eq_(f.geometries()[idx].to_wkt(),path.to_wkt())
# compare round trip
paths2 = mapnik.Path()
for path in paths:
paths2.add_wkt(path.to_wkt())
# ensure result
eq_(len(paths2),num)
eq_(paths2.to_wkt(),paths.to_wkt())
for idx,path in enumerate(paths2):
eq_(f.geometries()[idx].to_wkb(mapnik.wkbByteOrder.XDR),path.to_wkb(mapnik.wkbByteOrder.XDR))
def test_wkt_simple():
for wkt in wkts:
try:
compare_wkt_from_wkt(wkt[1],wkt[0])
except RuntimeError, e:
raise RuntimeError('%s %s' % (e, wkt))
def test_wkb_simple():
for wkt in wkts:
try:
compare_wkb_from_wkt(wkt[1],wkt[0])
except RuntimeError, e:
raise RuntimeError('%s %s' % (e, wkt))
if __name__ == "__main__":
[eval(run)() for run in dir() if 'test_' in run]