Re[mapguide-users] nderingService and DPI (How to change DPI
before rendering)
simon hope
simonh at geobiz.co.nz
Tue Nov 13 14:39:27 EST 2007
Scott,
I was looking at creating PDF's a couple of months back and I used a couple
of methods - both the rendering service and the direct call to mapagent via
http - i ended up using the direct call to mapagent as my preferred method -
here is some sample code that i used (c#)
Method 1 - rendering service
//method for getting extent
int dpi = map.GetDisplayDpi();
double metPerUnit = 100000;
double metPerPxl = 0.0254 / dpi;
double sesMapScale = map.GetViewScale();
int sesScrnW = map.GetDisplayWidth();
int sesScrnH = map.GetDisplayHeight();
double midX = map.GetViewCenter().GetCoordinate().GetX();
double midY = map.GetViewCenter().GetCoordinate().GetY();
double sesLLX = midX - ((sesMapScale * sesScrnW * metPerPxl) /
metPerUnit) / 2;
double sesURX = ((sesMapScale * sesScrnW * metPerPxl) / metPerUnit)
/ 2 + midX;
double sesLLY = midY - ((sesMapScale * sesScrnH * metPerPxl) /
metPerUnit) / 2;
double sesURY = ((sesMapScale * sesScrnH * metPerPxl) / metPerUnit)
/ 2 + midY;
//get the map envelope
MgEnvelope env = new MgEnvelope(sesLLX, sesLLY, sesURX, sesURY);
//set the selection
MgSelection sel = new MgSelection(map);
//set the rendering service
MgRenderingService renderingSrvc =
siteConnection.CreateService(MgServiceType.RenderingService) as
MgRenderingService;
//set the colour
MgColor bgcolor = new MgColor(0, 0, 0, 0);
MgByteReader byteReader = renderingSrvc.RenderMap(map, sel, env,
sesScrnW, sesScrnH, bgcolor, "png");
MgGeometryFactory gFactory = new MgGeometryFactory();
MgCoordinate coord =
gFactory.CreateCoordinateXY(map.GetViewCenter().GetCoordinate().GetX(),
map.GetViewCenter().GetCoordinate().GetY());
long byteReaderSize = byteReader.GetLength();
//Create an MgByteSink and save to the file system
MgByteSink byteSink = new MgByteSink(byteReader);
string fileName = "c:\\temp\\RenderMap.png";
byteSink.ToFile(fileName);
Method 2 - http request
call.....
System.Drawing.Image bmp =
GetImageFromURL("http://localhost/mapguide/mapagent/mapagent.fcgi?OPERATION=GETMAPIMAGE&VERSION=1.0.0&SESSION="
+ tbSessionID.Text + "&MAPNAME=" + tbMapName.Text + "&LOCALE=en&FORMAT=" +
format + "&SETVIEWCENTERX=" + Convert.ToString(x) + "&SETVIEWCENTERY=" +
Convert.ToString(y) + "&SETVIEWSCALE=" + Convert.ToString(scale) +
"&SETDISPLAYDPI=" + strDpi + "&SETDISPLAYWIDTH=" + dispW +
"&SETDISPLAYHEIGHT=" + dispH);
method....
private System.Drawing.Image GetImageFromURL(string strURL)
{
System.Drawing.Image retVal = null;
try
{
HttpWebRequest request =
(HttpWebRequest)HttpWebRequest.Create(strURL);
//request.Timeout = 15000; // 5 seconds in milliseconds
//request.ReadWriteTimeout = 20000; // allow up to 20
seconds to elapse
// execute the request
HttpWebResponse response =
(HttpWebResponse)request.GetResponse();
retVal =
System.Drawing.Image.FromStream(response.GetResponseStream());
}
catch (Exception)
{
retVal = null;
}
return retVal;
}
I can't remember quite where i was experiencing problems with the rendering
service but could looki again if you need more help
Cheers
Simon
Kenneth, GEOGRAF A/S wrote:
>
> I see your point.
> The runtime map has a DisplayDPI property, but it is readonly.
> I also assumed that the API had the same parameters as the actual
> service call, but not in this case.
> You can use the "SETDATAEXTENT" call to set the DPI, but it does change
> current DPI.
>
> You should be able to save a copy of the runtime map though.
>
> Regards, Kenneth, GEOGRAF A/S
>
>
>
> Scott Hameister skrev:
>>
>> That is true...But that is using an FCGI call and not the Rendering
>> Service API...The API has no mention of DPI...I would think the API
>> would have all the same capabilities that an FCGI call has?
>>
>>
>>
>> I started using the FCGI calls...but it became annoying because
>> changing the FCGI DPI...caused the Current maps DPI to change...
>>
>> If I created a new Session to call the FCGI on, then my selection XML
>> from the original Sessions map didn't work in the New Session, because
>> the Layer ID changed...etc.
>>
>>
>>
>> *From:* mapguide-users-bounces at lists.osgeo.org
>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of
>> *Kenneth, GEOGRAF A/S
>> *Sent:* Monday, November 12, 2007 1:21 PM
>> *To:* MapGuide Users Mail List
>> *Subject:* Re: [mapguide-users] RenderingService and DPI (How to
>> change DPI before rendering)
>>
>>
>>
>> I have no used the ColdFusion stuff that you are using, but the call
>> to GetMapImage does have a DPI parameter, that you can use.
>> I have no trouble getting the images as I want, although the PDF
>> format usually reduces quality a bit.
>>
>> Try looking at the code in the viewer for "Printable Page", as it
>> shows how to use the calls.
>>
>>
>> Regards, Kenneth, GEOGRAF A/S
>>
>>
>>
>> Scott Hameister skrev:
>>
>> I can send anyone interested sample PDFs of the same map stream at
>> different screen resolutions
>>
>>
>>
>> *From:* mapguide-users-bounces at lists.osgeo.org
>> <mailto:mapguide-users-bounces at lists.osgeo.org>
>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of *Scott
>> Hameister
>> *Sent:* Monday, November 12, 2007 12:00 PM
>> *To:* 'MapGuide Users Mail List'
>> *Subject:* [mapguide-users] RenderingService and DPI (How to change
>> DPI before rendering)
>>
>>
>>
>> How do I change the DPI that The Rendering Service Uses when Creating
>> a map...
>>
>> The Streamed Image from the rendering service is being poured into a
>> PDF file...the problem is that the quality of the PDF varies based on
>> the Resolution my Screen is at when I render the Stream, instead of
>> being consistent in the PDF. If I'm at 1024 x 768 the PDF map is
>> grainier than if I'm at 1920x1200 resolution when I stream the image
>> How can I address this to make the PDF quality the same for all users?
>>
>>
>>
>> <cfset newMap =
>> renderingSrvc.rendermap(map,mgselection,realCenter,Javacast("DOUBLE",SesMapScale),Javacast
>>
>> ("INT",SesScrnW),Javacast("INT",SesScrnH),mapcolor,"PNG")>
>>
>>
>>
>> Above Is my Coldfusion call...
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>>
>>
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org <mailto:mapguide-users at lists.osgeo.org>
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>
>
--
View this message in context: http://www.nabble.com/RenderingService-and-DPI-%28How-to-change-DPI-before-rendering%29-tf4792763s16610.html#a13733070
Sent from the MapGuide Users mailing list archive at Nabble.com.
More information about the mapguide-users
mailing list