parent
422f3bd8b0
commit
0be6c2d7e1
3 changed files with 40 additions and 4 deletions
|
@ -254,7 +254,7 @@ void ogr_datasource::init(mapnik::parameters const& params)
|
|||
OGRLayer* layer = layer_.layer();
|
||||
|
||||
// initialize envelope
|
||||
boost::optional<std::string> ext = params.get<std::string>("extent");
|
||||
boost::optional<std::string> ext = params.get<std::string>("extent");
|
||||
if (ext && !ext->empty())
|
||||
{
|
||||
extent_.from_string(*ext);
|
||||
|
@ -265,9 +265,16 @@ void ogr_datasource::init(mapnik::parameters const& params)
|
|||
OGRErr e = layer->GetExtent(&envelope);
|
||||
if (e == OGRERR_FAILURE)
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << "OGR Plugin: Extent missing for layer '" << layer->GetName() << "'. Use <extent> paramater to define a custom extent value.";
|
||||
throw datasource_exception(s.str());
|
||||
if (layer->GetFeatureCount() == 0)
|
||||
{
|
||||
MAPNIK_LOG_ERROR(ogr) << "could not determine extent, layer '" << layer->GetName() << "' appears to have no features";
|
||||
}
|
||||
else
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << "OGR Plugin: Cannot determine extent for layer '" << layer->GetName() << "'. Please provide a manual extent string (minx,miny,maxx,maxy).";
|
||||
throw datasource_exception(s.str());
|
||||
}
|
||||
}
|
||||
extent_.init(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
|
||||
}
|
||||
|
|
9
tests/data/gpx/empty.gpx
Normal file
9
tests/data/gpx/empty.gpx
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" standalone="yes"?>
|
||||
<gpx version="1.0">
|
||||
<name>Empty GPX</name>
|
||||
<desc></desc>
|
||||
<wpt lat="48" lon="-122">
|
||||
<ele>0</ele>
|
||||
<time>2001-11-28T21:06:52Z</time>
|
||||
</wpt>
|
||||
</gpx>
|
|
@ -63,6 +63,26 @@ if 'ogr' in mapnik.DatasourceCache.plugin_names():
|
|||
eq_(e.maxx,1)
|
||||
eq_(e.maxy,1)
|
||||
|
||||
def test_ogr_reading_gpx_waypoint():
|
||||
ds = mapnik.Ogr(file='../data/gpx/empty.gpx',layer='waypoints')
|
||||
e = ds.envelope()
|
||||
eq_(e.minx,-122)
|
||||
eq_(e.miny,48)
|
||||
eq_(e.maxx,-122)
|
||||
eq_(e.maxy,48)
|
||||
|
||||
def test_ogr_empty_data_should_not_throw():
|
||||
default_logging_severity = mapnik.logger.get_severity()
|
||||
mapnik.logger.set_severity(mapnik.severity_type.None)
|
||||
# use logger to silence expected warnings
|
||||
for layer in ['routes', 'tracks', 'route_points', 'track_points']:
|
||||
ds = mapnik.Ogr(file='../data/gpx/empty.gpx',layer=layer)
|
||||
e = ds.envelope()
|
||||
eq_(e.minx,0)
|
||||
eq_(e.miny,0)
|
||||
eq_(e.maxx,0)
|
||||
eq_(e.maxy,0)
|
||||
mapnik.logger.set_severity(default_logging_severity)
|
||||
|
||||
# disabled because OGR prints an annoying error: ERROR 1: Invalid Point object. Missing 'coordinates' member.
|
||||
#def test_handling_of_null_features():
|
||||
|
|
Loading…
Reference in a new issue