kopia lustrzana https://github.com/OpenDroneMap/WebODM
Adjust volume measurements for web mercator
rodzic
769ca3cfe6
commit
f80173b9c9
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue