Postgis openlayers

From DreamsteepWiki

Jump to: navigation, search

EXPERIMENTAL VERSION



<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>PostGIS Playground V 1.21.01a- Keith Legg - MetroPlanning </title>

    <style type="text/css">
      body {
        font-family: arial, verdana, sans-serif;
        font-size: 12px;
      }
      a { text-decoration: none; }


      .smallmap {
        //width:  500px;
        height:  300px;
        background-color: #888888;
        margin: 10px auto;
        border: 4px solid #000000;
        text-align: center;
     }

    </style>

    <script src="../../lib/OpenLayers.js"></script>


    <script type="text/javascript">
             var map;
             /*
              ###########################################################
              PostGIS -Openlayers GUI Utilities, Keith Legg,July 2009-January 20,2010
              VERSION 1.21.01a
              
              Description:
               Some Javascript functions to access postGIS,draw polygons in Openlayers,
               create a "selectable" polygon layer ,zoom to selection , and fo various geometry processing
              ###########################################################
              As of Jan 16 , 2010 this is a complete list of JS functions
              ###########################################################
              zoom_to_xtnts             - zoom to extents of ????
              draw_poly                 - DEBUG  callback from query_db_index
              select_poly_index         - select a polygon by index number
              unselect                  - erase select geometry and clear selection arrays
              showselrecords            - lookup records for items in sel index
              read                      - read an html tag
              write                     - write to a html tag
              make_array                - utility to split a line by '\n' chars
              show_index_only_cb        - show sel index
              format_text_response      - format - ???
              stripout_wkt_text         - format - remove (( )) '
              query_db_draw_poly        - query  - query by index            # CLICK SEL
              query_db_index_str        - query  - called by showselrecords  # POLY ->DB    //////PHP ARGS/// $query = $QUERYTOUSE.$INDEX_TO_GET ;
              query_db_button_cb        - query  - html search button        # DB ->POLY
              ###########################################                ##
              random_markers            - make 10 random markers
              make_random_points        - calls random_markers()
              return_clickXY            - NULL a test function
              add_layer                 - NULL
              select_filter             - check for existsing id
              find_extents_of_array     - NULL - get BBOX of multiple BBOXES
              centroid_poly             -  calls get_centroid_postgis()
              get_centroid_postgis      -  makes a centroid query of polygon in postgis
              get_bbox_postgis          -  makes a box2d query of polygon in postgis
              draw_point                -  make a point , usage : draw_point(X,Y);
              draw_geoinfo_centroid     -
              draw_geoinfo_box          -
              get_geoinfo_bounds        -
              make_polygon_layer        -
              stripout_wkt_text_paran   -   formatting text
              open_php_return_url       - the interface to PHP via xmlhttprequest
              ########### (?) UTILITIES               ########
              clear_points              -
              clear_bboxes              -
              reselect                  - refresh polygons on selectin layer
              ##########callbacks                     ########
              refresh_cb                   -
              buffer_cb                 - buffer callback
              bbox_poly                 -  callback for BBOX button
              run_selpoly_fr_click      -  click callback
              select_poly_click         -  click callback calls  run_selpoly_fr_click
              ###########################################                    ##
             */
             
             ///
             MAX_NUMBER_RECORDS = 6 ; //maximum number records that can be selected at a time
             ///
             var SELECT_INDEX     = new Array();  //the index of polys currently selected
             var FEATURES_CREATED = new Array();
             var FEATURES_BBOXES  = new Array(); //debug cache bbox for each feature (store as filed instead?)
             var FEATURES_POINTS  = new Array();
             
             var CUR_ZOOM_EXTNTS  = new Array();
             //var RESELECT_BUFFER  = new Array();
             ///////////////////////////
             ///////////////////////////
             GETQUERYLAYER = "taxpolyswms";
             var ID_TABLE   = 'gid';
             var TABLENAME  = 'taxlot_polygons';
             var GEOM_COLUMN = 'the_geom';
             
             var FIELD_TO_SEARCH = 'ACCTNODASH';
             var URL_FOR_PHPFILES = 'http://127.0.0.1/open/examples/jasp_post';
             ///////////////////////////
             ///////////////////////////

             XNTN_MINX = 1302989 ;
             XNTN_MINY = 11205608 ;
             XNTN_MAXX = 1357078  ;
             XNT_MAXY = 11245462  ;
 		     	
             ///////////////////////////////////////////////////////////////////////////////////////////
             ///////////////////////////////////////////////////////////////////////////////////////////
             
             function init()
             {
              map = new OpenLayers.Map({div: 'map', allOverlays: false ,
              maxExtent: new OpenLayers.Bounds(XNTN_MINX ,XNTN_MINY, XNTN_MAXX ,XNT_MAXY ),
              maxResolution: "auto",  controls: [] ,units:"feet", projection:"epsg:26915"});


              t2 = new OpenLayers.Layer.MapServer( "postgis","http://127.0.0.1/cgi-bin/mapserv.exe?map=/ms4w/apps/keith/htdocs/postgis.map" ,
              {layers: "t2"}, {gutter: 15} ,{transparent: true } );
              map.addLayer(t2);

              t1 = new OpenLayers.Layer.WMS( "wms","http://127.0.0.1/cgi-bin/mapserv.exe?map=/ms4w/apps/jasper/htdocs/jaspertaxpoly_wms.map" ,
              {layers: "taxpolyswms"}, {gutter: 15} ,{transparent: true } );
              map.addLayer(t1);


              
              /////////////////////////
              //POINT LAYER
              var styleMap3 = new OpenLayers.StyleMap(OpenLayers.Util.applyDefaults(
              {fillColor: "#660033", fillOpacity: 1, strokeColor: "#ff00cc" ,strokeWidth: 1},
              OpenLayers.Feature.Vector.style["default"]));
              //the "selected"  geometry (blue outline)
              pointzz = new OpenLayers.Layer.Vector("Centroids",{styleMap: styleMap3});
              map.addLayer(pointzz);
              
              /////////////////////////
              //BBOX LAYER
              var styleMap2 = new OpenLayers.StyleMap(OpenLayers.Util.applyDefaults(
              {fillColor: "#33dd22", fillOpacity: 0, strokeColor: "#33dd22" ,strokeWidth: 5},
              OpenLayers.Feature.Vector.style["default"]));
              //the "selected"  geometry (blue outline)
              boxlayer = new OpenLayers.Layer.Vector("BBoxes",{styleMap: styleMap2});
              map.addLayer(boxlayer);


              /////////////////////////
              //BUFFER LAYER
              var styleMap4 = new OpenLayers.StyleMap(OpenLayers.Util.applyDefaults(
              {fillColor: "#ffcc33", fillOpacity: 0, strokeColor: "#ffcc33" ,strokeWidth: 1},
              OpenLayers.Feature.Vector.style["default"]));
              bufferlayer = new OpenLayers.Layer.Vector("Buffer",{styleMap: styleMap4});
              map.addLayer(bufferlayer);
              
              
              /////////////////////////
              //SELECTION LAYER
              //setup the look of our vector layer
              var styleMap = new OpenLayers.StyleMap(OpenLayers.Util.applyDefaults(
              {fillColor: "#00ffff", fillOpacity: .1, strokeColor: "#00ffff" ,strokeWidth: 3},
              OpenLayers.Feature.Vector.style["default"]));
              //the "selected"  geometry (blue outline)
              vectors = new OpenLayers.Layer.Vector("Selection",{styleMap: styleMap});
              map.addLayer(vectors);




              ////////////////////////
              ////////////////////////
              ////////////////////////
              
             //var vectors1 = new OpenLayers.Layer.Vector("Vector Layer 1");
             // map.addLayer(vectors1);
              
             //taken as an example to make a selectable marker
             var vectors1 = new OpenLayers.Layer.Vector("dots");
              map.addLayer(vectors1);

              function random_markers() {
                    var features = new Array;
                    for(var i=0; i<10; ++i)
                    {
                         randompt = generate_random_XY();
                         features.push(new OpenLayers.Feature.Vector(
                               new OpenLayers.Geometry.Point(randompt[0],randompt[1] )
                          ) );
                    }
                    return features;
                } //eof  random_markers


                /////////////
              function gen_coords_circle(NUM_DIVS,XY_INARRAY)
              {
                    var XY_COORDS = new Array;
                    //var NUM_DIVS = 4 ;//number of splits in cirlce (4 = 90 degrees, etc)
                    var use_divs = 360/NUM_DIVS;
                    var radius = 3000;
                    for(var i=0; i<360; i=i+use_divs)
                    {
                      var str_coords= ( String(XY_INARRAY[0] +(radius*Math.sin(i)) )+" "+String( XY_INARRAY[1] +(radius*Math.cos(i)) ) );
                      XY_COORDS.push(str_coords);
                    }
                    return XY_COORDS;
              }
              ////////////////////////////////////////////
                /*
                Generate a random point within the range of our map extents
                */
              function generate_random_XY()
              {
                var out = new Array();
                randx=    XNTN_MINX + (XNTN_MAXX - XNTN_MINX) * Math.random() ;
                randy=    XNTN_MINY + (XNT_MAXY - XNTN_MINY) * Math.random()  ;
                out.push(randx);
                out.push(randy);
                return out;
              }
              ////////////////////////////////////////////
              /*
              INPUT SETUP: String ARRAY ['X Y','X Y', . . ]
              */
              
              function createFeatureCircles(numdivs)
              {
                    var features = new Array;
                    var circles_coords = gen_coords_circle(numdivs,generate_random_XY() ) ;
                    var features = new Array;
                    for(var i=0; i<numdivs; ++i)
                    {
                        var tmp = circles_coords[i].split(' ');
                        // randompt = generate_random_XY();
                         features.push(new OpenLayers.Feature.Vector(
                               new OpenLayers.Geometry.Point(tmp[0],tmp[1] )
                          ) );
                    }

                    return features;
                } //eof  random_markers
                
              ////////////////////////////////////////////
              function make_circle_of_circ()
              {
                  var feetz = createFeatureCircles(10);
                  vectors1.addFeatures( feetz );
              }
              
              
              function make_random_circles()
              {
                var numcircles     = 10;
                var pts_per_circle = 10;
                
                for(var i=0; i<numcircles; ++i)
                 {
                  var feetz = createFeatureCircles(pts_per_circle);
                  vectors1.addFeatures( feetz );
                 }
              }
              ////////////////////////////////////////////
              

                //debug ,a test
              function make_random_points()
              {
               var feetz =  random_markers();
               vectors1.addFeatures( feetz );
              }
              ////////////////////////////////////////////

               //MAKE SOME POINTS RANDOMLY
               // make_random_points();
               
               //MAKE A CIRCLE OF POINTS
               // make_circle_of_circ();

               //MAKE MULTIPLE CIRCLES OF POINTS
               //  make_random_circles();
             
              ////////////////////////////////////////////
              

             /*
             var vectors1 = new OpenLayers.Layer.Vector("Vector Layer 1", {
                styleMap: new OpenLayers.StyleMap({
                    "default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
                        externalGraphic: "img/marker-green.png",
                        graphicOpacity: 1,
                        rotation: -45,
                        pointRadius: 10
                    }, OpenLayers.Feature.Vector.style["default"])),
                    "select": new OpenLayers.Style({
                        externalGraphic: "img/marker-blue.png"
                    })
                })
            });
            map.addLayer(vectors1);

              /////

             vectors1.events.on({
                "featureselected": function(e) {
                    alert("selected feature "+e.feature.id+" on Vector Layer 1");
                },
                "featureunselected": function(e) {
                    alert("unselected feature "+e.feature.id+" on Vector Layer 1");
                }
            });
              */
              ////////////////////////
              ////////////////////////
              ////////////////////////
              

              ////////////////////////
              nav = new OpenLayers.Control.Navigation();
              map.addControl(nav);
              map.addControl(new OpenLayers.Control.LayerSwitcher());
              map.addControl(new OpenLayers.Control.MousePosition({element:$('position')}));


              map.events.register('click', map, function (e)
               {
                    select_poly_click(e)

               });
              ///////////////////////////////////////////////////
              /*
              XY or lat/lon    //shift modifier ? debug
              */
              function return_clickXY(event)
              {
                 output = new Array();
                 output.push(event.xy.x);
                 output.push(event.xy.y );
                 return output;
              }
              
              ///////////////////////////////////////////////////
              function select_poly_click(event)
              {
                mouseLoc = map.getLonLatFromPixel(event.xy);
                var url = t1.getFullRequestString({
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",       //#  /
                        STYLES: "",
                        BBOX: map.getExtent().toBBOX(),
                        X: event.xy.x,
                        Y: event.xy.y,
                        QUERY_LAYERS: GETQUERYLAYER,
                        FEATURE_COUNT: 1,
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h
                         }  );
                         

                  OpenLayers.loadURL(url, '', this, run_selpoly_fr_click );
                  Event.stop(event);
                }
            } //end init function

            //////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////




            
              
            function add_layer(layername){
            }

            ////////////////////////////////

            function select_filter(query)
            {
              EXISTS = 0;

                 for (var i in SELECT_INDEX)
                 {
                   var tmp = ( SELECT_INDEX[i] );
                   if (tmp==query)
                   {
                    EXISTS=1;
                   }
                 }

              return EXISTS;
            }

            
            
            /*
            Redraw/refresh polygons
            Assume the select index has been set by another function
            
             DEBUG
             //register a function on the "onscroll" event of the scrolled pane
             //map.updateSize();
 
 
            */
            
            function reselect(layername)
            {
              if (SELECT_INDEX.length==0)
              {
               alert("Nothing Selected") ;
              }
              if (SELECT_INDEX.length>0)
              {
                  //var temparray = SELECT_INDEX;
                  //var SELECT_INDEX = new Array();
                  //first erase existing geometry
                  for (var test in FEATURES_CREATED)
                  {
                     //this iterates the array
                      vectors.removeFeatures( FEATURES_CREATED[test] );
                  }
                  
                 //then redraw it
                 for (var i in temparray)
                 {
                   var tmp = ( temparray[i] );
                   select_poly_index(tmp);
                  }
                 //SELECT_INDEX= temparray;
               }
               //
            }
            ///////
            
            function refresh_cb()
            {
             //SELECT_INDEX = [0,1,2];
             reselect();
            }


            //////////////////////////////////////////////////////////////////////////////
            /*
            
            --Find all land parcels within 100 units of a specific parcel.
              SELECT l2.parcel_id, l2.st_num, l2.st_name
               FROM landparcels l , landparcels l2
                WHERE ST_DWithin(l.the_geom, l2.the_geom, 100)
              	AND l.parcel_id = '1234560000';

            */

            function HUD_cb()
            {
               alert ( map.getExtent() );
            }

            //////////////////////////////////////////////////////////////////////////////

            
            //ST_Buffer(ST_MakePoint(4,10),10,10)


            function buffer_cb()
            {
                //var QUERY = 'ST_Buffer(ST_MakePoint(4,10),10,10)';

                var index_to_use = SELECT_INDEX[0];
                
                var sURL  = (URL_FOR_PHPFILES+"/query_geometry.php?indexnum="+index_to_use );
  			        var test=open_php_return_url(sURL);

                var QUERY= ("ST_Buffer(ST_GeomFromWKT("+test.responseText+") ) ");

                var sURL2  = (URL_FOR_PHPFILES+"/record_query.php?querystr="+QUERY+"&querytwo="+index_to_use );
                 			
                var test=open_php_return_url(sURL2);
                alert(test.responseText);
                
                //alert("debug buffer");
                
            }

            //////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////
            
            //read text from an html window
            function read(TAGNAME)
            {
               textstr = document.getElementById(TAGNAME).value;
               return textstr
            }
            //////////////////////////////////////////////
            //read text from an html window
            function write(TAGNAME,TEXT)
            {
                document.write(TAGNAME).innerHTML = TEXT ;
            }
            //////////////////////////////////////////////
             /*
             walk through selected index array and retrieve records for it from db
             */
             function show_index_only_cb()
             {
              if (SELECT_INDEX.length==0){
               alert("Nothing Selected") ;
              }
              if (SELECT_INDEX.length>0){
               alert(SELECT_INDEX);
              }
             }
             
            //////////////////////////////////////////////
             function show_geo_cb()
             {
              if (SELECT_INDEX.length==0){
               alert("Nothing Selected") ;
              }
              var temp = new Array();
              
              if (SELECT_INDEX.length>0){
                for (var test in FEATURES_CREATED)
                  {
                     //this iterates the array
                     temp.push( FEATURES_CREATED[test].geometry );
                  }
               alert( temp);
              }
             }
             


             ///////////////////////////////////////////////////////////////
             /*
             function find_xtnt_multipart(XTNTX_ARRAY)
             {
               var OUTPUT = new Array();
             }
             */
             
             ///////////////////////////////////////////////////////////////
             /*
             function find_extents_of_array(XTNTX_ARRAY)
             {
               var OUTPUT = new Array();
               var tmp_minx = 0;
               var tmp_miny = 0;
               var tmp_maxx = 0;
               var tmp_maxy = 0;

               var tmp = XTNTX_ARRAY[0];

               for (var test in tmp)
                {
                     var tmp2 = ( tmp[test] );
                     var tmp3 = (tmp2.split(',') );

                }
             }
             */
             
             //////////////////////////////////////////////////////////////
             /*
              show records - scan array of indices and get the records for them
                  //  SELECT  ST_Box2D(the_geom) FROM post_wgs WHERE id=3
                   
             */

             function showselrecords()
             {
              if (SELECT_INDEX.length==0){
               alert("Nothing Selected") ;
              }
              if (SELECT_INDEX.length>0){
                  var temp = '';
                  var tempp ='' ;
                  
                  for (var test in SELECT_INDEX)
                  {
                       //////////////////////////////
                       //////////////////////////////
                       //NEXT FIELD GID
                       temp = temp +("FID:");
                       FIELD_TO_SEARCH = 'gid';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');

                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }
                       //////////////////////////////
                       //////////////////////////////
                       //NEXT FIELD ACCTNODASH
                       temp = temp +("ACCT:");
                       FIELD_TO_SEARCH = 'ACCTNODASH';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');
                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }
                       //////////////////////////////
                       //////////////////////////////
                       //NEXT FIELD LEGAL1
                       temp = temp +("LEGAL1:");
                       
                       FIELD_TO_SEARCH = 'LEGAL1JAD';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');

                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }

                       //////////////////////////////
                       //////////////////////////////

                       //NEXT FIELD LEGAL2
                       temp = temp +("LEGAL2:");
                       FIELD_TO_SEARCH = 'LEGAL2JAD';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');

                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }
                       
                       //////////////////////////////
                       //////////////////////////////
                       //NEXT FIELD LEGAL3
                       temp = temp +("LEGAL3:");
                       FIELD_TO_SEARCH = 'LEGAL3JAD';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');

                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }
                       //////////////////////////////
                       //////////////////////////////
                       //NEXT FIELD LEGAL4
                       temp = temp +("LEGAL4:");
                       FIELD_TO_SEARCH = 'LEGAL4JAD';
                       var temp2 = query_db_index_str(SELECT_INDEX[test],'SELECT+'+TABLENAME+'."'+FIELD_TO_SEARCH+'"+FROM+ +'+TABLENAME+'+ +WHERE+ +'+ID_TABLE+'=');

                       if (temp2.length>0){
                             tempp = (temp2.split('\n'));
                             temp = temp +(tempp[0]  );
                       }
                       
                       temp = temp +'#--------------------------------------------#\n'
                       ////////////
                       //set it back for next time
                       FIELD_TO_SEARCH = 'ACCTNODASH';
                       
                  }


                  document.getElementById("outputwin").value = temp;
              }
             }
             ///////////////////////////////////////////
             //this is the centroid callback
             function centroid_poly()
             {
              if (SELECT_INDEX.length==0)
              {
               alert("Nothing Selected") ;
              }
              if (SELECT_INDEX.length>0)
              {
                  //BBOX = get_bbox_postgis(SELECT_INDEX[0]);
                  //GEOINFO = (get_geoinfo_bounds(BBOX));
                  //
                  var result = get_centroid_postgis(SELECT_INDEX[0]) ; //debug , arg is index
                  draw_point( result[0]+' '+result[1] ) ;

                  //draw_geoinfo_centroid(GEOINFO);//debug argument
              }
             }
             
             
             ///////////////////////////////////////////
             function get_centroid_postgis(index_to_use)
             {
                  // SELECT ST_x (centroid(the_geom))  FROM taxlot_polygons WHERE gid=0 ;
                  // SELECT ST_y (centroid(the_geom))  FROM taxlot_polygons WHERE gid=0 ;
                  var XCN = 0;
                  var YCN = 0;
                  
                  var output = new Array();
                  
                  var QUERY= ("SELECT+  +ST_x(centroid("+GEOM_COLUMN+"))+ +FROM+ +"+TABLENAME+"+ +WHERE+ +"+ID_TABLE+"=");
                  var sURL  = (URL_FOR_PHPFILES+"/record_query.php?querystr="+QUERY+"&querytwo="+index_to_use );
                  var orequest = open_php_return_url( sURL );
                  XCN =parseFloat(orequest.responseText);
                  ////
                  
                  var QUERY= ("SELECT+  +ST_y(centroid("+GEOM_COLUMN+"))+ +FROM+ +"+TABLENAME+"+ +WHERE+ +"+ID_TABLE+"=");
                  var sURL  = (URL_FOR_PHPFILES+"/record_query.php?querystr="+QUERY+"&querytwo="+index_to_use );
                  var orequest = open_php_return_url( sURL );
                  YCN =parseFloat(orequest.responseText);
                  //var test =  stripout_wkt_text_paran (  orequest.responseText);
                  //alert( orequest.responseText );
                  output.push(XCN);
                  output.push(YCN);
                  
                  return output;
             }
             ///////////////////////////////////////////
             
             function get_bbox_postgis(index_to_use)
             {
                  //var index_to_use =SELECT_INDEX[0];  //DEBUG ONLY LOOKS AT THE FIRST THING SELECTED
                  var QUERY= ("SELECT+  +ST_Box2D("+GEOM_COLUMN+")+ +FROM+ +"+TABLENAME+"+ +WHERE+ +"+ID_TABLE+"=");
                  var QUERY2 = index_to_use
                  var sURL  = (URL_FOR_PHPFILES+"/record_query.php?querystr="+QUERY+"&querytwo="+QUERY2 );
                  var orequest = open_php_return_url( sURL );
                  var test =  stripout_wkt_text_paran (  orequest.responseText);
                  //alert( orequest.responseText );
                  return test;
             }
             
             //////////////////////////////////////////////////
             //this is the BBOX callback
             function bbox_poly()
             {
               if (SELECT_INDEX.length==0){
                 alert("Nothing Selected") ;
                }
               if (SELECT_INDEX.length>0)
               {
                  BBOX = get_bbox_postgis(SELECT_INDEX[0]);
                  GEOINFO = (get_geoinfo_bounds(BBOX));
                  //debug , just a test
                  draw_geoinfo_box(GEOINFO);
               }
             }
             ///////////////////////////////////////////
             //this is the zoomselected callback
             function zoom_to_xtnts()
             {
               if (SELECT_INDEX.length==0){

                  bounds = new OpenLayers.Bounds(XNTN_MINX ,XNTN_MINY, XNTN_MAXX ,XNT_MAXY ) ;
                  map.zoomToExtent(bounds);
                }
               if (SELECT_INDEX.length>0){
                
                  var index_to_use =SELECT_INDEX[0];  //DEBUG ONLY LOOKS AT THE FIRST THING SELECTED
                  var QUERY= ("SELECT+  +ST_Box2D("+GEOM_COLUMN+")+ +FROM+ +"+TABLENAME+"+ +WHERE+ +"+ID_TABLE+"=");

                  var QUERY2 = index_to_use
                  var sURL  = (URL_FOR_PHPFILES+"/record_query.php?querystr="+QUERY+"&querytwo="+QUERY2 );
                  var orequest = open_php_return_url( sURL );
                  var test =  stripout_wkt_text_paran (  orequest.responseText);
                  //alert( orequest.responseText );

                  bounds = new OpenLayers.Bounds(test[0] ,test[1], test[2] ,test[3] ) ;
                  map.zoomToExtent(bounds);

               }
             }
             ////////////////////////////////////////////

             ///////////////////////////////////////////
             //clear polygon display and reset internal arrays
             //this is named wrong, should be unselect_ALL
             
             function unselect()
             {
                  for (var test in FEATURES_CREATED)
                  {
                     //this iterates the array
                      vectors.removeFeatures( FEATURES_CREATED[test] );
                  }

                  FEATURES_CREATED   = new Array();
                  SELECT_INDEX       = new Array();
                  
                  document.getElementById("outputwin").value = "";

                  
             }
           ///////////////////////////////////////////
           function clear_points()
           {
                  for (var test in FEATURES_POINTS)
                  {
                      pointzz.removeFeatures( FEATURES_POINTS[test] );
                  }
                  FEATURES_POINTS    = new Array();  //debug  // not quite in use yet still an idea //
           }
           
           ///////////////////////////////////////////
           function clear_bboxes()
           {
                  for (var test in FEATURES_BBOXES)
                  {
                      boxlayer.removeFeatures( FEATURES_BBOXES[test] );
                  }
                  FEATURES_BBOXES    = new Array();  //debug  // not quite in use yet still an idea //
           }
           
           ///////////////////////////////////////////

           function draw_point(XY_ARRAY)
           {
             POLYCOORDS = '' ;

             //temp=('1332989 11225608');
             POLYCOORDS=('POINT('+XY_ARRAY+')');

             var feat = make_polygon_layer(POLYCOORDS,pointzz);

             //debug is this redundant?
             FEATURES_POINTS.push(feat);
             return feat;
           }
           ///////////////////////////////////////////
           // convert geoinfo into point cordinates //
           //DEBUG THIS IS HACKED DEBUG
           function draw_geoinfo_centroid(GEOINFO_OBJECT)
           {
             POLYCOORDS = ''

             bottomleft     = GEOINFO_OBJECT[0];
             topleft        = GEOINFO_OBJECT[1];
             topright       = GEOINFO_OBJECT[2];
             bottomright    = GEOINFO_OBJECT[3];
             //redundant                    [4] (loop close vtx)
             len_x          = GEOINFO_OBJECT[5];
             len_y          = GEOINFO_OBJECT[6];
             //                             //
             cen_x          = GEOINFO_OBJECT[7];
             cen_y          = GEOINFO_OBJECT[8];
             
             //draw_point( ( GEOINFO_OBJECT[7]+','+abs(GEOINFO_OBJECT[8]) ) );
             temp =   ( GEOINFO_OBJECT[0] ) ;
             //temp =   ( GEOINFO_OBJECT[7]+' '+GEOINFO_OBJECT[8] ) ;
             
             //temp='1332989 11225608';
             draw_point(temp);
             ////

           }
           
           ///////////////////////////////////////////
           // convert geoinfo into poly cordinates //
           function draw_geoinfo_box(GEOINFO_OBJECT)
           {
             POLYCOORDS = ''

             bottomleft     = GEOINFO_OBJECT[0];
             topleft        = GEOINFO_OBJECT[1];
             topright       = GEOINFO_OBJECT[2];
             bottomright    = GEOINFO_OBJECT[3];

             //////
             temp =(bottomleft+', '+topleft+', '+topright+', '+bottomright);

             POLYCOORDS=( 'POLYGON(('+temp+'))' );
             var feat = make_polygon_layer(POLYCOORDS,boxlayer);

             FEATURES_BBOXES.push(feat)
             
           }
           
           
           ///////////////////////////////////////////
           /*
           return the poly coordinates for a bounding box ,
           , length X, length Y , centroidx ,centroid y   ,
           ,   etc etc
           
           */
            //0 minx  1 miny  2 maxx  3 maxy//
            /////////////////////////////////////
            //          array[2]               //
            //   array[0]       array[3]       //
            //          array[1]               //
            /////////////////////////////////////
            
           function get_geoinfo_bounds(BOUNDS_ARRAY)
           {
             var output = new Array();

              BL    = BOUNDS_ARRAY[0]+' '+BOUNDS_ARRAY[1] ;
              TL    = BOUNDS_ARRAY[0]+' '+BOUNDS_ARRAY[3] ;
              TR    = BOUNDS_ARRAY[2]+' '+BOUNDS_ARRAY[3] ;
              BR    = BOUNDS_ARRAY[2]+' '+BOUNDS_ARRAY[1] ;
              
              ////           ////                  ///
             // length_x   = Math.abs( parseFloat( BOUNDS_ARRAY[3] )  -  parseFloat(BOUNDS_ARRAY[0])  );
             // length_y   = Math.abs( parseFloat( BOUNDS_ARRAY[2] ) -  parseFloat(BOUNDS_ARRAY[1])  );
             // centroid_x = BOUNDS_ARRAY[0]+ (length_x/2 ) ;
             // centroid_y = BOUNDS_ARRAY[1]+ (length_y/5 ) ;
             ////           ////
             output.push(  BL  );
             output.push(  TL  );
             output.push(  TR  );
             output.push(  BR  );
             output.push(  BL  );//this closes the poly
             ////          ////

             return output;
           }

           ///////////////////////////////////////////



           ///////////////////////////////////////////
           function make_polygon_layer( COORDS,layerobj)
           {
                   var wkt = new OpenLayers.Format.WKT() ;
                   features=wkt.read(COORDS);
                   FEATURES_CREATED.push(features)
                   layerobj.addFeatures(features);
                   return features;
                }

           ///////////////////////////////////////////
           //intermediate function to call make_poly
           // called from query_db_draw_poly
           function draw_poly(e)
           {
              var resp =e.responseText ;
              var lines = resp.split('\n');

              make_polygon_layer(lines[1],vectors);
              
           }
            ///////////////////////////////////////////

            //the callback on click  , called from select_poly_click()
            function run_selpoly_fr_click(response)
            {

               var fooresp = make_array(response.responseText);
               var index_fr_wms = format_text_response (fooresp);
               var tmp = fooresp[3].split(' ');
               var tmp2 = tmp[3].split(':');
               index_fr_wms = (tmp2[0])   ;
               //alert(index_fr_wms);
               //DEBUG THIS IS WHERE WE NEED HELP WITH JASPER DATA
               
               select_poly_index(index_fr_wms);

               // showselrecords(); //auto display of records //turn off for speed ?
            }

            ///////////////////////////////////////////
            /*
             function to "select" a polygon ,
              check for existing index (to prevent duplicate selection)
              check for maximun number , to clamp the number selected
              
             
            */

    		    ///////
            function select_poly_index(index_fr_wms)
            {
               if (SELECT_INDEX.length  == MAX_NUMBER_RECORDS)
               {
                 alert("only "+MAX_NUMBER_RECORDS+" records at a time");
               }
               
               if (SELECT_INDEX.length  < MAX_NUMBER_RECORDS)
               {
                 if (select_filter(index_fr_wms) !=1)
                 {
                  //lookup polygon and draw it
                  query_db_draw_poly(index_fr_wms);
                  //remember index number of polygon for later
                  SELECT_INDEX.push(index_fr_wms);
  	             }
               }
    		    }
   			    //////////////////////////////////////////////////
   			    //split a string up by new line characters
            function make_array(INPUT_TEXT)
            {
              var OUTPUTARRAY = INPUT_TEXT.split('\n')  ;
              return OUTPUTARRAY;
            }
   			    //////////////////////////////////////////////////

            ///////////////////////////////////////////////////////////
              //  2 functions to process text responses, strings , etc
            ///////////////////////////////////////////////////////////


   			    //////////////////////////////////////////////////               			
            //pick out all the lines in an array that have an equals sign
            function format_text_response( INPUT_TEXT)
            {
                  SPLITCHAR = "="; //"trigger" character to identify lines to use and to locate split on each line
                  var OUTPUTARRAY =new Array(); //THIS IS THE STORAGE FOR THE SORTED OUTPUT
                  for (var test in INPUT_TEXT)
                  {
                    var curline = INPUT_TEXT[test] ;
                    lookforequals =  curline.match("=")  ;
                    var buffersplit = curline.split(SPLITCHAR)  ;
                    if (lookforequals == "=") //or null
                    {
                     if (buffersplit[1].length>3 )
                      {
                       var nodash = buffersplit[1].split('\'') //filter out ' quotes
                       OUTPUTARRAY.push ( nodash[1]   );
                      }
                    }
                  }//end of loop
                  return OUTPUTARRAY;
            } //end of function
   			    //////////////////////////////////////////////////
   			    //go through a string of WKT and extract verticies , return as XY(Z?) array
             function stripout_wkt_text(WKTPOLY)
             {
               var output = new Array();
               var tst=String(WKTPOLY)
               //alert(tst.length);
                 
               //capture ONLY in between paranthesis, this most likely will not work for a multipolygon object DEBUG )
               var tmp1 = tst.split('((');
               var tmp2 = tmp1[1].split('))');
               for (var ind in tmp2)
                  {
                      output.push( tmp2[ind].split(' ') );
                  }
               
               return output;
             }
   			    //////////////////////////////////////////////////
   			    //more tests of formatting
             function stripout_wkt_text_paran(WKTPOLY)
             {
               var tst=String(WKTPOLY)
               WKTPOLY.split('');
              
               var output = new Array();
               
               var tmp1 = tst.split('(');
               var tmp2 = tmp1[1].split(')');
               var tmp3 = tmp1[1].split(',');
               var tmp4 = tmp3[0].split(' ')
               var tmp5 = tmp3[1].split(')')
               var tmp6=  tmp5[0].split(' ')
                      
               output.push(  parseFloat(tmp4[0].replace( ","  ,  "" ) ) );
               output.push(  parseFloat(tmp4[1].replace( ","  ,  "" ) ) );
               output.push(  parseFloat(tmp6[0].replace( ","  ,  "" ) ) );
               output.push(  parseFloat(tmp6[1].replace( ","  ,  "" ) ) );

               return output;
             }
                             			
                			
                			
                			
            ///////////////////////////////////////////////////////////
              // 3 types of query ( db->poly ,click->poly ,poly->db)
            ///////////////////////////////////////////////////////////
            /*
              intentionally left generic , reusable tool to call PHP
              
              all php call will be made through this function (neater and cleaner that way)
            */
            
            function open_php_return_url(sURL)
            {
                  var oRequest = new XMLHttpRequest();
			
                  oRequest.open("GET",sURL,false);
                  oRequest.setRequestHeader("Content-Type", "text/xml");
                  oRequest.send(null) ;
                   if (oRequest.status==200)
                   {

                      return oRequest;
                   }

                     else alert("Error executing XMLHttpRequest call!");

             }
   			    //////////////////////////////////////////////////


            /*
            click->poly
            */
            
            //execute php with argument (index of poly)   			
   			    function query_db_draw_poly(index_to_use)
             {
                  var sURL  = (URL_FOR_PHPFILES+"/query_geometry.php?indexnum="+index_to_use );
  			          var test=open_php_return_url(sURL);
                  draw_poly( test) ;
  			          
             }// eof query_db_draw_poly


            ///////////////////////////////////////////////////
            //SELECT taxlot_polygons."ACCOUNTNO" FROM taxlot_polygons WHERE gid = 2112  ;
            //query_db_index_str(2112,"SELECT taxlot_polygons.\"ACCOUNTNO\" FROM taxlot_polygons WHERE gid =");
            
            ///////////////////////////////////////////////////
            /*
            CALLED FROM showselrecords()
            poly->db , execute php with argument,return as string (index of poly)
            */
   			
   			    function query_db_index_str(index_to_use,qu1)
             {
                 var sURL  = (URL_FOR_PHPFILES+"/record_query_indx.php?querystr="+qu1+"&indexnum="+index_to_use);
                 var test=open_php_return_url(sURL);
    		         return test.responseText;
  			          
             }// eof query_db_index

             ///////////////////////////////////////////
             /*
             db->poly
             
             This will query an id based on the ATTRIBUTE in the html field
             if found it will attempt to select the polygon based on GID number

             SELECT gid FROM taxlot_polygons WHERE taxlot_polygons."ACCTNODASH"=CAST('000915001000'AS text)
             */

             function query_db_button_cb()
             {
                  unselect();  //first clear the selection -debug
                  ///////////////////
                  // SELECT gid FROM taxlot_polygons WHERE taxlot_polygons."ACCTNODASH"=CAST('000915001000'AS text)
                  var QURY_SRCH = read("actabl"); //ftabl
                  var QUERY_TO_USE = ('SELECT gid FROM taxlot_polygons WHERE taxlot_polygons."ACCTNODASH"=CAST('+QURY_SRCH+'AS text');
                  var ACCOUNTNO ='ACCTNODASH';
                  //var sURL  = ("http://127.0.0.1/open/examples/jasp_post/record_query.php?querystr=SELECT+ +id+ +FROM+'+TABLENAME+'+ +WHERE+ +"+FIELD_TO_SEARCH+"=&querytwo="+feildtable ); // + index_to_use
                  var sURL  = (URL_FOR_PHPFILES+'/rec_search_adv.php?relat=taxlot_polygons&qury='+ACCOUNTNO+'&qrysrch='+QURY_SRCH );
                  var test=open_php_return_url(sURL);
                  select_poly_index(test.responseText );   //oRequest.responseText
                  ///////////////////
                  //showselrecords(); //auto show records
                  zoom_to_xtnts(); //auto zoom
             }

             
             ///////////////////////////////////////////
             
             
    </script>



  </head>
  <body onload="init()">
    <p id="shortdesc">
   </p>

    <table>
        <div id="map" class="smallmap"></div>
    </table>

      <table id="search_table">
       <tr>
          <td>
            NAME:<input type="text" value="sample"       name="namtab"  id="ftabl" size="10" />
            ADDR:<input type="text" value="sample"       name="addrtab" id="adrabl" size="10" />
            ACCT:<input type="text" value="006850002300" name="accttab" id="actabl" size="13" />
          </td>
        </tr><tr>
          <td>
            <input type="submit" onclick="javascript: query_db_button_cb();"  name="search_but"     value="Search" />
            <input type="submit" onclick="javascript: showselrecords();"      name="show_but"       value="GET_RECORDS" />
            <input type="submit" onclick="javascript: zoom_to_xtnts();"       name="zoombut"        value="Zoom to Select" />
            <input type="submit" onclick="javascript: unselect();"            name="desallbut"      value="CLR_SEL" />
            <input type="submit" onclick="javascript: clear_bboxes();"        name="clrbbbut"       value="CLR_BB" />
            <input type="submit" onclick="javascript: clear_points();"        name="clrptbut"       value="CLR_PT" />

            <!-- buttonName.Attributes.Add("onclick", "javascript: valNumeric();"); -->
          <td colspan="4" style="text-align: center; font-size: 10px;">
            <a href="http://127.0.0.1/open/examples/jasp_post/jasper.html">RESET PAGE</a><br />
            

            <input type="submit" onclick="javascript: refresh_cb();"          name="rfrsh_but"       value="REFRESH" />
            <!-- <input type="submit" onclick="javascript: make_random_points();"     name="mark_but"       value="marker" />   -->
            <input type="submit" onclick="javascript: buffer_cb();"           name="buff_but"        value="BUFFER" />
            <input type="submit" onclick="javascript: bbox_poly();"           name="bbox_but"        value="BBOX" />
            <input type="submit" onclick="javascript: centroid_poly();"       name="cent_but"        value="CENTROID" />
            <input type="submit" onclick="javascript: show_index_only_cb();"  name="showselbut"      value="Show Indx" />
            <input type="submit" onclick="javascript: show_geo_cb();"         name="showgeobut"      value="Show Geo" />
            <input type="submit" onclick="javascript: HUD_cb();"              name="hud_but"         value="Screen" />


         </td>
          </td>
        </tr><tr>

        </tr>
      </table>
        <textarea type='text' id='outputwin' rows=9 cols=95/>
        </textarea>
        

  </body>
