Postgis openlayers
From DreamsteepWiki
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);
?>

