<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v =
"urn:schemas-microsoft-com:vml" xmlns:o =
"urn:schemas-microsoft-com:office:office" xmlns:w =
"urn:schemas-microsoft-com:office:word" xmlns:st1 =
"urn:schemas-microsoft-com:office:smarttags"><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.2995" name=GENERATOR><!--[if !mso]>
<STYLE>v\:* {
        BEHAVIOR: url(#default#VML)
}
o\:* {
        BEHAVIOR: url(#default#VML)
}
w\:* {
        BEHAVIOR: url(#default#VML)
}
.shape {
        BEHAVIOR: url(#default#VML)
}
</STYLE>
<![endif]--><o:SmartTagType name="PersonName"
namespaceuri="urn:schemas-microsoft-com:office:smarttags"></o:SmartTagType><!--[if !mso]>
<STYLE>st1\:* {
        BEHAVIOR: url(#default#ieooui)
}
</STYLE>
<![endif]-->
<STYLE>@font-face {
        font-family: Tahoma;
}
@font-face {
        font-family: Verdana;
}
@page Section1 {size: 612.0pt 792.0pt; margin: 72.0pt 90.0pt 72.0pt 90.0pt; }
font-face {
        FONT-FAMILY: Verdana
}
P.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
LI.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
DIV.MsoNormal {
        FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.emailstyle17 {
        COLOR: windowtext; FONT-FAMILY: Arial
}
SPAN.EmailStyle18 {
        COLOR: navy; FONT-FAMILY: Arial; mso-style-type: personal
}
SPAN.EmailStyle19 {
        COLOR: navy; FONT-FAMILY: Arial; mso-style-type: personal
}
SPAN.EmailStyle20 {
        COLOR: navy; FONT-FAMILY: Arial; mso-style-type: personal
}
SPAN.EmailStyle21 {
        COLOR: navy; FONT-FAMILY: Arial; mso-style-type: personal
}
SPAN.EmailStyle23 {
        COLOR: navy; FONT-FAMILY: Arial; mso-style-type: personal-reply
}
DIV.Section1 {
        page: Section1
}
</STYLE>
</HEAD>
<BODY lang=EN-US vLink=purple link=blue>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>We have to be careful exposing these because it
introduces difficulties in keeping the client and web-tier view states in
sync.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>Assume we expose Set methods on MgMap so the view can
be manipulated on the web-tier. </SPAN></FONT><FONT face=Arial
color=#0000ff size=2><SPAN class=970010017-08122006>Some web-tier code calls the
API and changes the view. If you set these properties directly then the
client and web-tier view states are now out of synch. Maybe you can get
around this by tagging these as pending changes - that adds complexity, but
let's ignore this for now. Now that you've updated the view state on
the web-tier you'll want a way to sync the client to this view. But
you can't push this information out to the client - it has to make a request to
get this information. How to make that happen? They will stay out of
sync until the client initiates another request.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>Suppose while this was going on in the web-tier that
the user panned the view and the viewer made a request for updated
graphics. The request includes the parameters that tell the web-tier what
the updated view should be. Now </SPAN></FONT><FONT face=Arial
color=#0000ff size=2><SPAN class=970010017-08122006>you've got a request and can
sync the views, but which side wins?</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>There's also a problem of multiple refreshes.
</SPAN></FONT><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>In the case of DWF Viewer here's how it could
work. The user clicks on a "Refresh" button and the viewer makes a
GetMapUpdate request. The server responds with an EMapTransaction DWF
that could include information on updating the view (it doesn't support that
now, but that's one way to do it). The viewer would apply the
updated view, but now it has to make another GetMapUpdate request to
get the updated graphics for the new view. </SPAN></FONT><FONT face=Arial
color=#0000ff size=2><SPAN class=970010017-08122006>You might ask why you can't
include the updated graphics in the first EMapTransaction DWF. That
because the viewer (at least for DWF) is responsible for computing what data
extent is needed. After the view is updated the viewer computes the new
data extent and specifies that with the second GetMapUpdate
request.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>Anyway, I feel like I'm starting to ramble here.
The point is that making these view properties writable introduces a number of
viewer / web-tier interaction issues that would have to be addressed, and some
of these aren't trivial.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=970010017-08122006>Walt</SPAN></FONT></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> Jason Birch
[mailto:Jason.Birch@nanaimo.ca] <BR><B>Sent:</B> Friday, December 08, 2006 5:43
PM<BR><B>To:</B> dev@mapguide.osgeo.org<BR><B>Cc:</B> Trevor
Wekel<BR><B>Subject:</B> [mapguide-dev] FW: [mapguide-users] MgTileService -
GetTile - Cannot establish connection<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006>It makes sense to me to expose these additional
objects.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006>Anyone else have any insight or preference one way or
another? There doesn't appear to be a functional barrier
here; it just feels a bit odd to me that there are properties of
an object that are only available through an HTTP call.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006>Are there any other objects that are hidden from the
Web API that could benefit from exposure?</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006></SPAN></FONT><FONT face=Arial color=#0000ff
size=2><SPAN class=338052816-08122006></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff size=2><SPAN
class=338052816-08122006>Jason</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT face=Arial color=#0000ff
size=2></FONT> </DIV>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> Trevor Wekel<BR><B>Sent:</B> Friday,
December 08, 2006 08:23<BR><B>To:</B> Jason Birch;
users@mapguide.osgeo.org<BR><B>Subject:</B> RE: [mapguide-users] MgTileService -
GetTile - Cannot establish connection<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>Hi Jason,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>This was a deliberate exclusion. There are a number
of codependant state variables in MgMap - like center, scale, and
mapExtent. Allowing set access to any one variable would invalidate the
others. There are two other objects in C++ - MgHtmlController and
MgDwfController which correctly manage the codependence. The mapagent uses
these classes.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>There are use cases where the controllers would be useful
for manipulating MgMap state. They could be exposed publically but the
documentation would need to be updated and the exposed methods would have to be
reviewed. Some of the methods are no longer in use and should be
removed. </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>I'm sure other members of the dev community and the PSC
would like to discuss this further.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>Thanks,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2>Trevor</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=623210516-08122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> Jason Birch
[mailto:Jason.Birch@nanaimo.ca] <BR><B>Sent:</B> Thursday, December 07, 2006
4:54 PM<BR><B>To:</B> users@mapguide.osgeo.org<BR><B>Subject:</B> RE:
[mapguide-users] MgTileService - GetTile - Cannot establish
connection<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV dir=ltr align=left><SPAN class=296494923-07122006><FONT face=Arial
color=#0000ff size=2>I'm surprised that there are methods which are available to
the MapAgent but not the APIs. </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=296494923-07122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=296494923-07122006><FONT face=Arial
color=#0000ff size=2>Was this a case of deliberate exclusion, or not enough time
to get everything in? I can see there being some arguments for not
exposing these methods (only need them for rendering, etc) but there are
apparently going to be some use cases for accessing them :)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=296494923-07122006></SPAN><SPAN
class=296494923-07122006><FONT face=Arial color=#0000ff
size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=296494923-07122006><FONT face=Arial
color=#0000ff size=2>Jason</FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma><FONT size=2><B>From:</B> Walt Welton-Lair<SPAN
class=296494923-07122006><FONT face=Arial
color=#0000ff> <BR></FONT></SPAN><B>Sent:</B> Thursday, December 07, 2006
15:47<BR><B>To:</B> users@mapguide.osgeo.org<BR><B>Subject:</B> RE:
[mapguide-users] MgTileService - GetTile - Cannot establish
connection<BR></FONT></FONT><BR></DIV>
<DIV></DIV>
<DIV dir=ltr align=left>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff size=2>Sorry about that - I forgot that the Set methods
weren't exposed.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff size=2>As Alain mentioned, <SPAN
class=655101823-07122006>currently </SPAN>the only way to update the view
is <SPAN class=655101823-07122006>via </SPAN>certain HTTP requests.
GETMAP / GETMAPUPDATE / GETPLOT are used <SPAN class=655101823-07122006>in
the context of </SPAN>DWFViewer, while GETMAPIMAGE and GETVISIBLEMAPEXTENT
are used <SPAN class=655101823-07122006>in the context of</SPAN> AJAX
Viewer. You can include additional parameters with <SPAN
class=655101823-07122006>any of </SPAN>these requests to update view
related information:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff
size=2> SETDISPLAYDPI=<dpi></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff
size=2> SETDISPLAYWIDTH=<width></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff
size=2> SETDISPLAYHEIGHT=<height></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff
size=2> SETVIEWSCALE=<scale></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff size=2> S</FONT></SPAN><SPAN
class=851280623-07122006><FONT face=Arial color=#0000ff
size=2>ETVIEWCENTERX=<centerX></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><FONT face=Arial
color=#0000ff
size=2> SETVIEWCENTERY=<centerY><BR></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=851280623-07122006><FONT face=Arial><FONT color=#0000ff><FONT size=2>While
you can use <SPAN class=655101823-07122006>a </SPAN><SPAN
class=655101823-07122006>viewer </SPAN>to <SPAN
class=655101823-07122006>make these requests for you</SPAN>, you <SPAN
class=655101823-07122006>can make the HTTP r</SPAN>equests <SPAN
class=655101823-07122006>yourself and get the same effect.
</SPAN></FONT></FONT></FONT></SPAN></SPAN><SPAN class=851280623-07122006><SPAN
class=851280623-07122006><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN
class=655101823-07122006>You could write an application
that:</SPAN></FONT></FONT></FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=851280623-07122006><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN
class=655101823-07122006></SPAN></FONT></FONT></FONT></SPAN></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=851280623-07122006><FONT size=+0><FONT color=#0000ff><FONT size=2><SPAN
class=655101823-07122006></SPAN></FONT></FONT></FONT></SPAN></SPAN><SPAN
class=851280623-07122006><SPAN class=655101823-07122006><FONT face=Arial
color=#0000ff size=2>1) creates a session</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>2) creates an
MgMap for your MapDefinition that is part of your
session</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>3)
m</FONT></SPAN></SPAN><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>akes one of the
HTTP requests above</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>
- GETVISIBLEMAPEXTENT is the simplest</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>
- include the SETVIEWSCALE parameter with the request to set the
scale you want</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>4) makes calls
to GetTile</FONT></SPAN></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=851280623-07122006><SPAN
class=655101823-07122006><FONT face=Arial color=#0000ff size=2>5) repeats steps
3 and 4 for each desired scale</FONT></SPAN></SPAN></DIV><SPAN
class=851280623-07122006>
<DIV dir=ltr align=left>
<DIV dir=ltr align=left><FONT face=Arial><FONT color=#0000ff size=2><SPAN
class=851280623-07122006></SPAN></FONT></FONT> </DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN class=655101823-07122006>For steps 1
and 2 there's should be sample code under the MgMap
documentation.</SPAN></SPAN></FONT></FONT></DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN
class=655101823-07122006></SPAN></SPAN></FONT></FONT> </DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN class=655101823-07122006>For step 3
something like .NET's HttpRequest class probably works. Just make the
request to your MG server, e.g.</SPAN></SPAN></FONT></FONT></DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN
class=655101823-07122006>http:://localhost/mapguide/mapagent?</SPAN></SPAN></FONT></FONT><FONT
size=+0><FONT face=Arial color=#0000ff size=2><SPAN
class=851280623-07122006><SPAN
class=655101823-07122006>OPERATION=GETVISIBLEMAPEXTENT&VERSION=1.0.0&SESSION=<sessionId>&MAPNAME=<mapName>&SETVIEWSCALE=<scale></SPAN></SPAN></FONT></FONT></DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN
class=655101823-07122006></SPAN></SPAN></FONT></FONT> </DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN class=655101823-07122006>Here,
mapName is the name from the MgMap.</SPAN></SPAN></FONT></FONT></DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN
class=655101823-07122006></SPAN></SPAN></FONT></FONT> </DIV>
<DIV dir=ltr align=left><FONT size=+0><FONT face=Arial color=#0000ff
size=2><SPAN class=851280623-07122006><SPAN
class=655101823-07122006>Walt</SPAN></SPAN></FONT></FONT></SPAN></DIV></DIV></DIV></BODY></HTML>