[OpenLayers-Users] Fwd: Getting specific data from a single vector feature with a large attribute table
Julius Sempio
julius.sempio at gmail.com
Mon May 28 21:19:37 PDT 2012
Special thanks to sir Gery for the valuable assistance he provided us.
Yours truly:
Julius
---------- Forwarded message ----------
From: Julius Sempio <julius.sempio at gmail.com>
Date: Tue, May 29, 2012 at 12:17 PM
Subject: Re: [OpenLayers-Users] Getting specific data from a single vector
feature with a large attribute table
To: "Gery ." <gamejihou at hotmail.com>
Good day sir. [?]
We're pretty happy to say that we finally managed to solve the issue. We
made use of a ready-made drop-down box (from the free DHTMLx standard
edition library) and made entries linked to the CQL_FILTER in the
GetFeature. We're happy to share the solution for the reference of others:
var survno; <== the repository of the survey number parameter, declared as
a global variable
Snippet within our init() function:
var survnoOptions = [];
survnoOptions.push(["0", "Select a survey #"]);
survnoOptions.push(["1", "1"]);
survnoOptions.push(["2", "2"]);
survnoOptions.push(["3", "3"]);
survnoOptions.push(["4", "4"]);
survnoOptions.push(["5", "5"]);
survnoOptions.push(["6", "6"]);
survnoOptions.push(["7", "7"]);
survnoOptions.push(["8", "8"]);
survnoOptions.push(["9", "9"]);
survnoOptions.push(["10", "10"]);
survnoOptions.push(["11", "11"]);
survnoOptions.push(["12", "12"]);
survnoCombo = new dhtmlXCombo("tsncombobox", "survnosearch",
0.075*width);
survnoCombo.addOption(survnoOptions);
survnoCombo.selectOption(1, false, false);
survno = survnoCombo.getSelectedValue();
survnoCombo.attachEvent("onChange",
function(){
survno = survnoCombo.getSelectedValue();
});
var tsncomboboxDIV = document.getElementById('tsncombobox');
var survnoPage =
"<p
style=\"font-family:verdana;color:navy;font-size:11px;text-align:left;width:25%\">"
+ "<strong>Survey #: </strong></p>";
var statusinitDIV =
document.getElementById('tributaryinformationstatusinit');
statusinitDIV.innerHTML = survnoPage;
statusinitDIV.appendChild(tsncomboboxDIV);
function getWQMS(wqms){
var paramsWQMS = {
REQUEST: "GetFeature",
SERVICE: "WFS",
VERSION: "1.1.0",
TYPENAME: ["prism:WQMS"],
OUTPUTFORMAT: "GML2",
SRSNAME: "EPSG:4326",
CQL_FILTER: "wqms_id = \'" + wqms + "\' AND survey_num = " +
survno}; <== the modified CQL_FILTER parameter that uses the survno global
variable
OpenLayers.Request.GET({
url: "http://202.92.159.15:8080/geoserver/prism/wfs",
params: paramsWQMS,
callback: handlerWQMS});
}
We placed the data display in the handlerWQMS(feature) function, which is
simply an "innerHTML-setting" function.
Again, thank you for the assistance and insights, good sires. [?]
Yours truly:
Julius
On Tue, May 29, 2012 at 10:55 AM, Julius Sempio <julius.sempio at gmail.com>wrote:
> Good day sir.
>
> While studying the idea on attaching innerHTML's in the drop-down box, we
> also found out that the CQL_FILTER parameter in our WFS GetFeature request
> can be utilized as well in outputting the row you need (as long as they
> have unique values):
>
>
> function getWQMS(wqms){
> var paramsWQMS = {
> REQUEST: "GetFeature",
> SERVICE: "WFS",
> VERSION: "1.1.0",
> TYPENAME: ["prism:WQMS"],
> OUTPUTFORMAT: "GML2",
> SRSNAME: "EPSG:4326",
> CQL_FILTER: "wqms_id = \'" + wqms + "\'"}; <== can also help :D
>
>
> OpenLayers.Request.GET({
> url: "http://202.92.159.15:8080/geoserver/prism/wfs",
> params: paramsWQMS,
> callback: handlerWQMS});
> }
>
> We'll try to work around on both ideas.
>
> Thanks for the insights given as of the moment.
>
> Yours truly:
>
> Julius
>
>
> On Mon, May 28, 2012 at 9:05 PM, Gery . <gamejihou at hotmail.com> wrote:
>
>> Hi Julius,
>>
>> Now I understand, probably this may work:
>> http://www.mail-archive.com/users@openlayers.org/msg04937.html. This is
>> an example in html: http://www.echoecho.com/htmlforms11.htm. It should
>> be a way to link that to your postgis table, perhaps through your geoserver
>> but no idea about how.
>>
>> HTH,
>>
>> ------------------------------
>> Date: Mon, 28 May 2012 19:33:01 +0800
>> Subject: Re: [OpenLayers-Users] Getting specific data from a single
>> vector feature with a large attribute table
>> From: julius.sempio at gmail.com
>> To: gamejihou at hotmail.com
>>
>>
>> Good day, sir. Thank you for the prompt reply.
>>
>> The sample data we provided are stored in a single point vector, and in
>> effect we can actually click on only a single vector (or, in essence, a
>> single point vector storing multiple rows).
>>
>> We're planning to make a drop-down box that lists the Survey Numbers and
>> then when the end user selects a survey number (which are, by the way, our
>> means to display data in a temporal manner - that is, each survey number
>> has an assigned date of the times the water quality surveys were done) the
>> information regarding water quality on that particular date is displayed.
>>
>> We're thinking of displaying data one row at a time using that drop-down
>> box, but right now we're still finding ways to do so. As of the moment, we
>> were unsuccessful in linking the drop-down box to GetFeature or
>> GetFeatureInfo.
>>
>> We do find the information you provided helpful when it comes to
>> overlapping features, however, so we still appreciate the insight.
>>
>> Thank you for the time in considering this problem of ours.
>>
>> Yours truly:
>>
>> Julius
>>
>> On Mon, May 28, 2012 at 6:14 PM, Gery . <gamejihou at hotmail.com> wrote:
>>
>>
>> Hello Julius,
>>
>> I work with PostGis, Mapserver and Openlayers to plot my data. My tables
>> are quite similar to what you have, but my code is different. If I
>> understand well, you're trying to get the info stored in your tables after
>> clicking each feature, is it that? if so, you have to play with the
>> GetFeatureInfo code, here is the code:
>> http://openlayers.org/dev/examples/getfeatureinfo-popup.html
>>
>> I understand also that you want to display all the rows in your table
>> based on survey_no column, but just clicking one feature (this is one row),
>> is it that? as far as I know you can assign info to one feature, this is
>> one row, and then press each feature to get its corresponding info, I know
>> that in that way works, probably you may make a query and select only the
>> features that match certain pattern in your survey_no column, ie. all of
>> them that are multiple of 10.
>>
>> Hope this helps,
>>
>> Gery
>>
>> ------------------------------
>> Date: Mon, 28 May 2012 17:30:05 +0800
>> From: julius.sempio at gmail.com
>> To: openlayers-users at lists.osgeo.org
>> Subject: [OpenLayers-Users] Getting specific data from a single vector
>> feature with a large attribute table
>>
>>
>> Good day, sires.
>>
>> I am currently working on a web-based GIS project that mainly concerns
>> with the extraction of data for viewing purposes, and we're using PostGIS,
>> Geoserver and OpenLayers for the said project.
>>
>> Right now we're trying to display data from several rows in the attribute
>> table in a single vector, but right now we're pretty much stuck at
>> displaying only the first line of the table (see example below):
>>
>> fid survey_no wqms_id do surveydate
>> 135 1 WQS-10-1 8.45 1/27/2010
>> ==> only this line gets displayed right now
>> 136 2 WQS-10-2 1.27 1/28/2010
>> 137 3 WQS-10-3 1.08 2/24/2010
>> ==> we would like to display this (and others) using survey_no as the
>> parameter to do so
>> 138 4 WQS-10-4 6.07 3/24/2010
>> ... ... ... ... ...
>>
>> We're currently using the following codes to get information on the
>> feature:
>>
>> function linkToWQMS(wqms){
>> //clear focus layers from previous selection
>> if (wqmsHoverFocus.features != null) {
>> wqmsHoverFocus.removeAllFeatures();
>> }
>> if (popup != null){
>> map.removePopup(popup);
>> }
>>
>> //process wqmsid
>> var wqmsSelected = wqms.name;
>> getWQMS(wqmsSelected);
>> }
>>
>> function getWQMS(wqms){
>> var paramsWQMS = {
>> REQUEST: "GetFeature",
>> SERVICE: "WFS",
>> VERSION: "1.1.0",
>> TYPENAME: ["prism:WQMS"],
>> OUTPUTFORMAT: "GML2",
>> SRSNAME: "EPSG:4326",
>> CQL_FILTER: "wqms_id = \'" + wqms + "\'"};
>>
>> OpenLayers.Request.GET({
>> url: "http://202.92.159.15:8080/geoserver/prism/wfs",
>> params: paramsWQMS,
>> callback: handlerWQMS});
>> }
>>
>> function handlerWQMS(response){
>> //Create gml format object
>> var gml = new OpenLayers.Format.GML();
>> gml.extractAttributes = true;
>>
>> //Get array of OpenLayers.Feature.Vector
>> var features = gml.read(response.responseText);
>>
>> //reproject geometry before buffering
>> var wqmsid = features[0].attributes["wqms_id"];
>> //alert(wqmsid);
>> var geom = features[0].geometry.clone();
>> geom.transform(geographic, mercator);
>>
>> //center tributary to center of bounds
>> var parcelCenter = geom.getBounds().getCenterLonLat();
>> map.panTo(parcelCenter);
>>
>> //pass the control to prismParcelInformationUI.js
>> wqmsInformationController(features[0]);
>> drawFeatures ("wqms", features, 0);
>> }
>>
>> function wqmsInformationController(feature){
>> //pass to create status info entry
>> setTributaryInformationStatus(feature);
>> }
>>
>> function setTributaryInformationStatus(feature){
>> //code to prepare data for viewing
>> var id, survno, dopercent;
>> id = feature.attributes["wqms_id"];
>> survno = feature.attributes["survey_no"];
>> dopercent = Math.round(feature.attributes["do"]*100)/100;
>>
>> var tributaryInformationStatusTablePage = "<table
>> style=\"width:100%\">"
>> + "<tr><td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:right;width:25%\"><strong>Station
>> ID:</strong></td>"
>> + "<td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:left\">" +
>> id + "</td></tr>"
>> + "<tr><td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:right;width:25%\"><strong>Survey
>> No:</strong></td>"
>> + "<td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:left\">" +
>> survno + "</td></tr>"
>> + "<tr><td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:right;width:25%\"><strong>Dissolved
>> Oxygen %:</strong></td>"
>> + "<td
>> style=\"font-family:verdana;color:navy;font-size:11px;text-align:left\">" +
>> checkIfEmpty(dopercent) + "</td></tr>"
>> + "</table>";
>>
>> //get html elements and attach tributaryInformationBasicPage
>>
>> var statustableDIV =
>> document.getElementById('tributaryinformationstatustable');
>> statustableDIV.innerHTML = tributaryInformationStatusTablePage;
>> statusinitDIV.appendChild(statustableDIV);
>> toolsStatusBar.setText("~(^.^)~ Viewing Tributary Status
>> Information");
>> }
>>
>> We've been surfing a lot of Internet sources the past weeks in trying to
>> find the answer, but as of the moment we have found no success. So any
>> enlightening insights would be most welcome.
>>
>> Yours truly:
>>
>> Julius Sempio
>> Department of Geodetic Engineering
>> University of the Philippines
>>
>> _______________________________________________ Users mailing list
>> Users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/openlayers-users
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120529/98daf13b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 330.gif
Type: image/gif
Size: 96 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120529/98daf13b/attachment-0001.gif>
More information about the Users
mailing list