[mapserver-users] How to work Query Map(Zoom to Shape)

venkat ven.tammineni at gmail.com
Thu Jun 26 22:28:30 PDT 2008


Dear All,

  I am Venkat,I have one problem that is  "how to work with Query Map".How
to get zoom to shape.I have done some code getting extents for shape and set
extents for shape(The complete Envelop of shape) with that  i have done
some code that is set extents for shape
    Ex :-
            lyar = map.getLayerByName("Continents");
            if (ddlContinents.SelectedIndex.ToString() == "0")
//dropdownbox filtering
            { map.setExtent(-25.36055756, -34.82200241, 63.49575806,
37.34041214); } //shape extents

   But i have 3000 plues shapes .I can not write code for each and every
shape.code will be very big and complicated.

   I got some sample code in Mapserver5.0.but is Console Application.I have
modified that application.I am getting error. "object not initialized"

 Please anyone can help me how to use "Query Map" sample code.

Here is Sample code for Query Map :-

 private static bool IsLayerQueryable(layerObj layer)
         {
        if (layer.type == MS_LAYER_TYPE.MS_LAYER_TILEINDEX)
            return false;

        if (layer.template != null && layer.template.Length > 0) return
true;

        for (int i = 0; i < layer.numclasses; i++)
        {
            if (layer.getClass(i).template != null &&
layer.getClass(i).template.Length > 0)
                return true;
        }
        return false;
    }

    public static void QueryByAttribute(string qstring, mapObj map, bool
zoomToResults)
    {

        try
        {
            layerObj layer;
            rectObj query_bounds = null;
            for (int i = 0; i < map.numlayers; i++)
            {
                layer = map.getLayer(i);
                if (layer.connection != null && IsLayerQueryable(layer))
                {
                    MessageBox.Show("Layer [" + i + "] name: " + layer.name
);
                    BuildQuery(layer, qstring);
                    // zoom to the query results
                    using (resultCacheObj results = layer.getResults())
                    {
                        if (results != null && results.numresults > 0)
                        {
                            // calculating the extent of the results
                            if (query_bounds == null)
                                query_bounds = new
rectObj(results.bounds.minx, results.bounds.miny,
                                    results.bounds.maxx,
results.bounds.maxy, 0);
                            else
                            {
                                if (results.bounds.minx < query_bounds.minx)
query_bounds.minx = results.bounds.minx;
                                if (results.bounds.miny < query_bounds.miny)
query_bounds.miny = results.bounds.miny;
                                if (results.bounds.maxx > query_bounds.maxx)
query_bounds.maxx = results.bounds.maxx;
                                if (results.bounds.maxy > query_bounds.maxy)
query_bounds.maxy = results.bounds.maxy;
                            }
                        }
                    }
                }
            }
            // setting the map extent to the result bounds
            if (zoomToResults)
            {
                map.setExtent(query_bounds.minx, query_bounds.miny,
query_bounds.maxx, query_bounds.maxy);
                MessageBox.Show("Current map scale: 1:" +
(int)map.scaledenom);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show("QueryByAttribute: " + e.Message);
        }
    }

        private static void BuildQuery(layerObj layer, string qstring)
        {
            if (layer != null && layer.map != null)
            {

                string qs = qstring;
                string att = null;

                MessageBox.Show("Query string: " + qs);

                try
                {
                    layer.queryByAttributes(layer.map, att, qs, 1);
                }
                catch (Exception e)
                {
                    MessageBox.Show("BuildQuery: " + e.Message);
                }
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            bool ZoomToResults = true;


            QueryByAttribute("India",map, ZoomToResults);

           map.querymap.status = mapscript.MS_ON;
           map.querymap.color.setRGB(0, 0, 255);
           map.querymap.style = (int)MS_QUERYMAP_STYLES.MS_HILITE;
        }

Thanks And Regards,
Venkat.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20080627/21f3aec2/attachment.htm>


More information about the MapServer-users mailing list