If you care why, mapserver's projection support passes the projection
string to the proj4 library, which requires a certain style of passing
parameters. You can pass in a full projection definition consisting
of <param>=<value> which is the case with proj=latlong OR you can
reference the projection parameters defined in a dictionary that proj4
knows about, in this case the 'epsg' dictionary.
This is a common source of frustration and misunderstanding. When
using mapserver as a WMS client, you define the projection that you
want to get the data in from the remote WMS server by specifying an
EPSG code in the form SRS=EPSG:XXXXX - and it is important in this
case that it be in UPPER case and not have 'init='. Inside
mapserver's MAP file, when defining a projection (or when using
mapscript), you use the proj4 definitions.
Note that the method of using init=<dictionary>:<value> is still
inefficient for mapserver because proj has to parse the rather large
epsg file to find the appropriate proj string. If you are just doing
some one-off translations then no big deal obviously, but if you are
setting up a service to reproject or are setting up a map file with
projections, then it can make quite a big difference.
There are two quick optimizations that you can make:
1) move the <value>s that you commonly use in the epsg file to the top
of the file - proj will stop as soon as it finds the definition
2) copy the proj parameters from the epsg file into the projection
object of your mapfile (or as a string in your php code in this case).
Cheers
Paul
On 28-Jun-08, at 4:26 PM, Ray Collett wrote:
Thanks for the reply Nicol. That looks simple enough. My initial
test gave me this error message:
Fatal error: [MapServer Error]: msProcessProjection(): projection
not named in /var/www/home/newlands/www_nc3d_com/temp/kml2mxs.php on
line 4
I did some googling and found some suggested modifications that
fixed it:
<?PHP
dl('php_mapscript.so');
$projInObj = ms_newprojectionobj('proj=latlong');
$projOutObj = ms_newprojectionobj('init=epsg:2269');
$poPoint = ms_newpointobj();
$poPoint->setXY(-122.667591, 45.522973);
$poPoint->project($projInObj, $projOutObj);
print_r($poPoint);
?>
It looks like the projectionstring "EPSG:####" does not work (at
least it does not work with the version in the latest Ubuntu package
php5-mapscript_4.10.3-1_amd64.deb). I had to make the "epsg" lower
case and prepend an "init=". But I now have a functioning
projection routine and I'm now off to write an XML routine to
process KML files. What fun!
Thanks!
-Ray
On Sat, Jun 28, 2008 at 2:40 AM, Nicol Hermann
<[EMAIL PROTECTED]> wrote:
Ray,
dl('../bin/php_mapscript.so');
$projInObj = ms_newprojectionobj('EPSG:4326');
$projOutObj = ms_newprojectionobj('EPSG:31466');
$poPoint = ms_newpointobj();
$poPoint->setXY(8.43, 50.4);
$poPoint->project($projInObj, $projOutObj);
print_r($poPoint);
HTH
Nicol
Am Donnerstag, den 26.06.2008, 08:03 -0700 schrieb Ray Collett:
> Hello all,
> I need to project UTM coordinates into stateplane, but I have no
> need for drawing graphical maps. My output is to be a script that
> will be imported into another application. I have found the
> Geo::Proj4 for PERL, and I have a functioning skeleton program
that is
> properly translating coordinates, but I'm not that familar with PERL
> and I'm spending 10x the time trying to do what I want as opposed to
> PHP which I know very well. I'm looking for the same
functionality in
> PHP, but having a hard time finding it. I just discovered
> PHP/MapScript, and I hope that it can do what I need, but so far I
> have not found any samples that I can learn from. I have PHP/
MapScript
> installed and working, It's drawing maps and processing shp files.
>
> Here's a sample of the PERL code that I am using:
>
> ====================================
> #!/usr/bin/perl
> use Geo::Proj4;
> my $proj = Geo::Proj4->new(init => "epsg:2269") or die;
> my($lon, $lat) = (-122.667591, 45.522973);
> my @newLatLon = $proj->forward($lat, $lon);
> print "x:", $newLatLon[0]," y:", $newLatLon[1],"\n";
> ====================================
>
> When run, it returns: x:7646617.87276814 y:684215.14079164
>
> Is there a way to do this in PHP? Is MapScript the way to go, or is
> there another project that I have not yet found that could do it for
> me? Any assistance is much appreciated!
>
> -Ray
> _______________________________________________
> mapserver-users mailing list
> [email protected]
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
--
=======================================
--==-- Ray Collett --==--
Technical Director; Newlands & Co. Inc.
503.287.8000 x520 [EMAIL PROTECTED]
www.nc3d.com www.norwesters.org
=======================================
_______________________________________________
mapserver-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapserver-users
__________________________________________
Paul Spencer
Chief Technology Officer
DM Solutions Group Inc
http://www.dmsolutions.ca/
_______________________________________________
mapserver-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapserver-users