[mapserver-users] pj_transform & pj_datum_transform

Arthur, John John.Arthur at voicestream.com
Tue Jan 22 14:16:34 EST 2002


I have set the PROJ_LIB in Windows.  When I do a datum conversion with
nad2nad.exe, it works. ie: "nad2nad -i 27,utm=18 -o 83 -r conus"  But
php_mapscript, if I define "datum=NAD27", I get a "Fatal Error". And if I
define "datum=NAD83", everything is OK.  Any ideas?

-John

-----Original Message-----
From: Frank Warmerdam [mailto:warmerdam at pobox.com]
Sent: Tuesday, January 22, 2002 12:36 PM
To: Arthur, John
Cc: mapserver-users at lists.gis.umn.edu
Subject: Re: [mapserver-users] pj_transform & pj_datum_transform


On Tue, Jan 22, 2002 at 08:49:39AM -0800, Arthur, John wrote:
> Now that these 2 function are included into php_proj.dll, what is the
> correct way to use them?  I was able to transform UTM to LatLong, but the
> datums do not change from nad27 to nad83 when I use the following:
> 
> $lat = doubleval("336276.6563");
> $lon = doubleval("4145316.5");
> 
> 
> $parms[0] = "proj=utm";
> $parms[1] = "ellps=clrk66";
> $parms[2] = "zone=18";
> $parms[3] = "no_defs";
> $projUTM = pj_init($parms);
> 
> $parms[0] = "proj=latlong";
> $parms[1] = "ellps=GRS80";
> $parms[2] = "lat_0=36.0";
> $parms[3] = "lon_0=-79.5";
> $parms[4] = "lat_1=37.0";
> $parms[5] = "lat_2=39.5";
> $projGEO = pj_init($parms);
> 				
> 				   
> $ret = pj_datum_transform($projUTM, $projGEO, $lat, $lon, 0 );
> $ln = ($ret["u"]);
> $lt = ($ret["v"]);
> echo "<BR>".$ln."<BR>".$lt;
> 
> This returns:
> -76.8507223773
> 37.442055949314
> Which is NAD27, but should return:
> -76.850410
> 37.442204
> Which is NAD83
> 
> What am I doing wrong?  I have the PROJ_LIB path set.  I am on a WINDOWS
> 2000 server w/apache & PHP 4.

John,

I am a bit surprised that pj_datum_transform() access is provided. 
Generally you shouldn't need to use this directly but rather operate 
through pj_transform() which will also do datum shifting if needed.

The problem in your case is that you aren't specifying your datums.  Instead
of ellps=clrk66 use datum=NAD27 and instead of ellps=GRS80 use datum=NAD83.
For NAD27/NAD83 datum shifting to work you will need to ensure that the
grid shift files are available and can be found.  You will need to have 
the file "conus" in the directory referenced in the PROJ_LIB environment
variable.  

When building PROJ.4 by hand this generally means downloading the extra 
grid shift distribution, and untarring it over the proj distribution
then running the extra "nmake /f makefile.vc nadshift" command to 
translate the input conus.lla into a platform specific binary file. 

  ftp://ftp.remotesensing.org/pub/proj/proj-nad27-1.1.tar.gz

Good luck,

-- 
---------------------------------------+------------------------------------
--
I set the clouds in motion - turn up   | Frank Warmerdam,
warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush    | Geospatial Programmer for Rent



More information about the mapserver-users mailing list