Description: Update to use libproj >=6 projection initialisation syntax Author: Artem Pavlenko Origin: https://github.com/mapnik/python-mapnik/commit/ca66af65204d68a5496a94d36d69bf61144daf3b Forwarded: not-needed --- a/mapnik/__init__.py +++ b/mapnik/__init__.py @@ -156,7 +156,7 @@ class _Coord(Coord, _injector()): Example: Project the geographic coordinates of the city center of Stuttgart into the local map projection (GK Zone 3/DHDN, EPSG 31467) - >>> p = Projection('+init=epsg:31467') + >>> p = Projection('epsg:31467') >>> Coord(9.1, 48.7).forward(p) Coord(3507360.12813,5395719.2749) """ @@ -176,7 +176,7 @@ class _Coord(Coord, _injector()): city center of Stuttgart in the local map projection (GK Zone 3/DHDN, EPSG 31467) into geographic coordinates: - >>> p = Projection('+init=epsg:31467') + >>> p = Projection('epsg:31467') >>> Coord(3507360.12813,5395719.2749).inverse(p) Coord(9.1, 48.7) """ --- a/src/mapnik_layer.cpp +++ b/src/mapnik_layer.cpp @@ -146,13 +146,13 @@ void export_layer() class_("Layer", "A Mapnik map layer.", init >( "Create a Layer with a named string and, optionally, an srs string.\n" "\n" - "The srs can be either a Proj.4 epsg code ('+init=epsg:') or\n" - "of a Proj.4 literal ('+proj=').\n" - "If no srs is specified it will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n" + "The srs can be either a Proj epsg code ('epsg:') or\n" + "of a Proj literal ('+proj=').\n" + "If no srs is specified it will default to 'epsg:4326'\n" "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr\n" "\n" )) @@ -166,7 +166,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.envelope()\n" "box2d(-1.0,-1.0,0.0,0.0) # default until a datasource is loaded\n" ) @@ -183,7 +183,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.visible(1.0/1000000)\n" "True\n" ">>> lyr.active = False\n" @@ -198,7 +198,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.active\n" "True # Active by default\n" ">>> lyr.active = False # set False to disable layer rendering\n" @@ -213,7 +213,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.status\n" "True # Active by default\n" ">>> lyr.status = False # set False to disable layer rendering\n" @@ -250,7 +250,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer, Datasource\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.datasource = Datasource(type='shape',file='world_borders')\n" ">>> lyr.datasource\n" "\n" @@ -285,7 +285,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.maximum_scale_denominator\n" "1.7976931348623157e+308 # default is the numerical maximum\n" ">>> lyr.maximum_scale_denominator = 1.0/1000000\n" @@ -300,7 +300,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.minimum_scale_denominator # default is 0\n" "0.0\n" ">>> lyr.minimum_scale_denominator = 1.0/1000000\n" @@ -315,7 +315,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import Layer\n" - ">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = Layer('My Layer','epsg:4326')\n" ">>> lyr.name\n" "'My Layer'\n" ">>> lyr.name = 'New Name'\n" @@ -330,7 +330,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import layer\n" - ">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = layer('My layer','epsg:4326')\n" ">>> lyr.queryable\n" "False # Not queryable by default\n" ">>> lyr.queryable = True\n" @@ -345,12 +345,12 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import layer\n" - ">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = layer('My layer','epsg:4326')\n" ">>> lyr.srs\n" - "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n" - ">>> # set to google mercator with Proj.4 literal\n" + "'epsg:4326' # The default srs if not initialized with custom srs\n" + ">>> # set to google mercator with Proj literal\n" "... \n" - ">>> lyr.srs = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over'\n" + ">>> lyr.srs = 'epsg:3857'\n" ) .add_property("group_by", @@ -367,7 +367,7 @@ void export_layer() "\n" "Usage:\n" ">>> from mapnik import layer\n" - ">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n" + ">>> lyr = layer('My layer','epsg:4326')\n" ">>> lyr.styles\n" "\n" ">>> len(lyr.styles)\n" --- a/src/mapnik_map.cpp +++ b/src/mapnik_map.cpp @@ -165,9 +165,9 @@ void export_map() class_("Map","The map object.",init >( ( arg("width"),arg("height"),arg("srs") ), "Create a Map with a width and height as integers and, optionally,\n" - "an srs string either with a Proj.4 epsg code ('+init=epsg:')\n" - "or with a Proj.4 literal ('+proj=').\n" - "If no srs is specified the map will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n" + "an srs string either with a Proj epsg code ('epsg:')\n" + "or with a Proj literal ('+proj=').\n" + "If no srs is specified the map will default to 'epsg:4326'\n" "\n" "Usage:\n" ">>> from mapnik import Map\n" @@ -175,7 +175,7 @@ void export_map() ">>> m\n" "\n" ">>> m.srs\n" - "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n" + "'epsg:4326'\n" )) .def("append_style",insert_style, @@ -502,22 +502,22 @@ void export_map() .add_property("srs", make_function(&Map::srs,return_value_policy()), &Map::set_srs, - "Spatial reference in Proj.4 format.\n" + "Spatial reference in Proj format.\n" "Either an epsg code or proj literal.\n" "For example, a proj literal:\n" - "\t'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n" + "\t'epsg:4326'\n" "and a proj epsg code:\n" - "\t'+init=epsg:4326'\n" + "\t'epsg:4326'\n" "\n" "Note: using epsg codes requires the installation of\n" - "the Proj.4 'epsg' data file normally found in '/usr/local/share/proj'\n" + "the Proj 'epsg' data file normally found in '/usr/local/share/proj'\n" "\n" "Usage:\n" ">>> m.srs\n" - "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n" + "'epsg:4326' # The default srs if not initialized with custom srs\n" ">>> # set to google mercator with Proj.4 literal\n" "... \n" - ">>> m.srs = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over'\n" + ">>> m.srs = 'epsg:3857'\n" ) .add_property("width", --- a/src/mapnik_projection.cpp +++ b/src/mapnik_projection.cpp @@ -95,8 +95,8 @@ void export_projection () using namespace boost::python; class_("Projection", "Represents a map projection.",init( - (arg("proj4_string")), - "Constructs a new projection from its PROJ.4 string representation.\n" + (arg("proj_string")), + "Constructs a new projection from its PROJ string representation.\n" "\n" "The constructor will throw a RuntimeError in case the projection\n" "cannot be initialized.\n" @@ -105,9 +105,9 @@ void export_projection () .def_pickle(projection_pickle_suite()) .def ("params", make_function(&projection::params, return_value_policy()), - "Returns the PROJ.4 string for this projection.\n") + "Returns the PROJ string for this projection.\n") .def ("expanded",&projection::expanded, - "normalize PROJ.4 definition by expanding +init= syntax\n") + "normalize PROJ definition by expanding epsg:XXXX syntax\n") .add_property ("geographic", &projection::is_geographic, "This property is True if the projection is a geographic projection\n" "(i.e. it uses lon/lat coordinates)\n") --- a/src/mapnik_python.cpp +++ b/src/mapnik_python.cpp @@ -598,9 +598,9 @@ std::string mapnik_version_string() return MAPNIK_VERSION_STRING; } -bool has_proj4() +bool has_proj() { -#if defined(MAPNIK_USE_PROJ4) +#if defined(MAPNIK_USE_PROJ) return true; #else return false; @@ -1035,8 +1035,8 @@ BOOST_PYTHON_MODULE(_mapnik) ">>> m = Map(256,256)\n" ">>> load_map(m,'mapfile_wgs84.xml')\n" ">>> m.srs\n" - "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n" - ">>> m.srs = '+init=espg:3395'\n" + "'epsg:4326'\n" + ">>> m.srs = 'espg:3395'\n" ">>> save_map(m,'mapfile_mercator.xml')\n" "\n" ); @@ -1045,7 +1045,7 @@ BOOST_PYTHON_MODULE(_mapnik) def("save_map_to_string", &save_map_to_string, save_map_to_string_overloads()); def("mapnik_version", &mapnik_version,"Get the Mapnik version number"); def("mapnik_version_string", &mapnik_version_string,"Get the Mapnik version string"); - def("has_proj4", &has_proj4, "Get proj4 status"); + def("has_proj", &has_proj, "Get proj status"); def("has_jpeg", &has_jpeg, "Get jpeg read/write support status"); def("has_png", &has_png, "Get png read/write support status"); def("has_tiff", &has_tiff, "Get tiff read/write support status"); --- a/test/python_tests/agg_rasterizer_integer_overflow_test.py +++ b/test/python_tests/agg_rasterizer_integer_overflow_test.py @@ -27,7 +27,7 @@ geojson = {"type": "Feature", def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_memory(): expected_color = mapnik.Color('white') - projection = '+init=epsg:4326' + projection = 'epsg:4326' ds = mapnik.MemoryDatasource() context = mapnik.Context() feat = mapnik.Feature.from_geojson(json.dumps(geojson), context) @@ -57,7 +57,7 @@ def test_that_coordinates_do_not_overflo def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_csv(): expected_color = mapnik.Color('white') - projection = '+init=epsg:4326' + projection = 'epsg:4326' ds = mapnik.MemoryDatasource() context = mapnik.Context() feat = mapnik.Feature.from_geojson(json.dumps(geojson), context) --- a/test/python_tests/datasource_test.py +++ b/test/python_tests/datasource_test.py @@ -30,7 +30,7 @@ def test_that_datasources_exist(): @raises(RuntimeError) def test_vrt_referring_to_missing_files(): - srs = '+init=epsg:32630' + srs = 'epsg:32630' if 'gdal' in mapnik.DatasourceCache.plugin_names(): lyr = mapnik.Layer('dataraster') lyr.datasource = mapnik.Gdal( --- a/test/python_tests/layer_modification_test.py +++ b/test/python_tests/layer_modification_test.py @@ -58,8 +58,8 @@ def test_adding_datasource_to_layer(): # also note that since the srs was black it defaulted to wgs84 eq_(m.layers[0].srs, - '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') - eq_(lyr.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') + 'epsg:4326') + eq_(lyr.srs, 'epsg:4326') # now add a datasource one... ds = mapnik.Shapefile(file='../data/shp/world_merc.shp') --- a/test/python_tests/layer_test.py +++ b/test/python_tests/layer_test.py @@ -14,7 +14,7 @@ from .utilities import run_all def test_layer_init(): l = mapnik.Layer('test') eq_(l.name, 'test') - eq_(l.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') + eq_(l.srs, 'epsg:4326') eq_(l.envelope(), mapnik.Box2d()) eq_(l.clear_label_cache, False) eq_(l.cache_features, False) --- a/test/python_tests/multi_tile_raster_test.py +++ b/test/python_tests/multi_tile_raster_test.py @@ -16,7 +16,7 @@ def setup(): def test_multi_tile_policy(): - srs = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' + srs = 'epsg:4326' lyr = mapnik.Layer('raster') if 'raster' in mapnik.DatasourceCache.plugin_names(): lyr.datasource = mapnik.Raster( --- a/test/python_tests/object_test.py +++ b/test/python_tests/object_test.py @@ -331,7 +331,7 @@ # eq_(m.width, 256) # eq_(m.height, 256) -# eq_(m.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') +# eq_(m.srs, 'epsg:4326') # eq_(m.base, '') # eq_(m.maximum_extent, None) # eq_(m.background_image, None) @@ -361,7 +361,7 @@ # # Map initialization from string # def test_map_init_from_string(): -# map_string = ''' +# map_string = ''' #