Re: [mapserver-users] Problems with MapScript and setProjection

2009-02-10 Thread Tim Wood

Pietro, that was exactly what I needed. Thanks.

The example below pulls everything together and works under MapServer 
5.2.1 (tested under Fedora 10). If someone hits this in the mailing list 
archive later and is trying to figure out reprojection, start at the end 
with the comment "reproject (if needed) and draw".


If someone who already has a wiki login, wants to add it to the page 
that Tom Kralidis set up, feel free.


Tim Wood


$base_map = "$base_path/data/empty.map";   // just the words MAP and END 
on dif. lines... really


// The data I'm using
$shape_path= "$base_path/data/zcta/zt08_d00_shp/";// a goofy 
path I'm too lazy to fix
$shape_file = "gfsa000b06a_e";// works with 
or w/o the extension

$shape_file_projection = "+proj=longlat +datum=NAD83";

// The Extents (area) I want in latitude, longitude
list( $ex0, $ex1, $ex2, $ex3 ) = array(-140, 40, -50, 55 );

// Describe the rest of my output
$output_projection = '';
$output_projection = "+proj=tcc +lon_0=90w +ellps=GRS80";
$output_file_rel = "output/index2.png";
$output_file_path = "$base_path/$output_file_rel";
list($output_width, $output_height ) = array( 600, 500 );

// Load MapScript extension
if (!extension_loaded("MapScript"))  dl('php_mapscript.'.PHP_SHLIB_SUFFIX);




// ---
// Function(s)
//

/**
* Reproject a $map from $shape_file_projection to $output_projection
*/
function reproject_map( &$map, $shape_file_projection, 
$output_projection ) {

   $origProjObj = ms_newProjectionObj( $shape_file_projection );
   $newProjObj = ms_newProjectionObj( $output_projection );

   $oRect = $map->extent;
   $oRect->project( $origProjObj, $newProjObj );
   $map->setExtent( $oRect->minx, $oRect->miny, $oRect->maxx, 
$oRect->maxy );

   $map->setProjection( $output_projection  );
}



// ---
// The Main Code
//

// add map
$map = ms_newMapObj( $base_map );
$map->set( 'name', 'my_map' );// If we're using a blank map file, 
give it a name


// Set the extent
$map->setExtent( $ex0, $ex1, $ex2, $ex3 );

// Set the shapepath
$map->set( 'shapepath', $shape_path );
// Set the output format and size
$map->selectOutputFormat( 'png' );
$map->setSize( $output_width, $output_height );

// add new layer to map
$layer = ms_newLayerObj($map);
$layer->set("name", "foo");
$layer->set("status", MS_ON);
$layer->set("data", $shape_file );
$layer->set("type", MS_SHAPE_POLYGON );
$layer->setProjection( $shape_file_projection );
$layer->set("template", "ttt");// hide errors that appear iff 
$output_projection is set?

$layer->set("dump", "true");

// add new class to new layer
$class = ms_newClassObj($layer);
$class->set("name", "foo");

// add new style to new class
$style = ms_newStyleObj($class);
$style->color->setRGB(255, 0, 0);
$style->outlinecolor->setRGB( 128,128,128 );

// reproject (if needed) and draw
if( $output_projection != '' ) {
   reproject_map( $map, $shape_file_projection, $output_projection );
   $image = $map->drawQuery();
} else {
   // draw
   $image = $map->draw();
}



// ---
// Output the image
//

$image->saveImage( $output_file_path );

?>


   


___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


Re: [mapserver-users] Problems with MapScript and setProjection

2009-02-10 Thread Pietro Giannini
Tim,
maybe you set a map extent wich don't coincides with the extent of the
dataset.

If you change the projection of the map you should change the extent
according with the new projection.

Try reproject the extent of the map:

$oMapProjection = ms_newProjectionObj($map->getProjection());
$oNewProjection = ms_newProjectionObj("+proj=tcc +lon_0=90w +ellps=GRS80");
$oRect = $map->extent;
$oRect->project($oMapProjection,$oNewProjection);
$map->setExtent($oRect->minx,$oRect->miny,$oRect->maxx,$oRect->maxy);
$map->setProjection("+proj=tcc +lon_0=90w +ellps=GRS80");

let me know, ciao
...pg

STOP !! ERRATA CORRIGE:
Now I read the new php MapScript documentation and found a new
implementation of the setprojection() function:

   int setProjection(string proj_params, boolean bSetUnitsAndExtents)

bSetUnitsAndExtents (default false), if true force the map to update
Extents and Units based on the new projection (I suppose it works with the
last release, 5.2.1)

bye ...pg

-- 
Pietro Giannini
Bytewise srl - Area GIS
41°50'38.58"N 12°29'13.39"E


On Lun, Febbraio 9, 2009 19:19, Tim Wood wrote:
> Tom, that PPT linked from your example is filled with good stuff.
> Anyway, I took your example and did some minor changes to make it work
> with mapscript as Fedora installs it and my data. Then I added the
> ability to turn projection on & off. With the projection off, everything
> works great. But, I'm still getting a blank image with the projection
> turned on. If anyone has any pointers on what's wrong with the code
> (below) I'd appreciate it.
>
> Tim Wood
>
> -
> 
> // Where my key directories are located
> $doc_root = '/var/www/html';
> $rel_path = "example1/round2";
> $base_path = "$doc_root/$rel_path";
>
> // An empty map file
> $base_map = "$base_path/data/empty.map";
>
> // The data I'm using (Statistics Canada's 2006 FSA files)
> $shape_path = "$base_path/data/zcta/zt08_d00_shp/"; // goofy path
> I'm too lazy to fix
> $shape_file = "gfsa000b06a_e";  // works with or
> w/o the extension
> $shape_file_projection = "+proj=longlat +datum=NAD83";
>
> // The Extents (area) I want in latitude, longitude (Canada)
> list( $ex0, $ex1, $ex2, $ex3 ) = array(-140, 40, -50, 55 );
>
> // Describe the rest of my output
> $output_projection = '';
> $output_projection = "+proj=tcc +lon_0=90w +ellps=GRS80";
> $output_file_rel = "output/index2.png";
> $output_file_path = "$base_path/$output_file_rel";
> list($output_width, $output_height ) = array( 600, 500 );
>
>
>
> // Load MapScript extension
> if (!extension_loaded("MapScript"))
> dl('php_mapscript.'.PHP_SHLIB_SUFFIX);
>
> // add map
> $map = ms_newMapObj( $base_map );
>
> // tdw temp
> $map->setExtent( $ex0, $ex1, $ex2, $ex3 );
>
> // Set the shapepath
> $map->set( 'shapepath', $shape_path );
> // Set the output format and size
> $map->selectOutputFormat( 'png' );
> $map->setSize( $output_width, $output_height );
>
> // add new layer to map
> $layer = ms_newLayerObj($map);
> $layer->set("name", "foo");
> $layer->set("status", MS_ON);
> $layer->set("data", $shape_file );
> $layer->set("type", MS_SHAPE_POLYGON );
> $layer->setProjection( $shape_file_projection );
>
> // This line hides a bunch of errors that appear iff $output_projection
> is set
> $layer->set("template", "ttt");
> $layer->set("dump", "true");
>
> // add new class to new layer
> $class = ms_newClassObj($layer);
> $class->set("name", "foo");
>
> // add new style to new class
> $style = ms_newStyleObj($class);
> $style->color->setRGB(255, 0, 0);
> $style->outlinecolor->setRGB( 128,128,128 );
>
> if( $output_projection != '' ) {   // Project and Draw
> // create new rect to query against the new layer
> $rect = ms_newRectObj();
> $rect->setExtent( $ex0, $ex1, $ex2, $ex3 );
>
> // query new layer
> $layer->queryByRect( $rect );
> $map->queryByRect( $rect );
>
> // set projection of output map
> $map->setProjection($output_projection, MS_TRUE);
>
> // draw
> $image = $map->drawQuery();
> } else {  // Just draw the map
> // draw
> $image = $map->draw();
> }
>
> // Save the image
> $image->saveImage( $output_file_path );
>
> ?>
> 
> 
> 
> 
> 
> -
>
>
> Kralidis,Tom [Ontario] wrote:
>> I've added a small example at:
>>
>> http://trac.osgeo.org/mapserver/wiki/PHPMapscriptAddLayerQueryReproject
>>
>> Hope this helps.
>>
>> ..Tom
>>
>>
>>
>> -Original Message-
>> From: mapserver-users-boun...@lists.osgeo.org on behalf of Tim Wood
>> Sent: Sat 07-Feb-09 22:55
>> To: mapserver-users@lists.osgeo.org
>> Subject: [mapserver-users] Problems with MapScript and setProjection
>>
>> I've been round and round with setProjection in MapScript and
>> setProjection today. I either get the infamous blank image  or the image
>> returns in the sam

Re: [mapserver-users] Problems with MapScript and setProjection

2009-02-09 Thread Tim Wood
Tom, that PPT linked from your example is filled with good stuff.  
Anyway, I took your example and did some minor changes to make it work 
with mapscript as Fedora installs it and my data. Then I added the 
ability to turn projection on & off. With the projection off, everything 
works great. But, I'm still getting a blank image with the projection 
turned on. If anyone has any pointers on what's wrong with the code 
(below) I'd appreciate it.


