<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
> Date: Sat, 2 May 2009 00:35:46 +0200<br>> From: Baas@speerit.nl<br>> To: mapserver-users@lists.osgeo.org<br>> Subject: [mapserver-users] MapScript and ZoomRectangle (and rectObj problems)<br>> <br>> Hello List,<br>> <br>> Three years ago, I built a web interface for our primary application<br>> using MapServer. Now we're in the process of building that same<br>> application in VB.Net (but with more features) using MapScript.<br>> <br>> Although everything comes along nicely (I love the fact that everything<br>> returns objects, etc) there is one huge problem that I can't seem to<br>> solve: creating and using the rectObj class. I read a lot about it and<br>> found many bug cases, older messages, etc, but I still can't make heads<br>> or tails of it. I'm sorry about asking it, since it must be the<br>> millionth time this question has been asked.<br>> <br>> I *CAN* get ZoomRect with a rectObj to work when using image coords,<br>> even though that requires my own code that flips miny and maxy to solve<br>> that lovely error about miny => maxy or something. When I try to use it<br>> with map coords however, I can't get it to work. <br>> <br>> In my init code I create a new rect object:<br>>     Map = New mapObj(strMapPath)<br>>     FullExtent = New rectObj(0, 0, 0, 0, 0)<br>>     With Map.extent<br>>       FullExtent.maxx = .maxx<br>>       FullExtent.minx = .minx<br>>       FullExtent.maxy = .maxy<br>>       FullExtent.miny = .miny<br>>     End With<br>> <br>> When I feed this to ZoomRectangle using <br>> Map.zoomRectangle(FullExtent, MapWidth, MapHeight, Map.extent, Nothing)<br>> I get that famous "mapscript::mapObj::zoomRectangle(): General error<br>> message. image rectangle maxy >= miny". <br>> <br>> When I flip miny and maxy I end up in the middle of the Sahara (while<br>> the original coords should show the Netherlands).<br>> <br>> Things I wonder about:<br>> 1) How can I get zoomRectangle to work with world/map coords instead of<br>> image coords?<br>> 2) Why does the constructor have an "imageunits as integer"? IMHO a<br>> simple rect object has nothing todo with the coordsys of the/a map<br>> (since I can more than one).<br>> 3) When will the much discussed bugfix be applied that automaticly flips<br>> miny/maxy?<br>> <br>> Any help would be greatly appreciated,<br>> <br>> With kind regards,<br>> Jelmer Baas<br>> _______________________________________________<br>> mapserver-users mailing list<br>> mapserver-users@lists.osgeo.org<br>> http://lists.osgeo.org/mailman/listinfo/mapserver-users<br><br>Hi,<br>  When I want to use ZoomRectangle with real coordinates, i always transform<br>the real coordinates to image coords based on the current rendering of the map.<br>I talk about current rendering because one must compute the pixels by geographical <br>degrees of the image. A simple function to do such conversion could be:<br><br># Width and height of the map image (from mapObj.width)<br># X,Y are the real coord pair<br># real_extent from mapObj.extent<br>def map2img (width, height, x, y, real_extent):<br>     ppd_x=0<br>     ppd_y=0<br>     new_x=0<br>     new_y=0<br>     ppd_x = width / ( real_extent.maxx - real_extent.minx )  # pixel per degrees<br>     ppd_y = height / ( real_extent.maxy - real_extent.miny )<br>     new_x=ppd_x * ( x - real_extent.minx )<br>     new_y=height - ppd_y * ( y - real_extent.miny )<br>     return (new_x , new_y)<br><br>Thus, the two pairs of real coordinates can be converted using two call to this<br>function (there exists a distortion though in large scales). <br><br> Beware that if your map is using a different "output" projection than the <br>REAL zoom coordinates are (say, zoom coords are latlong while map is LAEA)<br>you should first use a method to reproject the coords to the map's projection equivelant<br>(i do sth like this using the OGR/GDAL's osr module)<br><br>Finally, prevent minx>maxx error by requiring that the users define the proper points for<br>the input rectangle say (UL and LR) or (UR and LL)<br><br>Hope this helps a bit.<br><br><br /><hr />See all the ways you can stay connected <a href='http://www.microsoft.com/windows/windowslive/default.aspx' target='_new'>to friends and family</a></body>
</html>