more geometry tests for ogr plugin

This commit is contained in:
Dane Springmeyer 2015-03-21 20:08:43 -07:00
parent 1994b1c25f
commit f0563fd8f3
2 changed files with 51 additions and 0 deletions

7
tests/data/csv/wkt.vrt Normal file
View file

@ -0,0 +1,7 @@
<OGRVRTDataSource>
<OGRVRTLayer name="wkt">
<SrcDataSource relativeToVRT="1">wkt.csv</SrcDataSource>
<LayerSRS>WGS84</LayerSRS>
<GeometryField encoding="WKT" field="WKT"/>
</OGRVRTLayer>
</OGRVRTDataSource>

View file

@ -5,6 +5,11 @@ from nose.tools import eq_,assert_almost_equal,raises
from utilities import execution_path, run_all
import os, mapnik
try:
import json
except ImportError:
import simplejson as json
def setup():
# All of the paths used are relative, if we run the tests
# from another directory we need to chdir()
@ -108,6 +113,45 @@ if 'ogr' in mapnik.DatasourceCache.plugin_names():
# fs = ds.all_features()
# eq_(len(fs),1)
def test_geometry_type():
ds = mapnik.Ogr(file='../data/csv/wkt.vrt',layer_by_index=0)
e = ds.envelope()
assert_almost_equal(e.minx, 1.0, places=1)
assert_almost_equal(e.miny, 1.0, places=1)
assert_almost_equal(e.maxx, 45.0, places=1)
assert_almost_equal(e.maxy, 45.0, places=1)
meta = ds.describe()
eq_(meta['geometry_type'],mapnik.DataGeometryType.Point)
eq_('+proj=longlat' in meta['proj4'],True)
fs = ds.featureset()
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'Point', u'coordinates': [30, 10]}, u'type': u'Feature', u'id': 2, u'properties': {u'type': u'point', u'WKT': u' POINT (30 10)'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'LineString', u'coordinates': [[30, 10], [10, 30], [40, 40]]}, u'type': u'Feature', u'id': 3, u'properties': {u'type': u'linestring', u'WKT': u' LINESTRING (30 10, 10 30, 40 40)'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'Polygon', u'coordinates': [[[30, 10], [10, 20], [20, 40], [40, 40], [30, 10]]]}, u'type': u'Feature', u'id': 4, u'properties': {u'type': u'polygon', u'WKT': u' POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'Polygon', u'coordinates': [[[35, 10], [10, 20], [15, 40], [45, 45], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]]]}, u'type': u'Feature', u'id': 5, u'properties': {u'type': u'polygon', u'WKT': u' POLYGON ((35 10, 10 20, 15 40, 45 45, 35 10),(20 30, 35 35, 30 20, 20 30))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'MultiPoint', u'coordinates': [[10, 40], [40, 30], [20, 20], [30, 10]]}, u'type': u'Feature', u'id': 6, u'properties': {u'type': u'multipoint', u'WKT': u' MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'MultiLineString', u'coordinates': [[[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]]]}, u'type': u'Feature', u'id': 7, u'properties': {u'type': u'multilinestring', u'WKT': u' MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'MultiPolygon', u'coordinates': [[[[30, 20], [10, 40], [45, 40], [30, 20]]], [[[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]]]}, u'type': u'Feature', u'id': 8, u'properties': {u'type': u'multipolygon', u'WKT': u' MULTIPOLYGON (((30 20, 10 40, 45 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'MultiPolygon', u'coordinates': [[[[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]]]]}, u'type': u'Feature', u'id': 9, u'properties': {u'type': u'multipolygon', u'WKT': u' 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)))'}})
feat = fs.next()
actual = json.loads(feat.to_geojson())
eq_(actual,{u'geometry': {u'type': u'GeometryCollection', u'geometries': [{u'type': u'Polygon', u'coordinates': [[[1, 1], [2, 1], [2, 2], [1, 2], [1, 1]]]}, {u'type': u'Point', u'coordinates': [2, 3]}, {u'type': u'LineString', u'coordinates': [[2, 3], [3, 4]]}]}, u'type': u'Feature', u'id': 10, u'properties': {u'type': u'collection', u'WKT': u' GEOMETRYCOLLECTION(POLYGON((1 1,2 1,2 2,1 2,1 1)),POINT(2 3),LINESTRING(2 3,3 4))'}})
if __name__ == "__main__":
setup()
exit(run_all(eval(x) for x in dir() if x.startswith("test_")))