tks  a lots.

I will translate it into php, hope it  works!

and, I am trying the function--Query of mapwidget, but it donn't support 
attribite filter.

--- 10年5月6日,周四, miansi [via OSGeo.org] 
<[email protected]> 写道:

发件人: miansi [via OSGeo.org] <[email protected]>
主题: Re: How to use setselection in fusion?
收件人: "lzzgeo" <[email protected]>
日期: 2010年5月6日,周四,上午12:21



That is what I am trying to do right now. I am working with .NET. So I will 
share what I am doing and maybe that will help :-)


1. Build Selection XML


Note: searchString is your query (ID==1 || ID==2).



            var mgMapName = requestParams["mapName"];

            var mgSessionId = requestParams["sessionId"];


            // Initialize the web-tier.

            var realPath = this.Request.ServerVariables["APPL_PHYSICAL_PATH"];

            var configPath = realPath + "..\\webconfig.ini";

            MapGuideApi.MgInitializeWebTier(configPath);


            // Connect to the site.

            var userInfo = new MgUserInformation(mgSessionId);

            var conn = new MgSiteConnection();

            conn.Open(userInfo);


            // get the map

            var map = new MgMap(conn);

            map.Open(mgMapName);


            // Perform any necessary transforms on the layer name or ids

            var mapObjects = 
TransformInputLayer(requestParams["objectTypes"].Split(','), 
requestParams["objectIds"].Split(','));


            // Select the objects on the map

            var layers = map.GetLayers();

            var selection = new MgSelection(map);


            foreach (var layer in layers)

            {

                var searchString = new StringBuilder();


                // Build out the search expression for the map layer

                foreach (var mapObject in mapObjects.Where(rec => rec.LayerName 
== layer.Name))

                {

                    if (searchString.Length > 0)

                    {

                        searchString.Append(" OR ");

                    }

                    searchString.AppendFormat("Id = '{0}'", mapObject.ObjectId);

                }


                // Execte the search on the layer

                if (searchString.Length > 0)

                {

                    var displayIdQuery = new MgFeatureQueryOptions();

                    displayIdQuery.SetFilter(searchString.ToString());


                    var featureReader = layer.SelectFeatures(displayIdQuery);

                    selection.AddFeatures(layer, featureReader, 
AppSettings.MgSelectionFilterSize);

                    featureReader.Close();

                    featureReader.Dispose();

                }

            }


            var selectionXml = selection.ToXml();

            map.Dispose();


2. Now the fun part I am working on right now - pass your selection to Fusion.

I used to have AJAX Viewer and I used following logic:

I have some aspx page (SetMapSelection.aspx)



SetMapSelection.aspx:

<head runat="server">

    <title>Set Map Selection Page</title>


    <script type="text/javascript" language="javascript" 
src="http://localhost/mapguide/fusion/layers/MapGuide/MapGuideViewerApi.js";></script>


    <script type="text/javascript">

    // Emit the following function and assocate it with the onLoad event for 

    // the page so that it gets executed when this page loads in the browser.   
    

    // The function calls the SetSelectionXML method on the Viewer Frame, 

    // which updates the current selection on the viewer and the server.

    function OnPageLoad() {

        var selectionXml = 
document.getElementById("hfSelectionXml").getAttribute("value");


        parent.SetSelectionXML(selectionXml);

        parent.ExecuteMapAction(10);

        parent.ExecuteMapAction(99);


    }

    </script>


</head>

<body onload="OnPageLoad()">

    <form id="formM5Logic" runat="server">

    <div>

        <asp:TextBox ID="hfSelectionXml" runat="server"></asp:TextBox>

        <asp:HiddenField ID="HiddenFieldM5Logic" 
runat="server"></asp:HiddenField>

    </div>

    </form>

</body>



SetMapSelection.aspx.cs:

        protected void Page_Load(object sender, EventArgs e)

        {

            // Disable the client side cache

            this.Response.Cache.SetCacheability(HttpCacheability.NoCache);


            // Write to session which page is loaded, this is used by the 
context help to determine the 

            // approproiate help page to load.

            this.Session.Add(SessionStateBase.HELP_PAGE_REFERENCE, 
this.Request.Path);


            // Get the input parameters into the selection

            var requestParams = this.Request.HttpMethod == "GET" ? 
this.Request.QueryString : this.Request.Form;

            var mgMapName = requestParams["mapName"];

            var mgSessionId = requestParams["sessionId"];


            // Initialize the web-tier.

            var realPath = this.Request.ServerVariables["APPL_PHYSICAL_PATH"];

            var configPath = realPath + "..\\webconfig.ini";

            MapGuideApi.MgInitializeWebTier(configPath);


            // Connect to the site.

            var userInfo = new MgUserInformation(mgSessionId);

            var conn = new MgSiteConnection();

            conn.Open(userInfo);


            // get the map

            var map = new MgMap(conn);

            map.Open(mgMapName);


            // Perform any necessary transforms on the layer name or ids

            var mapObjects = 
TransformInputLayer(requestParams["objectTypes"].Split(','), 
requestParams["objectIds"].Split(','));


            // Select the objects on the map

            var layers = map.GetLayers();

            var selection = new MgSelection(map);


            foreach (var layer in layers)

            {

                var searchString = new StringBuilder();


                // Build out the search expression for the map layer

                foreach (var mapObject in mapObjects.Where(rec => rec.LayerName 
== layer.Name))

                {

                    if (searchString.Length > 0)

                    {

                        searchString.Append(" OR ");

                    }

                    searchString.AppendFormat("Id = '{0}'", mapObject.ObjectId);

                }


                // Execte the search on the layer

                if (searchString.Length > 0)

                {

                    var displayIdQuery = new MgFeatureQueryOptions();

                    displayIdQuery.SetFilter(searchString.ToString());


                    var featureReader = layer.SelectFeatures(displayIdQuery);

                    selection.AddFeatures(layer, featureReader, 
AppSettings.MgSelectionFilterSize);

                    featureReader.Close();

                    featureReader.Dispose();

                }

            }


            var selectionXml = selection.ToXml();

            map.Dispose();

            this.hfSelectionXml.Text = selectionXml;

        }


So as you can see - Page_Load builds selection XML and OnPageLoad passes it to 
AJAX Viewer frame for further processing.


What I am puzzled with is to how to get a reference to Fusion, so I can pass my 
selection to Fusion. Something like this:


    function OnPageLoad()

    {   

       var selectionXml = 
document.getElementById("hfSelectionXml").getAttribute("value");


       var vf = top.document.getElementById('frmMap');


       vf.document.forms[0].GetFusionMapWidget.setSelection(selectionXml, 
true); 

    }


Note:

In my app I have 2 iframes - Map Viewer and Application frame. frmMap is Map 
Viewer frame:


        <iframe name="frmDefault" id="frmDefault" class="frameBoxGeneral" 
frameborder="0" src="Pages/Loading.aspx">

        </iframe>

        <iframe name="frmMap" id="frmMap" src="<%= AppSettings.MgServicesUrl 
%>/fusion/templates/mapguide/standard/index.html"

            class="frameBoxMap" frameborder="0"></iframe>







View message @ 
http://osgeo-org.1803224.n2.nabble.com/How-to-use-setselection-in-fusion-tp5001965p5009766.html


To unsubscribe from How to use setselection in fusion?, click here.







-- 
View this message in context: 
http://osgeo-org.1803224.n2.nabble.com/How-to-use-setselection-in-fusion-tp5001965p5012703.html
Sent from the MapGuide Users mailing list archive at Nabble.com.
_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to