Tim Wood

-
$shape_path = "$base_path/data/zcta/zt08_d00_shp/"; // goofy path 
I'm too lazy to fix
$shape_file = "gfsa000b06a_e";  // works with or 
w/o the extension

$shape_file_projection = "+proj=longlat +datum=NAD83";

// The Extents (area) I want in latitude, longitude (Canada)
list( $ex0, $ex1, $ex2, $ex3 ) = array(-140, 40, -50, 55 );

// Describe the rest of my output
$output_projection = '';
$output_projection = "+proj=tcc +lon_0=90w +ellps=GRS80";
$output_file_rel = "output/index2.png";
$output_file_path = "$base_path/$output_file_rel";
list($output_width, $output_height ) = array( 600, 500 );



// Load MapScript extension
if (!extension_loaded("MapScript"))  dl('php_mapscript.'.PHP_SHLIB_SUFFIX);

// add map
$map = ms_newMapObj( $base_map );

// tdw temp
$map->setExtent( $ex0, $ex1, $ex2, $ex3 );

// Set the shapepath
$map->set( 'shapepath', $shape_path );
// Set the output format and size
$map->selectOutputFormat( 'png' );
$map->setSize( $output_width, $output_height );

// add new layer to map
$layer = ms_newLayerObj($map);
$layer->set("name", "foo");
$layer->set("status", MS_ON);
$layer->set("data", $shape_file );
$layer->set("type", MS_SHAPE_POLYGON );
$layer->setProjection( $shape_file_projection );

// This line hides a bunch of errors that appear iff $output_projection 
is set

$layer->set("template", "ttt");
$layer->set("dump", "true");

// add new class to new layer
$class = ms_newClassObj($layer);
$class->set("name", "foo");

// add new style to new class
$style = ms_newStyleObj($class);
$style->color->setRGB(255, 0, 0);
$style->outlinecolor->setRGB( 128,128,128 );

if( $output_projection != '' ) {   // Project and Draw
   // create new rect to query against the new layer
   $rect = ms_newRectObj();
   $rect->setExtent( $ex0, $ex1, $ex2, $ex3 );

   // query new layer
   $layer->queryByRect( $rect );
   $map->queryByRect( $rect );

   // set projection of output map
   $map->setProjection($output_projection, MS_TRUE);

   // draw
   $image = $map->drawQuery();
} else {  // Just draw the map
   // draw
   $image = $map->draw();
}

// Save the image
$image->saveImage( $output_file_path );

?>


   


-


Kralidis,Tom [Ontario] wrote:

I've added a small example at:

http://trac.osgeo.org/mapserver/wiki/PHPMapscriptAddLayerQueryReproject

Hope this helps.

..Tom



-Original Message-
From: mapserver-users-boun...@lists.osgeo.org on behalf of Tim Wood
Sent: Sat 07-Feb-09 22:55
To: mapserver-users@lists.osgeo.org
Subject: [mapserver-users] Problems with MapScript and setProjection
 
I've been round and round with setProjection in MapScript and 
setProjection today. I either get the infamous blank image  or the image 
returns in the same proportions as the original lat/long data. Proj 
seems to be (at least partially) working because if I forget something 
like +ellps=[blah blah], it throws an error.


I'd like to look at a simple php mapscript example of creating a map, 
adding a layer, adding something to that layer (e.g. my a simple query 
against a lat/long shapefile) and then project that another way (tmerc, 
lcc, whatever). But, I have yet to find one. Can someone share a working 
example or know of one on the web?


Tim Wood



___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


RE: [mapserver-users] Problems with MapScript and setProjection

2009-02-08 Thread Kralidis,Tom [Ontario]

I've added a small example at:

http://trac.osgeo.org/mapserver/wiki/PHPMapscriptAddLayerQueryReproject

Hope this helps.

..Tom



-Original Message-
From: mapserver-users-boun...@lists.osgeo.org on behalf of Tim Wood
Sent: Sat 07-Feb-09 22:55
To: mapserver-users@lists.osgeo.org
Subject: [mapserver-users] Problems with MapScript and setProjection
 
I've been round and round with setProjection in MapScript and 
setProjection today. I either get the infamous blank image  or the image 
returns in the same proportions as the original lat/long data. Proj 
seems to be (at least partially) working because if I forget something 
like +ellps=[blah blah], it throws an error.

I'd like to look at a simple php mapscript example of creating a map, 
adding a layer, adding something to that layer (e.g. my a simple query 
against a lat/long shapefile) and then project that another way (tmerc, 
lcc, whatever). But, I have yet to find one. Can someone share a working 
example or know of one on the web?

Tim Wood

___
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users