kopia lustrzana https://github.com/OpenDroneMap/WebODM
Fix GeoJSON axis swap, invalidate tile cache during crop
rodzic
23432f11e6
commit
a5c272a0b1
|
@ -124,20 +124,13 @@ def export_raster(input, output, progress_callback=None, **opts):
|
|||
|
||||
if crop_wkt is not None:
|
||||
crop = GEOSGeometry(crop_wkt)
|
||||
crop.srid = 4326
|
||||
|
||||
crop_geojson = os.path.join(path_base, "crop.geojson")
|
||||
raster_vrt = os.path.join(path_base, "raster.vrt")
|
||||
|
||||
os.makedirs(os.path.dirname(crop_geojson), exist_ok=True)
|
||||
with open(crop_geojson, "w", encoding="utf-8") as f:
|
||||
j = json.loads(crop.geojson)
|
||||
|
||||
# Swap lat/lon
|
||||
for i, c in enumerate(j["coordinates"]):
|
||||
j["coordinates"][i] = [[y,x] for x,y in c]
|
||||
|
||||
f.write(json.dumps(j))
|
||||
f.write(crop.geojson)
|
||||
|
||||
subprocess.check_output(["gdalwarp", "-cutline", crop_geojson,
|
||||
'--config', 'GDALWARP_DENSIFY_CUTLINE', 'NO',
|
||||
|
|
|
@ -185,7 +185,7 @@ class CropButton extends React.Component {
|
|||
deletePolygon = (opts = {}) => {
|
||||
if (this.polygon){
|
||||
const remove = () => {
|
||||
this.group.removeLayer(this.polygon);
|
||||
if (this.polygon !== null) this.group.removeLayer(this.polygon);
|
||||
this.polygon = null;
|
||||
if (opts.triggerEvents) this.props.onPolygonChange(null);
|
||||
};
|
||||
|
|
|
@ -330,10 +330,11 @@ class Map extends React.Component {
|
|||
}
|
||||
|
||||
params.size = TILESIZE;
|
||||
params.cache = Math.floor(Math.random() * 1000000); // cache bust
|
||||
if (meta.task.crop) params.crop = 1;
|
||||
tileUrl = Utils.buildUrlWithQuery(tileUrl, params);
|
||||
}else{
|
||||
let params = { size: TILESIZE };
|
||||
let params = { size: TILESIZE, cache: Math.floor(Math.random() * 1000000) };
|
||||
if (meta.task.crop) params.crop = 1;
|
||||
tileUrl = Utils.buildUrlWithQuery(tileUrl, params);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,8 @@ def calc_contours(dem, epsg, interval, output_format, simplify, zfactor = 1, cro
|
|||
import glob
|
||||
import json
|
||||
from webodm import settings
|
||||
|
||||
from django.contrib.gis.geos import GEOSGeometry
|
||||
|
||||
ext = ""
|
||||
if output_format == "GeoJSON":
|
||||
ext = "json"
|
||||
|
@ -46,7 +47,7 @@ def calc_contours(dem, epsg, interval, output_format, simplify, zfactor = 1, cro
|
|||
crop_geojson = os.path.join(tmpdir, "crop.geojson")
|
||||
dem_vrt = os.path.join(tmpdir, "dem.vrt")
|
||||
with open(crop_geojson, "w", encoding="utf-8") as f:
|
||||
f.write(crop)
|
||||
f.write(GEOSGeometry(crop).geojson)
|
||||
p = subprocess.Popen([gdalwarp_bin, "-cutline", crop_geojson,
|
||||
'--config', 'GDALWARP_DENSIFY_CUTLINE', 'NO',
|
||||
'-crop_to_cutline', '-dstnodata', '-9999', '-of', 'VRT',
|
||||
|
@ -126,7 +127,7 @@ class TaskContoursGenerate(TaskView):
|
|||
simplify = float(request.data.get('simplify', 0.01))
|
||||
zfactor = float(request.data.get('zfactor', 1))
|
||||
|
||||
celery_task_id = run_function_async(calc_contours, dem, epsg, interval, format, simplify, zfactor, task.crop.geojson if task.crop is not None else None).task_id
|
||||
celery_task_id = run_function_async(calc_contours, dem, epsg, interval, format, simplify, zfactor, task.crop.wkt if task.crop is not None else None).task_id
|
||||
return Response({'celery_task_id': celery_task_id}, status=status.HTTP_200_OK)
|
||||
except ContoursException as e:
|
||||
return Response({'error': str(e)}, status=status.HTTP_200_OK)
|
||||
|
|
|
@ -12,6 +12,7 @@ def detect(orthophoto, model, classes=None, crop=None, progress_callback=None):
|
|||
import shutil
|
||||
import tempfile
|
||||
from webodm import settings
|
||||
from django.contrib.gis.geos import GEOSGeometry
|
||||
|
||||
try:
|
||||
from geodeep import detect as gdetect, models
|
||||
|
@ -32,7 +33,7 @@ def detect(orthophoto, model, classes=None, crop=None, progress_callback=None):
|
|||
crop_geojson = os.path.join(tmpdir, "crop.geojson")
|
||||
ortho_vrt = os.path.join(tmpdir, "orthophoto.vrt")
|
||||
with open(crop_geojson, "w", encoding="utf-8") as f:
|
||||
f.write(crop)
|
||||
f.write(GEOSGeometry(crop).geojson)
|
||||
p = subprocess.Popen([gdalwarp_bin, "-cutline", crop_geojson,
|
||||
'--config', 'GDALWARP_DENSIFY_CUTLINE', 'NO',
|
||||
'-crop_to_cutline', '-of', 'VRT',
|
||||
|
@ -72,7 +73,7 @@ class TaskObjDetect(TaskView):
|
|||
return Response({'error': 'Invalid model'}, status=status.HTTP_200_OK)
|
||||
|
||||
model_id, classes = model_map[model]
|
||||
celery_task_id = run_function_async(detect, orthophoto, model_id, classes, task.crop.geojson if task.crop is not None else None, with_progress=True).task_id
|
||||
celery_task_id = run_function_async(detect, orthophoto, model_id, classes, task.crop.wkt if task.crop is not None else None, with_progress=True).task_id
|
||||
|
||||
return Response({'celery_task_id': celery_task_id}, status=status.HTTP_200_OK)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "WebODM",
|
||||
"version": "2.9.0",
|
||||
"version": "2.9.1",
|
||||
"description": "User-friendly, extendable application and API for processing aerial imagery.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
|
Ładowanie…
Reference in New Issue