Hello everyone,
I am new to ODK programming and need some help. We use ODK for environmental monitoring with indigenous community groups. It has proven very useful as the visualization and data storage makes a lot of manual steps a lot easier.
One part of our environmental water monitoring are stream flow calculations. This is a somewhat complex combination of calculations, which often confuse the people, so having a form that would do all the calculations, while they only need to input the data that is asked of them, would make life a lot easier and help avoid errors in the calculations.
So I have been thinking that with programing the formulas in the form one could facilitate this process. The problem is that I am new to programing and making the necessary calculations is above my knowledge. I hope you can help.
What do I need:
To calculate the stream flow one needs to

Measure the distance of one river bank to the other perpendicular to the flow of the river. This gives you a decimal value.

Measure the depth at various points along the same line. Up to 10 depth measurements should be made possible, depending on the width of the river. This is done to calculate the average depth of the river at that part. So I am thinking of a repeat question here, but unsure how one can add all the results from the repeat question to sum up to calculate an average. Eventually the sum of all measurements (decimal) should be divided by the number of depth measurements (integer) taken to get the average depth.

The next step is to calculate the area of the river at that point. For this one needs to calculate the width times average depth (thus important to use the same units, i.e. meters). The output gives us square meters (decimal).

The next step is to measure from the point where we have taken the measurements a certain distance upstream. We recommend 10  15 meters. This is done to mark a second point, where a floating objects time from point 1 to point 2 is measured to measure the velocity of the water. So the user should put in the distance (decimal) at this point.

Now the next step is similar to the measurements in point 2. We take up to 10 measurements of the time (decimal) a floating object needs to pass from point 1 to point 2. I am thinking of a repeat question here. The sum of all times than needs to be divided by the amount of measurements (integer) to calculate the average time. This is done so many times to reduce the margin of error.

Next we calculate the velocity of the water. So we need to divide the distance that we measured at point 4 by the average time of the water from point 5. The output gives us a value in meters per second (decimal).

To calculate the stream flow we now multiply the velocity from point 6 by the area calculated in point 3. The output gives us a value of cubic meters per second (decimal).

As water flows faster on the surface than on the bottom of a river we need to correct for this difference. The correction factor is 0,8 for rocky river beds; 0,9 for sandy river beds and 0,85 for mixed ones or unsure. So this should be something like a choose_one input that triggers a multiplication of the result from point 7 times the correction factor.

Ultimately, we need to do a conversion of the corrected stream flow in cubic meters to liters, as stream flow is portrayed in liters per second. This is easy. We simply need to multiply the result from point 8 by 1000. Voila.
Further explanation on calcualting the stream flow with the float method can be found here: http://www.waterboards.ca.gov/water_issues/programs/swamp/docs/cwt/guidance/4113.pdf
Any help will be greatly appreciated.
This should all be doable since you can bound the number of depth
measurements.
Since there are only up to 10 depth measurements, I would recommend
"unrolling" the repeat group and have 10 copies of the questions on depth
measurements. Ditto for the flow rate measurements.
Then there will not be any repeat group in your form, and your computations
will be much easier to figure out.
If this becomes too cumbersome "unrolled" then you will need to understand
XPath expressions
https://opendatakit.org/help/formdesign/#xpath_expressions
ยทยทยท
On Wed, Jul 13, 2016 at 1:57 PM, wrote:
Hello everyone,
I am new to ODK programming and need some help. We use ODK for
environmental monitoring with indigenous community groups. It has proven
very useful as the visualization and data storage makes a lot of manual
steps a lot easier.
One part of our environmental water monitoring are stream flow
calculations. This is a somewhat complex combination of calculations, which
often confuse the people, so having a form that would do all the
calculations, while they only need to input the data that is asked of them,
would make life a lot easier and help avoid errors in the calculations.
So I have been thinking that with programing the formulas in the form one
could facilitate this process. The problem is that I am new to programing
and making the necessary calculations is above my knowledge. I hope you can
help.
What do I need:
To calculate the stream flow one needs to

Measure the distance of one river bank to the other perpendicular to
the flow of the river. This gives you a decimal value.

Measure the depth at various points along the same line. Up to 10 depth
measurements should be made possible, depending on the width of the river.
This is done to calculate the average depth of the river at that part. So I
am thinking of a repeat question here, but unsure how one can add all the
results from the repeat question to sum up to calculate an average.
Eventually the sum of all measurements (decimal) should be divided by the
number of depth measurements (integer) taken to get the average depth.

The next step is to calculate the area of the river at that point. For
this one needs to calculate the width times average depth (thus important
to use the same units, i.e. meters). The output gives us square meters
(decimal).

The next step is to measure from the point where we have taken the
measurements a certain distance upstream. We recommend 10  15 meters. This
is done to mark a second point, where a floating objects time from point 1
to point 2 is measured to measure the velocity of the water. So the user
should put in the distance (decimal) at this point.

Now the next step is similar to the measurements in point 2. We take up
to 10 measurements of the time (decimal) a floating object needs to pass
from point 1 to point 2. I am thinking of a repeat question here. The sum
of all times than needs to be divided by the amount of measurements
(integer) to calculate the average time. This is done so many times to
reduce the margin of error.

Next we calculate the velocity of the water. So we need to divide the
distance that we measured at point 4 by the average time of the water from
point 5. The output gives us a value in meters per second (decimal).

To calculate the stream flow we now multiply the velocity from point 6
by the area calculated in point 3. The output gives us a value of cubic
meters per second (decimal).

As water flows faster on the surface than on the bottom of a river we
need to correct for this difference. The correction factor is 0,8 for rocky
river beds; 0,9 for sandy river beds and 0,85 for mixed ones or unsure. So
this should be something like a choose_one input that triggers a
multiplication of the result from point 7 times the correction factor.

Ultimately, we need to do a conversion of the corrected stream flow in
cubic meters to liters, as stream flow is portrayed in liters per second.
This is easy. We simply need to multiply the result from point 8 by 1000.
Voila.
Further explanation on calcualting the stream flow with the float method
can be found here:
http://www.waterboards.ca.gov/water_issues/programs/swamp/docs/cwt/guidance/4113.pdf
Any help will be greatly appreciated.

Post: opendatakit@googlegroups.com
Unsubscribe: opendatakit+unsubscribe@googlegroups.com
Options: http://groups.google.com/group/opendatakit?hl=en
You received this message because you are subscribed to the Google Groups
"ODK Community" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to opendatakit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mitch Sundt
Software Engineer
University of Washington
mitchellsundt@gmail.com