</html>







RECORD QUERY INDEX




 <?php
  //http://127.0.0.1/open/examples/keith/record_query.php?querystr=SELECT+*+FROM

  $DBNAME     = 'jasper_tax';
  $USER       = 'postgres';
  $PASSWORD   = 'password';
  $HOST       = '127.0.0.1';
  ////////
  $dbconn = pg_connect("host=$HOST dbname=$DBNAME user=$USER password=$PASSWORD")
   or die('Could not connect: ' . pg_last_error());

  $QUERYTOUSE = '';
  $query      = '';
  ##############################
  
  if ( (isset($_GET['indexnum']))  ) {
  $INDEX_TO_GET = trim(stripslashes($_GET['indexnum']));;
  }
  
  if ( (isset($_GET['querystr']))  ) {
   $QUERYTOUSE = trim(stripslashes($_GET['querystr']));;
   $query = $QUERYTOUSE.$INDEX_TO_GET ;
   $search_db= pg_query($query);
   $results= pg_num_rows($search_db);

    if ($results < 1) {
      echo '<div style="text-align: center; width: 100%; font-weight: bold;">No Records Found</div>';
    } else {
       //THE RESULTS
      while ($row = pg_fetch_array($search_db)) {
        $size = count($row);
        //for ($a=0;$a<$size;$a++)
        //{ echo $row[$a]; }
        if (strlen($row)>0)
        {
         if (strlen($row)!='\n')
         {
          echo $row[0];
         }
        }
      }
    }//
    pg_close($dbconn);
  }

?>








RECORD QUERY



<?php
  //http://127.0.0.1/open/examples/keith/record_query.php?querystr=SELECT+*+FROM&querytwo=taxlot_polygons
  $DBNAME    = 'jasper_tax';
  $USER      = 'postgres';
  $PASSWORD  = 'password';
  $HOST      = '127.0.0.1';
  
  $dbconn = pg_connect("host=$HOST dbname=$DBNAME user=$USER password=$PASSWORD")
   or die('Could not connect: ' . pg_last_error());

   $QUERYTOUSE = trim(stripslashes($_GET['querystr']));;
   $QPARTTWO   = trim(stripslashes($_GET['querytwo']));;
   //
   $query = $QUERYTOUSE .' '. $QPARTTWO;

   $search_db= pg_query($query);
   $results= pg_num_rows($search_db);

    if ($results < 1)
    {
      echo 'No Records Found';
    } else {
      while ($row = pg_fetch_array($search_db))
      {
        echo $row[0];
      }
    }//
    pg_close($dbconn);

?>






REC_SEARCH_ADV



<?php
  $DBNAME      = 'jasper_tax';
  $USER        = 'postgres';
  $PASSWORD    = 'password';
  $HOST        = '127.0.0.1';
  $GID_INDEX   = 'gid';
  /////////////////////////
  $RELATION    =  '';//'taxlot_polygons'; //*
  $QURY_FIELD  =  '';//'ACCOUNTNO';       //*
  $INDEX_NUM   =  '';//222;                //*
  $qrysrch  ='';
  
  if ( (isset($_GET['relat']))  ) {
  $RELATION = trim(stripslashes($_GET['relat']));;
  }
  
  if ( (isset($_GET['qury']))  ) {
  $QURY_FIELD = trim(stripslashes($_GET['qury']));;
  }

  if ( (isset($_GET['qrysrch']))  ) {
  $qrysrch = trim(stripslashes($_GET['qrysrch']));;
  }

  if ( (isset($_GET['indexnum']))  ) {
  $INDEX_NUM = trim(stripslashes($_GET['indexnum']));;
  }
  
  
  /////////////////////////
  $dbconn = pg_connect("host=$HOST dbname=$DBNAME user=$USER password=$PASSWORD")
   or die('Could not connect: ' . pg_last_error());


   //$qrysrch
   
   //$query = ('SELECT '. $RELATION .'."'.$QURY_FIELD.'" FROM '.$RELATION.' WHERE '.$GID_INDEX.' ='.$INDEX_NUM );
   //$query = ('SELECT '. $RELATION .'."'.$QURY_FIELD.'" FROM '.$RELATION.' WHERE '.$QURY_FIELD.'='.$qrysrch );


   //SELECT gid FROM taxlot_polygons WHERE taxlot_polygons."ACCTNODASH"=CAST('000915001000'AS text)

   $query = ("SELECT gid FROM " . $RELATION  . " WHERE " . $RELATION . ".\"". $QURY_FIELD ."\"=CAST('".$qrysrch."'AS text)"  );

   //"=CAST(\'' . $qrysrch . '\'AS text)'


   //echo $query;
   
   $search_db= pg_query($query);
   $results= pg_num_rows($search_db);

    if ($results < 1)
    {
      echo 'No Records Found';
    } else {
      while ($row = pg_fetch_array($search_db))
      {
        echo $row[0];
      }
    }//
    pg_close($dbconn);

?>






QUERY GEOMETRY


<?php
  /*
  this takes one argument, an index to query, returns a polygon

  */
  
  $GEOMTAB = 'taxlot_polygons';  //the name of the postgis table
  $ID_TABLE = 'gid';             //the name of the index field
  $DBNAME = 'jasper_tax';
  $USER = 'postgres';
  $PASSWORD = 'password';
  $HOST = '127.0.0.1';
  /////
  
   $dbconn = pg_connect("host=$HOST dbname=$DBNAME user=$USER password=$PASSWORD")
   or die('Could not connect: ' . pg_last_error());
   

  if ( (isset($_GET['indexnum']))  ) {
  $INDEX_TO_GET = trim(stripslashes($_GET['indexnum']));;
  $query = 'SELECT ST_asText(the_geom) FROM '.$GEOMTAB.' WHERE '.$ID_TABLE.' = '.$INDEX_TO_GET.' ;';
  }

  $result = pg_query($query) or die('Query failed: ' . pg_last_error());
  $arr = pg_fetch_array($result, 0, PGSQL_NUM);

  print"\n";
  echo $arr[0] ;
  print"\n";


  pg_free_result($result);
  pg_close($dbconn);

?>



Personal tools