Mapscript Re-Projection on-the-fly (solved)
Stefan Schwarzer
stefan.schwarzer at GRID.UNEP.CH
Thu Aug 24 01:36:45 PDT 2006
Jacob, Nicol,
Ahhhh.... bit irritating these different coding possibilities...
Ok, I met the original definition to all layers AND the map file:
PROJECTION
'init=epsg:4326'
END
and when using
$newproj="proj=robin,lon_0=0,x_0=0,y_0=0"; // projection string of
your new projection
$map->setProjection($newproj,MS_TRUE);
it indeed works!
Great, thanks a lot guys for that help!!!
Best regards,
Stef
On Aug 24, 2006, at 10:05 AM, Delfos, Jacob wrote:
> Hi Stefan,
>
> Yes, you do have to specify which projection each layer is in,
> otherwise when they are reprojected you will run into trouble (if
> it doesn't know where to reproject FROM, it won't be able to do i).
> It's not too hard, though.
>
> You should not have to recalculate the extent; it should be
> automatic. Definitely don't try to change the numbers (coordinates)
> without changing the projection (that would be bad).
>
> Try this:
>
> $newproj="proj=robin,lon_0=0,x_0=0,y_0=0"; // projection string of
> your new projection
> $map->setProjection($newproj,MS_TRUE);
>
> I think that ought to be all. The MS_TRUE makes it pick the best
> fit to the current extent in the new projection. Make sure your
> projection string is valid.
>
> regards,
>
> Jacob
>
>
>
> From: UMN MapServer Users List [mailto:MAPSERVER-
> USERS at LISTS.UMN.EDU] On Behalf Of Stefan Schwarzer
> Sent: 24 August 2006 15:35
> To: MAPSERVER-USERS at LISTS.UMN.EDU
> Subject: Re: [UMN_MAPSERVER-USERS] Mapscript Re-Projection on-the-fly
>
> Jacob & Nicol,
>
> thanks for your feedback.
>
> But I am still struggling. Just to clarify: I wonna reproject not
> individual layers, but my whole map.
>
> Jacob, does "For this, it is required that your layer has a
> projection object with the native projection of that layer." that
> mean that for each single layer I have to specify the original
> projection? (Geographic in my case)
>
> As Nicol stated I need to "recalculate" the extent, at least when
> using different units (going from DD to Meters).
>
> But then, I found that piece of code (slightly changed):
>
> $newproj=ms_newprojectionObj("proj=robin,lon_0=0,x_0=0,y_0=0");
> $latlon=ms_newprojectionObj
> ("proj=longlat,ellps=WGS84,datum=WGS84,no_defs");
> $oldext=ms_newRectObj();
> $oldext->setextent(-180,-90,180,90); //this is the extent of my
> map in geographic
> $oldext->project($latlon,$newproj); //reproject to Robinson
> $map->setextent($oldext->minx,$oldext->miny,$oldext->maxx,$oldext-
> >maxy); //set the new map extent
>
> And another one going like this:
>
> $projInObj = ms_newProjectionObj( "+proj=tmerc ".
> "+lat_0=49 ".
> "+lon_0=-2 ".
> "+k=0.999601 ".
> "+x_0=400000 ".
> "+y_0=-100000 ".
> "+ellps=airy ".
> "+towgs84=375,-111,431,0,0,0,0");
>
> with this info in the mapscript documentation...
> int setProjection(string proj_params, boolean bSetUnitsAndExtents)
> Set map projection and coordinate system. Parameters are
> given as
> a single string of comma-delimited PROJ.4 parameters.
> The argument : bSetUnitsAndExtents is used to automatically
> update
> the map units and extents based on the new projection.
> Possible
> values are MS_TRUE and MS_FALSE. By defualt it is set at
> MS_FALSE
>
> So, what should I use? And where is coming the
>
> $map -> setProjection
>
> into play?
>
> Thanks for any clarification.
>
> Stefan
>
>
>
> On Aug 24, 2006, at 7:59 AM, Delfos, Jacob wrote:
>
>> Stefan,
>>
>> Your question is not entirely clear. You can not re-project an
>> individual layer on-the-fly, because php_mapscript does not re-
>> write the dataset (hence its projection will always be the same);
>> you CAN however change the projection of the map (using
>> setProjection, as you did), which means all layers in the map get
>> re-projected (the dataset remains unchanged, though). For
>> this, it is required that your layer has a projection object with
>> the native projection of that layer. This will cause the layer to
>> be reprojected along with the map. Is this what you are trying to do?
>>
>> You *may* have to save your mapfile, or your session, in order for
>> it to take effect, depending on your setup.
>>
>> regards,
>>
>> Jacob
>>
>>
>> From: UMN MapServer Users List [mailto:MAPSERVER-
>> USERS at LISTS.UMN.EDU] On Behalf Of Stefan Schwarzer
>> Sent: 24 August 2006 13:45
>> To: MAPSERVER-USERS at LISTS.UMN.EDU
>> Subject: Re: [UMN_MAPSERVER-USERS] Mapscript Re-Projection on-the-fly
>>
>> Hey,
>>
>> I can't imagine that such a question stays unanswered in the
>> mapserver community...
>>
>> I meanwhile added a:
>>
>> $map -> setProjection("init=epsg:26711");
>>
>> to my code, but nothing happens - meaning: no error message but no
>> reprojection either.
>>
>> Can anyone help me out?
>>
>> Thanks in advance.
>>
>> Stefan
>>
>>
>> On Aug 22, 2006, at 10:47 AM, Stefan Schwarzer wrote:
>>
>>> Gush,
>>>
>>> I couldn't find any precise information about how to re-project
>>> layers on-the-fly via PHP Mapscript. Here and there (via
>>> MailingList and Google) bits and pieces, but altogether it didn't
>>> help me a lot. Though I would have said that this is a basic
>>> question. But perhaps too basic, so everbody finds out by himself?
>>>
>>> So, can anyone let me know - giving a coding example - how to re-
>>> project a mapfile on-the-fly from for example Lat/Long (global
>>> view) to Lambert or Robin?
>>>
>>> Thanks a lot for your help!
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20060824/ba702352/attachment.htm>
More information about the MapServer-users
mailing list