Compare commits

...

7 Commits

Author SHA1 Message Date
Mathieu Pellerin
1fc67c6009 Add libspatialindex port to pin version 2.0 until further notice 2025-10-01 18:15:21 +10:00
Nyall Dawson
070c13e4ab Block building on spatialindex >= 2.1
See https://github.com/libspatialindex/libspatialindex/issues/276,
this is silently giving misleading results
2025-10-01 18:15:21 +10:00
Nyall Dawson
01c86da6a4 Catch some more exceptions from libspatialindex 2025-10-01 18:15:21 +10:00
Nyall Dawson
6a3cd87737 Fixing missing arg marker when exception occurs in spatial index 2025-10-01 18:15:21 +10:00
Nyall Dawson
4cab2daf50 Update src/gui/processing/qgsprocessingoutputdestinationwidget.cpp 2025-10-01 16:03:18 +10:00
Alexander Bruy
33cba935d2 change default folder for Processing outputs to $HOME/processing to make
it more visible and accessible
2025-10-01 16:03:18 +10:00
Alexander Bruy
62830e0412 provide default value when reading output folder setting to generate
destination path in Processing (fix #61965)
2025-10-01 16:03:18 +10:00
8 changed files with 90 additions and 11 deletions

View File

@ -451,6 +451,9 @@ if(WITH_CORE)
message(STATUS "Found GDAL: ${GDAL_VERSION} ${GDAL_DIR}") message(STATUS "Found GDAL: ${GDAL_VERSION} ${GDAL_DIR}")
find_package(EXPAT REQUIRED) find_package(EXPAT REQUIRED)
find_package(Spatialindex REQUIRED) find_package(Spatialindex REQUIRED)
if(SPATIALINDEX_VERSION VERSION_GREATER_EQUAL "2.1")
message(FATAL_ERROR "Cannot build QGIS using libspatialindex >= 2.1, see https://github.com/libspatialindex/libspatialindex/issues/276")
endif()
find_package(LibZip REQUIRED) find_package(LibZip REQUIRED)
set (WITH_INTERNAL_NLOHMANN_JSON ${PREFER_INTERNAL_LIBS} CACHE BOOL "Determines whether the vendored copy of nlohmann-json should be used") set (WITH_INTERNAL_NLOHMANN_JSON ${PREFER_INTERNAL_LIBS} CACHE BOOL "Determines whether the vendored copy of nlohmann-json should be used")
find_package(nlohmann_json REQUIRED) find_package(nlohmann_json REQUIRED)

View File

@ -8,7 +8,7 @@
# SPATIALINDEX_FOUND = system has Spatialindex lib # SPATIALINDEX_FOUND = system has Spatialindex lib
# SPATIALINDEX_LIBRARY = full path to the Spatialindex library # SPATIALINDEX_LIBRARY = full path to the Spatialindex library
# SPATIALINDEX_INCLUDE_DIR = where to find headers # SPATIALINDEX_INCLUDE_DIR = where to find headers
# # SPATIALINDEX_VERSION = version number
FIND_PATH(SPATIALINDEX_INCLUDE_DIR spatialindex/SpatialIndex.h PATHS FIND_PATH(SPATIALINDEX_INCLUDE_DIR spatialindex/SpatialIndex.h PATHS
@ -32,8 +32,21 @@ IF (SPATIALINDEX_INCLUDE_DIR AND SPATIALINDEX_LIBRARY)
ENDIF (SPATIALINDEX_INCLUDE_DIR AND SPATIALINDEX_LIBRARY) ENDIF (SPATIALINDEX_INCLUDE_DIR AND SPATIALINDEX_LIBRARY)
IF (SPATIALINDEX_FOUND) IF (SPATIALINDEX_FOUND)
set(spatialindex_version_file
"${SPATIALINDEX_INCLUDE_DIR}/spatialindex/Version.h")
file(STRINGS "${spatialindex_version_file}" spatialindex_version_major REGEX "#define SIDX_VERSION_MAJOR")
list(GET spatialindex_version_major 0 spatialindex_version_major)
string(REGEX MATCH "[0-9]+" SPATIALINDEX_VERSION_MAJOR ${spatialindex_version_major} )
file(STRINGS "${spatialindex_version_file}" spatialindex_version_minor REGEX "#define SIDX_VERSION_MINOR")
list(GET spatialindex_version_minor 0 spatialindex_version_minor)
string(REGEX MATCH "[0-9]+" SPATIALINDEX_VERSION_MINOR ${spatialindex_version_minor} )
file(STRINGS "${spatialindex_version_file}" spatialindex_version_rev REGEX "#define SIDX_VERSION_REV")
list(GET spatialindex_version_rev 0 spatialindex_version_rev)
string(REGEX MATCH "[0-9]+" SPATIALINDEX_VERSION_REV ${spatialindex_version_rev} )
set(SPATIALINDEX_VERSION "${SPATIALINDEX_VERSION_MAJOR}.${SPATIALINDEX_VERSION_MINOR}.${SPATIALINDEX_VERSION_REV}")
IF (NOT SPATIALINDEX_FIND_QUIETLY) IF (NOT SPATIALINDEX_FIND_QUIETLY)
MESSAGE(STATUS "Found Spatialindex: ${SPATIALINDEX_LIBRARY}") MESSAGE(STATUS "Found Spatialindex: ${SPATIALINDEX_LIBRARY} (${SPATIALINDEX_VERSION})")
ENDIF (NOT SPATIALINDEX_FIND_QUIETLY) ENDIF (NOT SPATIALINDEX_FIND_QUIETLY)
ELSE (SPATIALINDEX_FOUND) ELSE (SPATIALINDEX_FOUND)
IF (SPATIALINDEX_FIND_REQUIRED) IF (SPATIALINDEX_FIND_REQUIRED)

View File

@ -41,7 +41,7 @@ def userFolder():
def defaultOutputFolder(): def defaultOutputFolder():
folder = os.path.join(userFolder(), "outputs") folder = os.path.join(QDir.homePath(), "processing")
if not QDir(folder).exists(): if not QDir(folder).exists():
QDir().mkpath(folder) QDir().mkpath(folder)

View File

@ -77,16 +77,16 @@ class QgsGenericSpatialIndex
catch ( Tools::Exception &e ) catch ( Tools::Exception &e )
{ {
Q_UNUSED( e ) Q_UNUSED( e )
QgsDebugError( QStringLiteral( "Tools::Exception caught: " ).arg( e.what().c_str() ) ); QgsDebugError( QStringLiteral( "Tools::Exception caught when inserting data to QgsGenericSpatialIndex: %1" ).arg( e.what().c_str() ) );
} }
catch ( const std::exception &e ) catch ( const std::exception &e )
{ {
Q_UNUSED( e ) Q_UNUSED( e )
QgsDebugError( QStringLiteral( "std::exception caught: " ).arg( e.what() ) ); QgsDebugError( QStringLiteral( "std::exception caught when inserting data to QgsGenericSpatialIndex: %1" ).arg( e.what() ) );
} }
catch ( ... ) catch ( ... )
{ {
QgsDebugError( QStringLiteral( "unknown spatial index exception caught" ) ); QgsDebugError( QStringLiteral( "unknown spatial index exception caught when inserting data to QgsGenericSpatialIndex" ) );
} }
return false; return false;
@ -126,7 +126,25 @@ class QgsGenericSpatialIndex
const SpatialIndex::Region r = QgsSpatialIndexUtils::rectangleToRegion( bounds ); const SpatialIndex::Region r = QgsSpatialIndexUtils::rectangleToRegion( bounds );
const QMutexLocker locker( &mMutex ); const QMutexLocker locker( &mMutex );
try
{
mRTree->intersectsWithQuery( r, visitor ); mRTree->intersectsWithQuery( r, visitor );
}
catch ( Tools::Exception &e )
{
Q_UNUSED( e )
QgsDebugError( QStringLiteral( "Tools::Exception caught in QgsGenericSpatialIndex::intersects: %1" ).arg( e.what().c_str() ) );
}
catch ( const std::exception &e )
{
Q_UNUSED( e )
QgsDebugError( QStringLiteral( "std::exception caught in QgsGenericSpatialIndex::intersects: %1" ).arg( e.what() ) );
}
catch ( ... )
{
QgsDebugError( QStringLiteral( "unknown spatial index exception caught in QgsGenericSpatialIndex::intersects" ) );
}
return true; return true;
} }

View File

@ -457,16 +457,16 @@ bool QgsSpatialIndex::addFeature( QgsFeatureId id, const QgsRectangle &bounds )
catch ( Tools::Exception &e ) catch ( Tools::Exception &e )
{ {
Q_UNUSED( e ) Q_UNUSED( e )
QgsDebugError( QStringLiteral( "Tools::Exception caught: " ).arg( e.what().c_str() ) ); QgsDebugError( QStringLiteral( "Tools::Exception caught when adding feature to QgsSpatialIndex: %1" ).arg( e.what().c_str() ) );
} }
catch ( const std::exception &e ) catch ( const std::exception &e )
{ {
Q_UNUSED( e ) Q_UNUSED( e )
QgsDebugError( QStringLiteral( "std::exception caught: " ).arg( e.what() ) ); QgsDebugError( QStringLiteral( "std::exception caught when adding feature to QgsSpatialIndex: %1" ).arg( e.what() ) );
} }
catch ( ... ) catch ( ... )
{ {
QgsDebugError( QStringLiteral( "unknown spatial index exception caught" ) ); QgsDebugError( QStringLiteral( "unknown spatial index exception caught when adding feature to QgsSpatialIndex" ) );
} }
return false; return false;

View File

@ -25,6 +25,7 @@
#include "qgsprocessingcontext.h" #include "qgsprocessingcontext.h"
#include "qgsprocessingalgorithm.h" #include "qgsprocessingalgorithm.h"
#include "qgsfieldmappingwidget.h" #include "qgsfieldmappingwidget.h"
#include "qgsapplication.h"
#include <QMenu> #include <QMenu>
#include <QFileDialog> #include <QFileDialog>
#include <QInputDialog> #include <QInputDialog>
@ -175,7 +176,7 @@ QVariant QgsProcessingLayerOutputDestinationWidget::value() const
if ( folder == '.' ) if ( folder == '.' )
{ {
// output name does not include a folder - use default // output name does not include a folder - use default
QString defaultFolder = settings.value( QStringLiteral( "/Processing/Configuration/OUTPUTS_FOLDER" ) ).toString(); QString defaultFolder = settings.value( QStringLiteral( "/Processing/Configuration/OUTPUTS_FOLDER" ), QStringLiteral( "%1/processing" ).arg( QDir::homePath() ) ).toString();
key = QDir( defaultFolder ).filePath( key ); key = QDir( defaultFolder ).filePath( key );
} }
} }

View File

@ -0,0 +1,26 @@
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO libspatialindex/libspatialindex
REF "${VERSION}"
SHA512 a508a9ed4019641bdaaa53533505531f3db440b046a9c7d9f78ed480293200c51796c2d826a6bb9b4f9543d60bb0fef9e4c885ec3f09326cfa4d2fb81c1593aa
HEAD_REF master
)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
WINDOWS_USE_MSBUILD
OPTIONS
-DCMAKE_DEBUG_POSTFIX=d
-DSIDX_BUILD_TESTS:BOOL=OFF
)
vcpkg_cmake_install()
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/${PORT})
vcpkg_fixup_pkgconfig()
vcpkg_copy_pdbs()
#Debug
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
# Handle copyright
file(INSTALL "${SOURCE_PATH}/COPYING" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)

View File

@ -0,0 +1,18 @@
{
"name": "libspatialindex",
"version": "2.0.0",
"description": "C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API.",
"homepage": "http://libspatialindex.github.com",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
},
"zlib"
]
}