Adjust volume measurements for web mercator

pull/767/head
Piero Toffanin 2019-12-10 12:40:41 -05:00
rodzic 769ca3cfe6
commit f80173b9c9
2 zmienionych plików z 10 dodań i 4 usunięć

Wyświetl plik

@ -1,6 +1,6 @@
import os
import json
import math
from rest_framework import serializers
from rest_framework import status
from rest_framework.response import Response
@ -47,7 +47,13 @@ class TaskVolume(TaskView):
output = result.get('output', '')
cols = output.split(':')
if len(cols) == 7:
return Response({'volume': str(abs(float(cols[6])))}, status=status.HTTP_200_OK)
# Correct scale measurement for web mercator
# https://gis.stackexchange.com/questions/93332/calculating-distance-scale-factor-by-latitude-for-mercator#93335
latitude = task.dsm_extent.centroid[1]
scale_factor = (math.cos(math.radians(latitude))) ** 2
volume = abs(float(cols[6]) * scale_factor)
return Response({'volume': str(volume)}, status=status.HTTP_200_OK)
else:
raise GrassEngineException(output)
except GrassEngineException as e:

Wyświetl plik

@ -11,7 +11,7 @@ v.buffer -s --overwrite input=polygon_area type=area output=region distance=1 mi
r.external input=${dsm_file} output=dsm --overwrite
# Set Grass region to vector bbox
g.region vector=region
g.region vector=region res=0.01
# Create a mask to speed up computation
r.mask vect=region
@ -26,7 +26,7 @@ v.surf.rst --overwrite input=polygon_points zcolumn=height elevation=dsm_below_p
r.mapcalc expression='pile_height_above_dsm=dsm-dsm_below_pile' --overwrite
# Set region to polygon area to calculate volume
g.region vect=polygon_area
g.region vect=polygon_area res=0.01
# Volume output from difference
r.volume -f input=pile_height_above_dsm