I would have a try by creating a fake EPSG code into the lookup table "epsg" that is located under the proj directory. On Linux it may be found as share/proj/epsg, in MS4W installation on Windows as ms4w\proj\nad\epsg.
The epsg file has records like
# WGS 84
<4326> +proj=longlat +datum=WGS84 +no_defs <>
Add your own code as
# Goode's homologine
<200200> +proj=igh +lat_0=0 +lon_0=0 +datum=WGS84 +units=m +no_defs" <>
Now it may be possible to refer to this tailored CRS as EPSG:200200 both in your mapfile and by your WMS clients. However, too clever clients like QGIS may fail because they can't initialize their map into EPSG:200200 because they do not know what it is.
You can even create your own namespace by creating a file of that name (for example gisse) in the same location as the epsg file on your system, and reference that instead, so your map file can have:
"OWS_SRS" "EPSG:4326 EPSG:21095 EPSG:21035 EPSG:21036 EPSG:32635 EPSG:32735 EPSG:32736 EPSG:3857 EPSG:4210 EPSG:4258 ESRI:102022 CRS:84 GISSE:1"
and the GetCapabilities response can be:
...
<CRS>EPSG:3857</CRS>
<CRS>EPSG:4210</CRS>
<CRS>EPSG:4258</CRS>
<CRS>ESRI:102022</CRS>
<CRS>CRS:84</CRS>
<CRS>GISSE:1</CRS>
<EX_GeographicBoundingBox>
<westBoundLongitude>29</westBoundLongitude>
<eastBoundLongitude>37</eastBoundLongitude>
<southBoundLatitude>-2</southBoundLatitude>
<northBoundLatitude>4.5</northBoundLatitude>
</EX_GeographicBoundingBox>
<BoundingBox CRS="EPSG:4326"
minx="-2" miny="29" maxx="4.5" maxy="37" />
<BoundingBox CRS="EPSG:21095"
minx="721844" miny="-224185" maxx="1.61841e+06" maxy="505393" />
<BoundingBox CRS="EPSG:21035"
minx="721844" miny="9.77582e+06" maxx="1.61841e+06" maxy="1.05054e+07" />
<BoundingBox CRS="EPSG:21036"
minx="54455.4" miny="9.7787e+06" maxx="945380" maxy="1.04989e+07" />
<BoundingBox CRS="EPSG:32635"
minx="721913" miny="-224492" maxx="1.61848e+06" maxy="505089" />
<BoundingBox CRS="EPSG:32735"
minx="721913" miny="9.77551e+06" maxx="1.61848e+06" maxy="1.05051e+07" />
<BoundingBox CRS="EPSG:32736"
minx="54535.7" miny="9.7784e+06" maxx="945464" maxy="1.04986e+07" />
<BoundingBox CRS="EPSG:3857"
minx="3.22827e+06" miny="-222684" maxx="4.11882e+06" maxy="501454" />
<BoundingBox CRS="EPSG:4210"
minx="-1.99745" miny="28.9993" maxx="4.50312" maxy="36.9992" />
<BoundingBox CRS="EPSG:4258"
minx="-2" miny="29" maxx="4.5" maxy="37" />
<BoundingBox CRS="ESRI:102022"
minx="29" miny="-2" maxx="37" maxy="4.5" />
<BoundingBox CRS="CRS:84"
minx="29" miny="-2" maxx="37" maxy="4.5" />
<BoundingBox CRS="GISSE:1"
minx="29" miny="-2" maxx="37" maxy="4.5" />
...
Proj 6 and later
With Proj 6 and later the CRS database is a Spatialite file. It is still possible to create a custom CRS digestible by MapServer, with a bit of SQL adding a new record to the projected_crs
table. The example below copies an existing record with the ESRI
authority to a custom with EPSG
.
INSERT INTO projected_crs (
auth_name , code ,
geodetic_crs_auth_name ,
geodetic_crs_code ,
text_definition , deprecated )
SELECT " EPSG " , 54052 ,
geodetic_crs_auth_name ,
geodetic_crs_code ,
text_definition , deprecated
FROM projected_crs WHERE code = 54052;
epsg:
codes, so just wondering what happens if you create a custom code in the mapserver bin/proj/share/... location, possibly other.extra, then reference it as other.extra:your_proj_code.EPSG
as the SRS namespace. Trying an alternative likeOTHER.EXTRA
results in an error saying onlyEPSG
is supported and the map file becomes unusable.epsg:
you can have orcrs:
esri:
for example, that works for me. In fact I was able to create a new filegisse
create a SRS <1> and have that appear as GISSE:1 in my GetCapabilities response. I deliberately didn't go for editing the epsg file because it isn't an epsg codeuser:
namespace) then set up a user CRS namespace on MapServer, and got QGIS to request the CRS in a valid GetMap request; then I got the errormsWMSLoadGetMapParams(): WMS server error. Unsupported CRS namespace (only EPSG, AUTO2, CRS currently supported).
So now we're stuck by the behaviour of both QGIS and MapServer