[mapserver-dev] RFC 126: Port to PROJ 6 API

Seth G sethg at geographika.co.uk
Wed Oct 2 03:44:05 PDT 2019

Hi Even,

Great news getting PROJ6 integrated. 

A couple of questions. 

- Should Appveyor be updated to also test on Windows? I believe the GISInternals SDK has a bin/proj6 folder already. 

- With regards to start up performance/CGI I presume there is no impact if all source data is in the same projection as the request e.g. all data in the database is EPSG:3857 and Web Mercator requests are made. It might be a case of making sure users are aware of the impact of having to reproject. 

I hope at some point to add a few benchmark tests to the Python MapScript test suite - your proj test is a nice example. There is a plugin https://pypi.org/project/pytest-benchmark/ that could be useful.  


twitter: @geographika

On Wed, Oct 2, 2019, at 12:09 PM, Even Rouault wrote:
> Hi Daniel,
> > 
> > The significant performance hit caught my attention for the CGI case
> > which is a more common use case than the RFC seems to suggest.
> I would strongly suggest using FastCGI then. By using pure CGI, you'll 
> definitely have to pay for the price of starting a new process, which is non 
> neglectable.
> On my machine, "time mapserv >/dev/null" is 177 ms in the best case... I'd say 
> that before trying to kill an extra 10ms, going after those 177ms should be 
> the priority.
> > Is there
> > really not much that can be done about that?  Is it really just the
> > projection setup that is slower or are the coordinate conversions also
> > slower? 
> From the reports of PROJ users (see https://github.com/OSGeo/PROJ/issues/1367 
> ), I think that projection setup is the main factor (and in my little bench, 
> there are very few points to transform, so a potential extra cost for each 
> coordinate conversion would't show up)
> > Could we serialize the projection context pool for any given
> > mapfile to some kind of cache file in /tmp/ for instance and start from
> > the cached version at loadMap() time?  Could we get some gains this way
> > by not having to recompute all the projection transformations all the time?
> I don't think that can be done on Mapserver side, at least not easily. For 
> example proj_create_crs_to_crs() can create an object that is a collection of 
> several potential coordinate transformations (depending on the area of use), 
> and proj_trans() will select the one that is appropriate. This is opaque to 
> the user.
> You could access to those different candidates by using the lower level API, 
> proj_create_operations(), and then you can access the PROJ pipeline string and 
> serialize it, but then you have to implement the logic to select the one that 
> is appropriate given your input coordinate.
> Your suggestion might work, but that's a non trivial effort and code 
> complication (handling the cache file could be tricky as well, to avoid 2 
> concurrent processes overwriting it at the same time, etc).
> Wondering if that might not be done by PROJ itself (but not so obvious, since 
> there is also a price to create a PROJ CRS object from a EPSG code, which 
> requires lookups in the database)
> I'd say that considering such optimizations would be for a phase 2, and the 
> ratio effort/benefit is quite uncertain.
> Even
> -- 
> Spatialys - Geospatial professional services
> http://www.spatialys.com
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/mapserver-dev

More information about the mapserver-dev mailing list