601 lines
19 KiB
Diff
601 lines
19 KiB
Diff
These two patches are already applied upstream.
|
|
https://patch-diff.githubusercontent.com/raw/opengribs/XyGrib/pull/289.patch
|
|
|
|
removing cmake/FindPROJ4.cmake removed since it didn't apply cleanly.
|
|
|
|
From 95aa7b47bfe83ee276806acd8ce08867fd7a28d9 Mon Sep 17 00:00:00 2001
|
|
From: Fyleo <fyleo45@gmail.com>
|
|
Date: Tue, 7 Sep 2021 18:10:39 +0200
|
|
Subject: [PATCH 1/2] port to PROJ 8.0 API
|
|
|
|
---
|
|
CMakeLists.txt | 14 +++----
|
|
cmake/FindPROJ4.cmake | 77 ----------------------------------
|
|
cmake/FindPROJ8.cmake | 76 +++++++++++++++++++++++++++++++++
|
|
src/CMakeLists.txt | 2 +-
|
|
src/map/Projection.h | 7 +---
|
|
src/map/Projection_libproj.cpp | 30 ++++++-------
|
|
6 files changed, 101 insertions(+), 105 deletions(-)
|
|
delete mode 100644 cmake/FindPROJ4.cmake
|
|
create mode 100644 cmake/FindPROJ8.cmake
|
|
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index b066a044..77633a21 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -122,22 +122,22 @@ find_path(OPENJPEG_INCLUDE_DIR
|
|
include_directories(${OPENJPEG_INCLUDE_DIR})
|
|
|
|
if(NOT WIN32)
|
|
- include(cmake/FindPROJ4.cmake)
|
|
- if(NOT PROJ4_FOUND)
|
|
- message(FATAL_ERROR "PROJ.4 library not found!")
|
|
+ include(cmake/FindPROJ8.cmake)
|
|
+ if(NOT PROJ8_FOUND)
|
|
+ message(FATAL_ERROR "PROJ.8 library not found!")
|
|
endif()
|
|
- include_directories(${PROJ4_INCLUDE_DIRS})
|
|
+ include_directories(${PROJ8_INCLUDE_DIRS})
|
|
endif()
|
|
if(WIN32)
|
|
- find_library(PROJ4_LIBRARIES
|
|
+ find_library(PROJ8_LIBRARIES
|
|
NAME "libproj.a"
|
|
PATHS
|
|
$ENV{EXTERNLIBS}/lib
|
|
/opt/lib
|
|
REQUIRED
|
|
)
|
|
- find_path(PROJ4_INCLUDE_DIRS
|
|
- NAMES "proj_api.h"
|
|
+ find_path(PROJ8_INCLUDE_DIRS
|
|
+ NAMES "proj.h"
|
|
PATHS
|
|
$ENV{EXTERNLIBS}/include
|
|
/opt/include
|
|
diff --git a/cmake/FindPROJ8.cmake b/cmake/FindPROJ8.cmake
|
|
new file mode 100644
|
|
index 00000000..33470ac2
|
|
--- /dev/null
|
|
+++ b/cmake/FindPROJ8.cmake
|
|
@@ -0,0 +1,76 @@
|
|
+# - Find PROJ8
|
|
+# Find the PROJ8 includes and library
|
|
+#
|
|
+# PROJ8_INCLUDE_DIR - Where to find PROJ8 includes
|
|
+# PROJ8_LIBRARIES - List of libraries when using PROJ8
|
|
+# PROJ8_FOUND - True if PROJ8 was found
|
|
+
|
|
+IF(PROJ8_INCLUDE_DIR)
|
|
+ SET(PROJ8_FIND_QUIETLY TRUE)
|
|
+ENDIF(PROJ8_INCLUDE_DIR)
|
|
+
|
|
+FIND_PATH(PROJ8_INCLUDE_DIR "proj.h"
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}/include
|
|
+ $ENV{EXTERNLIBS}/PROJ8/include
|
|
+ ~/Library/Frameworks/include
|
|
+ /Library/Frameworks/include
|
|
+ /usr/local/include
|
|
+ /usr/include
|
|
+ /sw/include # Fink
|
|
+ /opt/local/include # DarwinPorts
|
|
+ /opt/csw/include # Blastwave
|
|
+ /opt/include
|
|
+ DOC "PROJ8 - Headers"
|
|
+)
|
|
+
|
|
+SET(PROJ8_NAMES PROJ8 proj proj_8_0)
|
|
+SET(PROJ8_DBG_NAMES PROJ8D projD proj_8_0_1)
|
|
+
|
|
+FIND_LIBRARY(PROJ8_LIBRARY NAMES ${PROJ8_NAMES}
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}
|
|
+ $ENV{EXTERNLIBS}/PROJ8
|
|
+ ~/Library/Frameworks
|
|
+ /Library/Frameworks
|
|
+ /usr/local
|
|
+ /usr
|
|
+ /sw
|
|
+ /opt/local
|
|
+ /opt/csw
|
|
+ /opt
|
|
+ PATH_SUFFIXES lib lib64
|
|
+ DOC "PROJ8 - Library"
|
|
+)
|
|
+
|
|
+INCLUDE(FindPackageHandleStandardArgs)
|
|
+
|
|
+IF(MSVC)
|
|
+ # VisualStudio needs a debug version
|
|
+ FIND_LIBRARY(PROJ8_LIBRARY_DEBUG NAMES ${PROJ8_DBG_NAMES}
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}/PROJ8/lib
|
|
+ DOC "PROJ8 - Library (Debug)"
|
|
+ )
|
|
+
|
|
+ IF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
|
|
+ SET(PROJ8_LIBRARIES optimized ${PROJ8_LIBRARY} debug ${PROJ8_LIBRARY_DEBUG})
|
|
+ ENDIF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
|
|
+
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
|
|
+
|
|
+ MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
|
|
+
|
|
+ELSE(MSVC)
|
|
+ # rest of the world
|
|
+ SET(PROJ8_LIBRARIES ${PROJ8_LIBRARY})
|
|
+
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
|
|
+
|
|
+ MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
|
|
+
|
|
+ENDIF(MSVC)
|
|
+
|
|
+IF(PROJ8_FOUND)
|
|
+ SET(PROJ8_INCLUDE_DIRS ${PROJ8_INCLUDE_DIR})
|
|
+ENDIF(PROJ8_FOUND)
|
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
index 2e5dbde4..9c96d49f 100644
|
|
--- a/src/CMakeLists.txt
|
|
+++ b/src/CMakeLists.txt
|
|
@@ -118,7 +118,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/map ${MAP_GENERATED_HEADERS})
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/GUI ${GUI_GENERATED_HEADERS})
|
|
|
|
-target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ4_LIBRARIES} ${PNG_LIBRARIES})
|
|
+target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ8_LIBRARIES} ${PNG_LIBRARIES})
|
|
|
|
# Sanitizers, part 2/2
|
|
if ( CMAKE_VERSION VERSION_GREATER 3.4 )
|
|
diff --git a/src/map/Projection.h b/src/map/Projection.h
|
|
index b4ca7f5b..d482e0dd 100644
|
|
--- a/src/map/Projection.h
|
|
+++ b/src/map/Projection.h
|
|
@@ -21,10 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#include <QObject>
|
|
#include <cstdio>
|
|
|
|
-#ifndef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
-#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
-#endif
|
|
-#include "proj_api.h"
|
|
+#include "proj.h"
|
|
|
|
class Projection : public QObject
|
|
{
|
|
@@ -141,7 +138,7 @@ class Projection_libproj : public Projection
|
|
int getProjection() {return currentProj;}
|
|
|
|
private :
|
|
- projPJ libProj;
|
|
+ PJ * libProj;
|
|
int currentProj;
|
|
};
|
|
|
|
diff --git a/src/map/Projection_libproj.cpp b/src/map/Projection_libproj.cpp
|
|
index 1dcbd540..0299714e 100644
|
|
--- a/src/map/Projection_libproj.cpp
|
|
+++ b/src/map/Projection_libproj.cpp
|
|
@@ -93,9 +93,9 @@ void Projection_libproj::setProjection(int code)
|
|
params[nbpar++] = "no_defs";
|
|
params[nbpar++] = "over"; // allow longitude > 180°
|
|
// XXX ouch pj_init
|
|
- libProj = pj_init(nbpar, (char **)params);
|
|
+ libProj = proj_create_argv(PJ_DEFAULT_CTX, nbpar, (char **)params);
|
|
if (!libProj)
|
|
- printf("proj error: %s\n", pj_strerrno(pj_errno));
|
|
+ printf("proj error: %s\n", proj_errno_string(proj_errno(libProj)));
|
|
assert(libProj);
|
|
currentProj = code;
|
|
// libProj->over = 1; // allow longitude > 180°
|
|
@@ -106,23 +106,23 @@ void Projection_libproj::setProjection(int code)
|
|
Projection_libproj::~Projection_libproj()
|
|
{
|
|
if (libProj != nullptr) {
|
|
- pj_free(libProj);
|
|
+ proj_destroy(libProj);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
|
|
{
|
|
- projUV data, res;
|
|
+ PJ_COORD data, res;
|
|
if (y <= -90.0)
|
|
y = -90.0+1e-5;
|
|
if (y >= 90.0)
|
|
y = 90.0-1e-5;
|
|
- data.v = y * DEG_TO_RAD;
|
|
- data.u = x * DEG_TO_RAD;
|
|
- res = pj_fwd(data, libProj);
|
|
- *i = (int) (W/2.0 + scale * (res.u/111319.0-CX) + 0.5);
|
|
- *j = (int) (H/2.0 - scale * (res.v/111319.0-CY) + 0.5);
|
|
+ data.uv.v = y;
|
|
+ data.uv.u = x;
|
|
+ res = proj_trans(libProj, PJ_FWD, data);
|
|
+ *i = (int) (W/2.0 + scale * (res.uv.u/111319.0-CX) + 0.5);
|
|
+ *j = (int) (H/2.0 - scale * (res.uv.v/111319.0-CY) + 0.5);
|
|
//printf("PROJ map2screen (%f %f) -> (%3d %3d)\n", x,y, *i,*j);
|
|
}
|
|
|
|
@@ -130,12 +130,12 @@ void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
|
|
//-------------------------------------------------------------------------------
|
|
void Projection_libproj::screen2map(int i, int j, double *x, double *y) const
|
|
{
|
|
- projUV data, res;
|
|
- data.u = ((i-W/2.0)/scale+ CX)*111319.0 ;
|
|
- data.v = ((H/2.0-j)/scale+ CY)*111319.0 ;
|
|
- res = pj_inv(data, libProj);
|
|
- *x = (double)(res.u*RAD_TO_DEG);
|
|
- *y = (double)(res.v*RAD_TO_DEG);
|
|
+ PJ_COORD data, res;
|
|
+ data.uv.u = ((i-W/2.0)/scale+ CX)*111319.0 ;
|
|
+ data.uv.v = ((H/2.0-j)/scale+ CY)*111319.0 ;
|
|
+ res = proj_trans(libProj, PJ_INV, data);
|
|
+ *x = (double)(res.uv.u);
|
|
+ *y = (double)(res.uv.v);
|
|
//printf("PROJ screen2map (%3d %3d) -> (%f %f)\n", i,j, *x,*y);
|
|
}
|
|
//--------------------------------------------------------------
|
|
|
|
From 720a2db307f5c93c0079f9811a3c35cfe8bb12f5 Mon Sep 17 00:00:00 2001
|
|
From: didier <didier@users.sourceforge.net>
|
|
Date: Mon, 24 Jan 2022 13:13:42 +0100
|
|
Subject: [PATCH 2/2] Use new libproj API if available
|
|
|
|
---
|
|
CMakeLists.txt | 12 ++---
|
|
cmake/FindPROJ.cmake | 96 ++++++++++++++++++++++++++++++++++
|
|
cmake/FindPROJ8.cmake | 76 ---------------------------
|
|
src/CMakeLists.txt | 2 +-
|
|
src/map/Projection.h | 9 ++++
|
|
src/map/Projection_libproj.cpp | 32 +++++++++++-
|
|
6 files changed, 143 insertions(+), 84 deletions(-)
|
|
create mode 100644 cmake/FindPROJ.cmake
|
|
delete mode 100644 cmake/FindPROJ8.cmake
|
|
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index 77633a21..358a87a2 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -122,21 +122,21 @@ find_path(OPENJPEG_INCLUDE_DIR
|
|
include_directories(${OPENJPEG_INCLUDE_DIR})
|
|
|
|
if(NOT WIN32)
|
|
- include(cmake/FindPROJ8.cmake)
|
|
- if(NOT PROJ8_FOUND)
|
|
- message(FATAL_ERROR "PROJ.8 library not found!")
|
|
+ include(cmake/FindPROJ.cmake)
|
|
+ if(NOT PROJ_FOUND)
|
|
+ message(FATAL_ERROR "PROJ library not found!")
|
|
endif()
|
|
- include_directories(${PROJ8_INCLUDE_DIRS})
|
|
+ include_directories(${PROJ_INCLUDE_DIRS})
|
|
endif()
|
|
if(WIN32)
|
|
- find_library(PROJ8_LIBRARIES
|
|
+ find_library(PROJ_LIBRARIES
|
|
NAME "libproj.a"
|
|
PATHS
|
|
$ENV{EXTERNLIBS}/lib
|
|
/opt/lib
|
|
REQUIRED
|
|
)
|
|
- find_path(PROJ8_INCLUDE_DIRS
|
|
+ find_path(PROJ_INCLUDE_DIRS
|
|
NAMES "proj.h"
|
|
PATHS
|
|
$ENV{EXTERNLIBS}/include
|
|
diff --git a/cmake/FindPROJ.cmake b/cmake/FindPROJ.cmake
|
|
new file mode 100644
|
|
index 00000000..33b53000
|
|
--- /dev/null
|
|
+++ b/cmake/FindPROJ.cmake
|
|
@@ -0,0 +1,96 @@
|
|
+# - Find PROJ
|
|
+# Find the PROJ includes and library
|
|
+#
|
|
+# PROJ_INCLUDE_DIR - Where to find PROJ includes
|
|
+# PROJ_LIBRARIES - List of libraries when using PROJ
|
|
+# PROJ_FOUND - True if PROJ was found
|
|
+
|
|
+IF(PROJ_INCLUDE_DIR)
|
|
+ SET(PROJ_FIND_QUIETLY TRUE)
|
|
+ENDIF(PROJ_INCLUDE_DIR)
|
|
+
|
|
+FIND_PATH(PROJ_INCLUDE_DIR "proj.h"
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}/include
|
|
+ $ENV{EXTERNLIBS}/PROJ/include
|
|
+ ~/Library/Frameworks/include
|
|
+ /Library/Frameworks/include
|
|
+ /usr/local/include
|
|
+ /usr/include
|
|
+ /sw/include # Fink
|
|
+ /opt/local/include # DarwinPorts
|
|
+ /opt/csw/include # Blastwave
|
|
+ /opt/include
|
|
+ DOC "PROJ - Headers"
|
|
+)
|
|
+
|
|
+IF(PROJ_INCLUDE_DIR)
|
|
+ SET(PROJ_NAMES PROJ proj proj_8_0)
|
|
+ SET(PROJ_DBG_NAMES PROJD projD proj_8_0_1)
|
|
+ELSE(PROJ_INCLUDE_DIR)
|
|
+ FIND_PATH(PROJ_INCLUDE_DIR "proj_api.h"
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}/include
|
|
+ $ENV{EXTERNLIBS}/PROJ/include
|
|
+ ~/Library/Frameworks/include
|
|
+ /Library/Frameworks/include
|
|
+ /usr/local/include
|
|
+ /usr/include
|
|
+ /sw/include # Fink
|
|
+ /opt/local/include # DarwinPorts
|
|
+ /opt/csw/include # Blastwave
|
|
+ /opt/include
|
|
+ DOC "PROJ - Headers"
|
|
+ )
|
|
+ ADD_DEFINITIONS(-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1)
|
|
+ SET(PROJ_NAMES PROJ proj proj_4_9)
|
|
+ SET(PROJ_DBG_NAMES PROJD projD proj_4_9_D)
|
|
+ENDIF(PROJ_INCLUDE_DIR)
|
|
+
|
|
+FIND_LIBRARY(PROJ_LIBRARY NAMES ${PROJ_NAMES}
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}
|
|
+ $ENV{EXTERNLIBS}/PROJ
|
|
+ ~/Library/Frameworks
|
|
+ /Library/Frameworks
|
|
+ /usr/local
|
|
+ /usr
|
|
+ /sw
|
|
+ /opt/local
|
|
+ /opt/csw
|
|
+ /opt
|
|
+ PATH_SUFFIXES lib lib64
|
|
+ DOC "PROJ - Library"
|
|
+)
|
|
+
|
|
+INCLUDE(FindPackageHandleStandardArgs)
|
|
+
|
|
+IF(MSVC)
|
|
+ # VisualStudio needs a debug version
|
|
+ FIND_LIBRARY(PROJ_LIBRARY_DEBUG NAMES ${PROJ_DBG_NAMES}
|
|
+ PATHS
|
|
+ $ENV{EXTERNLIBS}/PROJ/lib
|
|
+ DOC "PROJ - Library (Debug)"
|
|
+ )
|
|
+
|
|
+ IF(PROJ_LIBRARY_DEBUG AND PROJ_LIBRARY)
|
|
+ SET(PROJ_LIBRARIES optimized ${PROJ_LIBRARY} debug ${PROJ_LIBRARY_DEBUG})
|
|
+ ENDIF(PROJ_LIBRARY_DEBUG AND PROJ_LIBRARY)
|
|
+
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ DEFAULT_MSG PROJ_LIBRARY PROJ_LIBRARY_DEBUG PROJ_INCLUDE_DIR)
|
|
+
|
|
+ MARK_AS_ADVANCED(PROJ_LIBRARY PROJ_LIBRARY_DEBUG PROJ_INCLUDE_DIR)
|
|
+
|
|
+ELSE(MSVC)
|
|
+ # rest of the world
|
|
+ SET(PROJ_LIBRARIES ${PROJ_LIBRARY})
|
|
+
|
|
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ DEFAULT_MSG PROJ_LIBRARY PROJ_INCLUDE_DIR)
|
|
+
|
|
+ MARK_AS_ADVANCED(PROJ_LIBRARY PROJ_INCLUDE_DIR)
|
|
+
|
|
+ENDIF(MSVC)
|
|
+
|
|
+IF(PROJ_FOUND)
|
|
+ SET(PROJ_INCLUDE_DIRS ${PROJ_INCLUDE_DIR})
|
|
+ENDIF(PROJ_FOUND)
|
|
diff --git a/cmake/FindPROJ8.cmake b/cmake/FindPROJ8.cmake
|
|
deleted file mode 100644
|
|
index 33470ac2..00000000
|
|
--- a/cmake/FindPROJ8.cmake
|
|
+++ /dev/null
|
|
@@ -1,76 +0,0 @@
|
|
-# - Find PROJ8
|
|
-# Find the PROJ8 includes and library
|
|
-#
|
|
-# PROJ8_INCLUDE_DIR - Where to find PROJ8 includes
|
|
-# PROJ8_LIBRARIES - List of libraries when using PROJ8
|
|
-# PROJ8_FOUND - True if PROJ8 was found
|
|
-
|
|
-IF(PROJ8_INCLUDE_DIR)
|
|
- SET(PROJ8_FIND_QUIETLY TRUE)
|
|
-ENDIF(PROJ8_INCLUDE_DIR)
|
|
-
|
|
-FIND_PATH(PROJ8_INCLUDE_DIR "proj.h"
|
|
- PATHS
|
|
- $ENV{EXTERNLIBS}/include
|
|
- $ENV{EXTERNLIBS}/PROJ8/include
|
|
- ~/Library/Frameworks/include
|
|
- /Library/Frameworks/include
|
|
- /usr/local/include
|
|
- /usr/include
|
|
- /sw/include # Fink
|
|
- /opt/local/include # DarwinPorts
|
|
- /opt/csw/include # Blastwave
|
|
- /opt/include
|
|
- DOC "PROJ8 - Headers"
|
|
-)
|
|
-
|
|
-SET(PROJ8_NAMES PROJ8 proj proj_8_0)
|
|
-SET(PROJ8_DBG_NAMES PROJ8D projD proj_8_0_1)
|
|
-
|
|
-FIND_LIBRARY(PROJ8_LIBRARY NAMES ${PROJ8_NAMES}
|
|
- PATHS
|
|
- $ENV{EXTERNLIBS}
|
|
- $ENV{EXTERNLIBS}/PROJ8
|
|
- ~/Library/Frameworks
|
|
- /Library/Frameworks
|
|
- /usr/local
|
|
- /usr
|
|
- /sw
|
|
- /opt/local
|
|
- /opt/csw
|
|
- /opt
|
|
- PATH_SUFFIXES lib lib64
|
|
- DOC "PROJ8 - Library"
|
|
-)
|
|
-
|
|
-INCLUDE(FindPackageHandleStandardArgs)
|
|
-
|
|
-IF(MSVC)
|
|
- # VisualStudio needs a debug version
|
|
- FIND_LIBRARY(PROJ8_LIBRARY_DEBUG NAMES ${PROJ8_DBG_NAMES}
|
|
- PATHS
|
|
- $ENV{EXTERNLIBS}/PROJ8/lib
|
|
- DOC "PROJ8 - Library (Debug)"
|
|
- )
|
|
-
|
|
- IF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
|
|
- SET(PROJ8_LIBRARIES optimized ${PROJ8_LIBRARY} debug ${PROJ8_LIBRARY_DEBUG})
|
|
- ENDIF(PROJ8_LIBRARY_DEBUG AND PROJ8_LIBRARY)
|
|
-
|
|
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
|
|
-
|
|
- MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_LIBRARY_DEBUG PROJ8_INCLUDE_DIR)
|
|
-
|
|
-ELSE(MSVC)
|
|
- # rest of the world
|
|
- SET(PROJ8_LIBRARIES ${PROJ8_LIBRARY})
|
|
-
|
|
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ8 DEFAULT_MSG PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
|
|
-
|
|
- MARK_AS_ADVANCED(PROJ8_LIBRARY PROJ8_INCLUDE_DIR)
|
|
-
|
|
-ENDIF(MSVC)
|
|
-
|
|
-IF(PROJ8_FOUND)
|
|
- SET(PROJ8_INCLUDE_DIRS ${PROJ8_INCLUDE_DIR})
|
|
-ENDIF(PROJ8_FOUND)
|
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
index 9c96d49f..d1c42f95 100644
|
|
--- a/src/CMakeLists.txt
|
|
+++ b/src/CMakeLists.txt
|
|
@@ -118,7 +118,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util)
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/map ${MAP_GENERATED_HEADERS})
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/GUI ${GUI_GENERATED_HEADERS})
|
|
|
|
-target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ8_LIBRARIES} ${PNG_LIBRARIES})
|
|
+target_link_libraries(${CMAKE_PROJECT_NAME} g2clib gui util map ${LIBNOVA_LIBRARY} ${OPENJPEG_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${Qt5Xml_LIBRARIES} ${Qt5PrintSupport_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${PROJ_LIBRARIES} ${PNG_LIBRARIES})
|
|
|
|
# Sanitizers, part 2/2
|
|
if ( CMAKE_VERSION VERSION_GREATER 3.4 )
|
|
diff --git a/src/map/Projection.h b/src/map/Projection.h
|
|
index d482e0dd..9ac13426 100644
|
|
--- a/src/map/Projection.h
|
|
+++ b/src/map/Projection.h
|
|
@@ -20,8 +20,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#define PROJECTION_H
|
|
#include <QObject>
|
|
#include <cstdio>
|
|
+//#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+#include "proj_api.h"
|
|
+#else
|
|
#include "proj.h"
|
|
+#endif
|
|
|
|
class Projection : public QObject
|
|
{
|
|
@@ -138,7 +143,11 @@ class Projection_libproj : public Projection
|
|
int getProjection() {return currentProj;}
|
|
|
|
private :
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ projPJ libProj;
|
|
+#else
|
|
PJ * libProj;
|
|
+#endif
|
|
int currentProj;
|
|
};
|
|
|
|
diff --git a/src/map/Projection_libproj.cpp b/src/map/Projection_libproj.cpp
|
|
index 0299714e..e2ea525c 100644
|
|
--- a/src/map/Projection_libproj.cpp
|
|
+++ b/src/map/Projection_libproj.cpp
|
|
@@ -92,10 +92,15 @@ void Projection_libproj::setProjection(int code)
|
|
params[nbpar++] = "ellps=WGS84";
|
|
params[nbpar++] = "no_defs";
|
|
params[nbpar++] = "over"; // allow longitude > 180°
|
|
- // XXX ouch pj_init
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ libProj = pj_init(nbpar, (char **)params);
|
|
+ if (!libProj)
|
|
+ printf("proj error: %s\n", pj_strerrno(pj_errno));
|
|
+#else
|
|
libProj = proj_create_argv(PJ_DEFAULT_CTX, nbpar, (char **)params);
|
|
if (!libProj)
|
|
printf("proj error: %s\n", proj_errno_string(proj_errno(libProj)));
|
|
+#endif
|
|
assert(libProj);
|
|
currentProj = code;
|
|
// libProj->over = 1; // allow longitude > 180°
|
|
@@ -106,23 +111,39 @@ void Projection_libproj::setProjection(int code)
|
|
Projection_libproj::~Projection_libproj()
|
|
{
|
|
if (libProj != nullptr) {
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ pj_free(libProj);
|
|
+#else
|
|
proj_destroy(libProj);
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
|
|
{
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ projUV data, res;
|
|
+#else
|
|
PJ_COORD data, res;
|
|
+#endif
|
|
if (y <= -90.0)
|
|
y = -90.0+1e-5;
|
|
if (y >= 90.0)
|
|
y = 90.0-1e-5;
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ data.v = y * DEG_TO_RAD;
|
|
+ data.u = x * DEG_TO_RAD;
|
|
+ res = pj_fwd(data, libProj);
|
|
+ *i = (int) (W/2.0 + scale * (res.u/111319.0-CX) + 0.5);
|
|
+ *j = (int) (H/2.0 - scale * (res.v/111319.0-CY) + 0.5);
|
|
+#else
|
|
data.uv.v = y;
|
|
data.uv.u = x;
|
|
res = proj_trans(libProj, PJ_FWD, data);
|
|
*i = (int) (W/2.0 + scale * (res.uv.u/111319.0-CX) + 0.5);
|
|
*j = (int) (H/2.0 - scale * (res.uv.v/111319.0-CY) + 0.5);
|
|
+#endif
|
|
//printf("PROJ map2screen (%f %f) -> (%3d %3d)\n", x,y, *i,*j);
|
|
}
|
|
|
|
@@ -130,12 +151,21 @@ void Projection_libproj::map2screen(double x, double y, int *i, int *j) const
|
|
//-------------------------------------------------------------------------------
|
|
void Projection_libproj::screen2map(int i, int j, double *x, double *y) const
|
|
{
|
|
+#ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
|
|
+ projUV data, res;
|
|
+ data.u = ((i-W/2.0)/scale+ CX)*111319.0 ;
|
|
+ data.v = ((H/2.0-j)/scale+ CY)*111319.0 ;
|
|
+ res = pj_inv(data, libProj);
|
|
+ *x = (double)(res.u*RAD_TO_DEG);
|
|
+ *y = (double)(res.v*RAD_TO_DEG);
|
|
+#else
|
|
PJ_COORD data, res;
|
|
data.uv.u = ((i-W/2.0)/scale+ CX)*111319.0 ;
|
|
data.uv.v = ((H/2.0-j)/scale+ CY)*111319.0 ;
|
|
res = proj_trans(libProj, PJ_INV, data);
|
|
*x = (double)(res.uv.u);
|
|
*y = (double)(res.uv.v);
|
|
+#endif
|
|
//printf("PROJ screen2map (%3d %3d) -> (%f %f)\n", i,j, *x,*y);
|
|
}
|
|
//--------------------------------------------------------------
|