mirror of
https://github.com/qgis/QGIS.git
synced 2025-06-25 00:04:25 -04:00
Compare commits
51 Commits
final-3_44
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
73e4ff232b | ||
|
2e24086cab | ||
|
688afa6fff | ||
|
b97c1f9d2d | ||
|
5142e4995a | ||
|
cd3a1d0710 | ||
|
48e1efebfc | ||
|
9241880300 | ||
|
47576382ad | ||
|
1a019895c9 | ||
|
f24d4c4f3d | ||
|
d74364a15b | ||
|
47f6704229 | ||
|
27b6e08dd5 | ||
|
199373300c | ||
|
a9fc79985d | ||
|
cbdf99ccf0 | ||
|
46b04269cf | ||
|
5a09c69587 | ||
|
3323834409 | ||
|
0da56166d8 | ||
|
c1396bd314 | ||
|
9456e8a529 | ||
|
e069fd7731 | ||
|
9d0f20dae9 | ||
|
fa7681b449 | ||
|
5ba6b15383 | ||
|
124a285e77 | ||
|
c734e1fad3 | ||
|
807a784d36 | ||
|
06487d711e | ||
|
fc7e16fe43 | ||
|
c275af3086 | ||
|
ae2cf3bed9 | ||
|
55a1e38843 | ||
|
89e165dfdf | ||
|
1dbeb61e0b | ||
|
5d0056940c | ||
|
7cb5ca3bd2 | ||
|
9d459a0c40 | ||
|
1637be8a37 | ||
|
efaafaecdc | ||
|
944a3d5898 | ||
|
e69e8341d6 | ||
|
fb2e3c41ee | ||
|
3c3a505508 | ||
|
148c1ce34d | ||
|
030387a838 | ||
|
b1c56b434c | ||
|
a43423807b | ||
|
0fa98ae3d6 |
@ -59,7 +59,7 @@ endif()
|
|||||||
#############################################################
|
#############################################################
|
||||||
# Project and version
|
# Project and version
|
||||||
set(CPACK_PACKAGE_VERSION_MAJOR "3")
|
set(CPACK_PACKAGE_VERSION_MAJOR "3")
|
||||||
set(CPACK_PACKAGE_VERSION_MINOR "43")
|
set(CPACK_PACKAGE_VERSION_MINOR "99")
|
||||||
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
||||||
set(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
|
set(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
|
||||||
set(RELEASE_NAME "Master")
|
set(RELEASE_NAME "Master")
|
||||||
|
18
INSTALL.md
18
INSTALL.md
@ -179,14 +179,16 @@ sudo apt-get update
|
|||||||
|
|
||||||
|Distribution|Install command for packages|
|
|Distribution|Install command for packages|
|
||||||
|------------|----------------------------|
|
|------------|----------------------------|
|
||||||
| bullseye | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-sip python3-sip-dev python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5keychain-dev qtbase5-dev qtbase5-private-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| bookworm | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| bookworm | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| trixie | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| jammy | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| jammy | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pdal pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| kinetic | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| kinetic | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| lunar | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| lunar | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| mantic | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| mantic | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| noble | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| noble | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
| sid | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pandoc pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
| oracular | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
|
| plucky | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
|
| sid | ``apt-get install bison build-essential ca-certificates ccache cmake cmake-curses-gui dh-python expect flex flip gdal-bin git graphviz grass-dev libdraco-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build nlohmann-json3-dev ocl-icd-opencl-dev opencl-headers pandoc pkgconf poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dev python3-gdal python3-jinja2 python3-lxml python3-mock python3-nose2 python3-owslib python3-packaging python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtmultimedia python3-pyqt5.qtpositioning python3-pyqt5.qtserialport python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqtbuild python3-sip python3-termcolor python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qtbase5-dev qtbase5-private-dev qtkeychain-qt5-dev qtmultimedia5-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools sip-tools spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` |
|
||||||
|
|
||||||
(extracted from the control.in file in `debian/`)
|
(extracted from the control.in file in `debian/`)
|
||||||
|
|
||||||
|
16
debian/changelog
vendored
16
debian/changelog
vendored
@ -1,8 +1,20 @@
|
|||||||
qgis (3.43.0) UNRELEASED; urgency=medium
|
qgis (3.99.0) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* New development version 3.99 after branch of 3.44
|
||||||
|
|
||||||
|
-- Jürgen E. Fischer <jef@norbit.de> Fri, 20 Jun 2025 14:09:51 +0200
|
||||||
|
|
||||||
|
qgis (3.44.0) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Release of 3.44.0
|
||||||
|
|
||||||
|
-- Jürgen E. Fischer <jef@norbit.de> Fri, 20 Jun 2025 14:09:51 +0200
|
||||||
|
|
||||||
|
qgis (3.43.0) unstable; urgency=medium
|
||||||
|
|
||||||
* New development version 3.43 after branch of 3.42
|
* New development version 3.43 after branch of 3.42
|
||||||
|
|
||||||
-- Jürgen E. Fischer <jef@norbit.de> Fri, 21 Feb 2025 14:15:07 +0100
|
-- Jürgen E. Fischer <jef@norbit.de> Fri, 20 Jun 2025 14:08:50 +0200
|
||||||
|
|
||||||
qgis (3.40.4) unstable; urgency=medium
|
qgis (3.40.4) unstable; urgency=medium
|
||||||
|
|
||||||
|
3
debian/control
vendored
3
debian/control
vendored
@ -27,7 +27,6 @@ Build-Depends:
|
|||||||
libqt5serialport5-dev,
|
libqt5serialport5-dev,
|
||||||
libqt5sql5-sqlite,
|
libqt5sql5-sqlite,
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
libqt5webkit5-dev,
|
|
||||||
libqt5xmlpatterns5-dev,
|
libqt5xmlpatterns5-dev,
|
||||||
libqwt-qt5-dev,
|
libqwt-qt5-dev,
|
||||||
libspatialindex-dev,
|
libspatialindex-dev,
|
||||||
@ -271,7 +270,6 @@ Depends:
|
|||||||
libqgispython2.99.0 (= ${binary:Version}),
|
libqgispython2.99.0 (= ${binary:Version}),
|
||||||
libqscintilla2-qt5-dev,
|
libqscintilla2-qt5-dev,
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
libqt5webkit5-dev,
|
|
||||||
libqwt-qt5-dev,
|
libqwt-qt5-dev,
|
||||||
libsqlite3-dev,
|
libsqlite3-dev,
|
||||||
pyqt5-dev-tools,
|
pyqt5-dev-tools,
|
||||||
@ -374,7 +372,6 @@ Depends:
|
|||||||
python3-pyqt5.qtpositioning,
|
python3-pyqt5.qtpositioning,
|
||||||
python3-pyqt5.qtsql,
|
python3-pyqt5.qtsql,
|
||||||
python3-pyqt5.qtsvg,
|
python3-pyqt5.qtsvg,
|
||||||
python3-pyqt5.qtwebkit,
|
|
||||||
python3-sip,
|
python3-sip,
|
||||||
python3-yaml,
|
python3-yaml,
|
||||||
${python3:Depends},
|
${python3:Depends},
|
||||||
|
6
debian/control.in
vendored
6
debian/control.in
vendored
@ -27,7 +27,7 @@ Build-Depends:
|
|||||||
libqt5serialport5-dev,
|
libqt5serialport5-dev,
|
||||||
libqt5sql5-sqlite,
|
libqt5sql5-sqlite,
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
libqt5webkit5-dev,
|
#bookworm jammy kinetic lunar mantic noble oracular# libqt5webkit5-dev,
|
||||||
libqt5xmlpatterns5-dev,
|
libqt5xmlpatterns5-dev,
|
||||||
libdraco-dev,
|
libdraco-dev,
|
||||||
qtmultimedia5-dev,
|
qtmultimedia5-dev,
|
||||||
@ -288,7 +288,7 @@ Depends:
|
|||||||
libqgispython{QGIS_ABI} (= ${binary:Version}),
|
libqgispython{QGIS_ABI} (= ${binary:Version}),
|
||||||
libqscintilla2-qt5-dev,
|
libqscintilla2-qt5-dev,
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
libqt5webkit5-dev,
|
#bookworm jammy kinetic lunar mantic noble oracular# libqt5webkit5-dev,
|
||||||
libqwt-qt5-dev,
|
libqwt-qt5-dev,
|
||||||
libsqlite3-dev,
|
libsqlite3-dev,
|
||||||
nlohmann-json3-dev,
|
nlohmann-json3-dev,
|
||||||
@ -394,7 +394,7 @@ Depends:
|
|||||||
python3-pyqt5.qtmultimedia,
|
python3-pyqt5.qtmultimedia,
|
||||||
python3-pyqt5.qtpositioning,
|
python3-pyqt5.qtpositioning,
|
||||||
python3-pyqt5.qtsvg,
|
python3-pyqt5.qtsvg,
|
||||||
python3-pyqt5.qtwebkit,
|
#bookworm jammy kinetic lunar mantic noble oracular# python3-pyqt5.qtwebkit,
|
||||||
python3-pyqt5.qtserialport,
|
python3-pyqt5.qtserialport,
|
||||||
python3-sip,
|
python3-sip,
|
||||||
python3-yaml,
|
python3-yaml,
|
||||||
|
5
debian/rules
vendored
5
debian/rules
vendored
@ -115,6 +115,11 @@ ifneq (,$(findstring ;$(GRASSVER);, ";7;8;"))
|
|||||||
-DGRASS_PREFIX$(GRASSVER)=/usr/lib/$(GRASS)
|
-DGRASS_PREFIX$(GRASSVER)=/usr/lib/$(GRASS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq (,$(filter $(DISTRIBUTION),sid trixie plucky))
|
||||||
|
CMAKE_OPTS += \
|
||||||
|
-DWITH_QTWEBKIT=FALSE
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq (,$(findstring $(DISTRIBUTION),"trixie sid kinetic lunar mantic noble oracular plucky"))
|
ifneq (,$(findstring $(DISTRIBUTION),"trixie sid kinetic lunar mantic noble oracular plucky"))
|
||||||
CMAKE_OPTS += -DGDAL_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libgdal.so
|
CMAKE_OPTS += -DGDAL_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libgdal.so
|
||||||
endif
|
endif
|
||||||
|
@ -33,6 +33,7 @@ the documentation</a> available.
|
|||||||
See \ref api_break for information about incompatible changes to API between releases.
|
See \ref api_break for information about incompatible changes to API between releases.
|
||||||
|
|
||||||
Earlier versions of the documentation are also available on the QGIS website:
|
Earlier versions of the documentation are also available on the QGIS website:
|
||||||
|
<a href="https://qgis.org/api/3.44">3.44</a>,
|
||||||
<a href="https://qgis.org/api/3.42">3.42</a>,
|
<a href="https://qgis.org/api/3.42">3.42</a>,
|
||||||
<a href="https://qgis.org/api/3.40">3.40 (LTR)</a>,
|
<a href="https://qgis.org/api/3.40">3.40 (LTR)</a>,
|
||||||
<a href="https://qgis.org/api/3.38">3.38</a>,
|
<a href="https://qgis.org/api/3.38">3.38</a>,
|
||||||
|
@ -339,6 +339,7 @@
|
|||||||
<file>themes/default/mActionKeyboardShortcuts.svg</file>
|
<file>themes/default/mActionKeyboardShortcuts.svg</file>
|
||||||
<file>themes/default/mActionLabel.svg</file>
|
<file>themes/default/mActionLabel.svg</file>
|
||||||
<file>themes/default/mActionLabeling.svg</file>
|
<file>themes/default/mActionLabeling.svg</file>
|
||||||
|
<file>themes/default/mActionLayers.svg</file>
|
||||||
<file>themes/default/mActionLocalCumulativeCutStretch.svg</file>
|
<file>themes/default/mActionLocalCumulativeCutStretch.svg</file>
|
||||||
<file>themes/default/mActionLocalHistogramStretch.svg</file>
|
<file>themes/default/mActionLocalHistogramStretch.svg</file>
|
||||||
<file>themes/default/mActionLockItems.svg</file>
|
<file>themes/default/mActionLockItems.svg</file>
|
||||||
|
1
images/themes/default/mActionLayers.svg
Normal file
1
images/themes/default/mActionLayers.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg height="24" viewBox="0 0 6.35 6.35" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="#eeeeec" stroke="#888a85" stroke-linecap="round" stroke-linejoin="round" stroke-width=".265"><path d="m.661 2.778h2.91v2.91h-2.909z"/><path d="m1.72 1.72h2.91v2.91h-2.91z"/><path d="m2.778.661h2.91v2.91h-2.91z"/></g></svg>
|
After Width: | Height: | Size: 318 B |
@ -37,6 +37,26 @@ QgsMapLayer.FlagTrustLayerMetadata = QgsMapLayer.ReadFlag.FlagTrustLayerMetadata
|
|||||||
QgsMapLayer.FlagReadExtentFromXml = QgsMapLayer.ReadFlag.FlagReadExtentFromXml
|
QgsMapLayer.FlagReadExtentFromXml = QgsMapLayer.ReadFlag.FlagReadExtentFromXml
|
||||||
QgsMapLayer.FlagForceReadOnly = QgsMapLayer.ReadFlag.FlagForceReadOnly
|
QgsMapLayer.FlagForceReadOnly = QgsMapLayer.ReadFlag.FlagForceReadOnly
|
||||||
QgsMapLayer.ReadFlags = lambda flags=0: QgsMapLayer.ReadFlag(flags)
|
QgsMapLayer.ReadFlags = lambda flags=0: QgsMapLayer.ReadFlag(flags)
|
||||||
|
# monkey patching scoped based enum
|
||||||
|
QgsMapLayer.SaveStyleResult.Success.__doc__ = "Both QML and SLD formats were successfully written to the database."
|
||||||
|
QgsMapLayer.SaveStyleResult.QmlGenerationFailed.__doc__ = "Generation of the QML failed, and was not written to the database."
|
||||||
|
QgsMapLayer.SaveStyleResult.SldGenerationFailed.__doc__ = "Generation of the SLD failed, and was not written to the database."
|
||||||
|
QgsMapLayer.SaveStyleResult.DatabaseWriteFailed.__doc__ = "An error occurred when attempting to write to the database."
|
||||||
|
QgsMapLayer.SaveStyleResult.__doc__ = """Results of saving styles to database.
|
||||||
|
|
||||||
|
.. versionadded:: 4.0
|
||||||
|
|
||||||
|
* ``Success``: Both QML and SLD formats were successfully written to the database.
|
||||||
|
* ``QmlGenerationFailed``: Generation of the QML failed, and was not written to the database.
|
||||||
|
* ``SldGenerationFailed``: Generation of the SLD failed, and was not written to the database.
|
||||||
|
* ``DatabaseWriteFailed``: An error occurred when attempting to write to the database.
|
||||||
|
|
||||||
|
"""
|
||||||
|
# --
|
||||||
|
QgsMapLayer.SaveStyleResult.baseClass = QgsMapLayer
|
||||||
|
QgsMapLayer.SaveStyleResults = lambda flags=0: QgsMapLayer.SaveStyleResult(flags)
|
||||||
|
QgsMapLayer.SaveStyleResults.baseClass = QgsMapLayer
|
||||||
|
SaveStyleResults = QgsMapLayer # dirty hack since SIP seems to introduce the flags in module
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,9 @@
|
|||||||
|
|
||||||
typedef QVector<QgsPointXY> QgsPolylineXY;
|
typedef QVector<QgsPointXY> QgsPolylineXY;
|
||||||
|
|
||||||
typedef QgsPointSequence QgsPolyline;
|
typedef QVector<QgsPoint> QgsPolyline;
|
||||||
|
|
||||||
|
typedef QVector<QVector< QgsPoint >> QgsMultiPolyline;
|
||||||
|
|
||||||
typedef QVector<QVector<QgsPointXY>> QgsPolygonXY;
|
typedef QVector<QVector<QgsPointXY>> QgsPolygonXY;
|
||||||
|
|
||||||
|
@ -825,12 +825,24 @@ Deletes a style from the database
|
|||||||
- msgError: a descriptive error message if any occurs
|
- msgError: a descriptive error message if any occurs
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
enum class SaveStyleResult
|
||||||
|
{
|
||||||
|
Success,
|
||||||
|
QmlGenerationFailed,
|
||||||
|
SldGenerationFailed,
|
||||||
|
DatabaseWriteFailed,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef QFlags<QgsMapLayer::SaveStyleResult> SaveStyleResults;
|
||||||
|
|
||||||
|
|
||||||
virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
||||||
bool useAsDefault, const QString &uiFileContent,
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
QString &msgError /Out/,
|
QString &msgError /Out/,
|
||||||
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) /Deprecated="Since 4.0. Use saveStyleToDatabaseV2() instead."/;
|
||||||
%Docstring
|
%Docstring
|
||||||
Saves named and sld style of the layer to the style table in the db.
|
Saves QML and SLD representations of the layer's style to a table in the
|
||||||
|
database.
|
||||||
|
|
||||||
:param name: Style name
|
:param name: Style name
|
||||||
:param description: A description of the style
|
:param description: A description of the style
|
||||||
@ -847,9 +859,33 @@ Saves named and sld style of the layer to the style table in the db.
|
|||||||
Use :py:func:`QgsProviderRegistry.styleExists()` to test in advance if a style already exists and handle this appropriately
|
Use :py:func:`QgsProviderRegistry.styleExists()` to test in advance if a style already exists and handle this appropriately
|
||||||
in your client code.
|
in your client code.
|
||||||
|
|
||||||
:return: a descriptive error message if any occurs
|
:return: - msgError: a descriptive error message if any occurs
|
||||||
|
|
||||||
|
.. deprecated:: 4.0
|
||||||
|
|
||||||
|
Use :py:func:`~QgsMapLayer.saveStyleToDatabaseV2` instead.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
QgsMapLayer::SaveStyleResults saveStyleToDatabaseV2( const QString &name, const QString &description,
|
||||||
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
|
QString &msgError /Out/,
|
||||||
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
||||||
|
%Docstring
|
||||||
|
Saves QML and SLD representations of the layer's style to a table in the
|
||||||
|
database.
|
||||||
|
|
||||||
|
:param name: Style name
|
||||||
|
:param description: A description of the style
|
||||||
|
:param useAsDefault: Set to ``True`` if style should be used as the
|
||||||
|
default style for the layer
|
||||||
|
:param uiFileContent:
|
||||||
|
:param categories: the style categories to be saved.
|
||||||
|
|
||||||
|
:return: - flags representing whether QML or SLD storing was successful
|
||||||
|
- msgError: a descriptive error message if any occurs
|
||||||
|
|
||||||
|
.. versionadded:: 4.0
|
||||||
|
%End
|
||||||
|
|
||||||
|
|
||||||
virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag /Out/, bool loadFromLocalDb,
|
virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag /Out/, bool loadFromLocalDb,
|
||||||
|
@ -217,6 +217,8 @@ Creates an OGC expression XML element from the ``exp`` expression.
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* This file has been generated automatically from *
|
* This file has been generated automatically from *
|
||||||
* *
|
* *
|
||||||
|
@ -4938,205 +4938,205 @@ QgsGeographicCoordinateNumericFormat.sortKey: src/core/numericformats/qgscoordin
|
|||||||
QgsGeographicCoordinateNumericFormat.suggestSampleValue: src/core/numericformats/qgscoordinatenumericformat.h#L53
|
QgsGeographicCoordinateNumericFormat.suggestSampleValue: src/core/numericformats/qgscoordinatenumericformat.h#L53
|
||||||
QgsGeographicCoordinateNumericFormat.visibleName: src/core/numericformats/qgscoordinatenumericformat.h#L51
|
QgsGeographicCoordinateNumericFormat.visibleName: src/core/numericformats/qgscoordinatenumericformat.h#L51
|
||||||
QgsGeographicCoordinateNumericFormat: src/core/numericformats/qgscoordinatenumericformat.h#L28
|
QgsGeographicCoordinateNumericFormat: src/core/numericformats/qgscoordinatenumericformat.h#L28
|
||||||
QgsGeometry.Error.Error: src/core/geometry/qgsgeometry.h#L2760
|
QgsGeometry.Error.Error: src/core/geometry/qgsgeometry.h#L2777
|
||||||
QgsGeometry.Error.__repr__: src/core/geometry/qgsgeometry.h#L2783
|
QgsGeometry.Error.__repr__: src/core/geometry/qgsgeometry.h#L2800
|
||||||
QgsGeometry.Error.hasWhere: src/core/geometry/qgsgeometry.h#L2780
|
QgsGeometry.Error.hasWhere: src/core/geometry/qgsgeometry.h#L2797
|
||||||
QgsGeometry.Error.what: src/core/geometry/qgsgeometry.h#L2770
|
QgsGeometry.Error.what: src/core/geometry/qgsgeometry.h#L2787
|
||||||
QgsGeometry.Error.where: src/core/geometry/qgsgeometry.h#L2775
|
QgsGeometry.Error.where: src/core/geometry/qgsgeometry.h#L2792
|
||||||
QgsGeometry.Error: src/core/geometry/qgsgeometry.h#L2751
|
QgsGeometry.Error: src/core/geometry/qgsgeometry.h#L2768
|
||||||
QgsGeometry.QVariant: src/core/geometry/qgsgeometry.h#L3180
|
QgsGeometry.QVariant: src/core/geometry/qgsgeometry.h#L3197
|
||||||
QgsGeometry.QgsGeometry: src/core/geometry/qgsgeometry.h#L184
|
QgsGeometry.QgsGeometry: src/core/geometry/qgsgeometry.h#L201
|
||||||
QgsGeometry.__repr__: src/core/geometry/qgsgeometry.h#L2185
|
QgsGeometry.__repr__: src/core/geometry/qgsgeometry.h#L2202
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L930
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L947
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L948
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L965
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L966
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L983
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L982
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L999
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L939
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L956
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L957
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L974
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L975
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L992
|
||||||
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L914
|
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L931
|
||||||
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L921
|
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L938
|
||||||
QgsGeometry.addTopologicalPoint: src/core/geometry/qgsgeometry.h#L815
|
QgsGeometry.addTopologicalPoint: src/core/geometry/qgsgeometry.h#L832
|
||||||
QgsGeometry.adjacentVertices: src/core/geometry/qgsgeometry.h#L778
|
QgsGeometry.adjacentVertices: src/core/geometry/qgsgeometry.h#L795
|
||||||
QgsGeometry.angleAtVertex: src/core/geometry/qgsgeometry.h#L764
|
QgsGeometry.angleAtVertex: src/core/geometry/qgsgeometry.h#L781
|
||||||
QgsGeometry.applyDashPattern: src/core/geometry/qgsgeometry.h#L1372
|
QgsGeometry.applyDashPattern: src/core/geometry/qgsgeometry.h#L1389
|
||||||
QgsGeometry.area: src/core/geometry/qgsgeometry.h#L476
|
QgsGeometry.area: src/core/geometry/qgsgeometry.h#L493
|
||||||
QgsGeometry.asJson: src/core/geometry/qgsgeometry.h#L2204
|
QgsGeometry.asJson: src/core/geometry/qgsgeometry.h#L2221
|
||||||
QgsGeometry.asMultiPoint: src/core/geometry/qgsgeometry.h#L2418
|
QgsGeometry.asMultiPoint: src/core/geometry/qgsgeometry.h#L2435
|
||||||
QgsGeometry.asMultiPolygon: src/core/geometry/qgsgeometry.h#L2508
|
QgsGeometry.asMultiPolygon: src/core/geometry/qgsgeometry.h#L2525
|
||||||
QgsGeometry.asMultiPolyline: src/core/geometry/qgsgeometry.h#L2463
|
QgsGeometry.asMultiPolyline: src/core/geometry/qgsgeometry.h#L2480
|
||||||
QgsGeometry.asPoint: src/core/geometry/qgsgeometry.h#L2283
|
QgsGeometry.asPoint: src/core/geometry/qgsgeometry.h#L2300
|
||||||
QgsGeometry.asPolygon: src/core/geometry/qgsgeometry.h#L2375
|
QgsGeometry.asPolygon: src/core/geometry/qgsgeometry.h#L2392
|
||||||
QgsGeometry.asPolyline: src/core/geometry/qgsgeometry.h#L2330
|
QgsGeometry.asPolyline: src/core/geometry/qgsgeometry.h#L2347
|
||||||
QgsGeometry.asQPointF: src/core/geometry/qgsgeometry.h#L2538
|
QgsGeometry.asQPointF: src/core/geometry/qgsgeometry.h#L2555
|
||||||
QgsGeometry.asQPolygonF: src/core/geometry/qgsgeometry.h#L2551
|
QgsGeometry.asQPolygonF: src/core/geometry/qgsgeometry.h#L2568
|
||||||
QgsGeometry.asWkb: src/core/geometry/qgsgeometry.h#L2175
|
QgsGeometry.asWkb: src/core/geometry/qgsgeometry.h#L2192
|
||||||
QgsGeometry.asWkt: src/core/geometry/qgsgeometry.h#L2182
|
QgsGeometry.asWkt: src/core/geometry/qgsgeometry.h#L2199
|
||||||
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2626
|
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2643
|
||||||
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2627
|
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2644
|
||||||
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2640
|
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2657
|
||||||
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2641
|
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2658
|
||||||
QgsGeometry.boundingBox3D: src/core/geometry/qgsgeometry.h#L1206
|
QgsGeometry.boundingBox3D: src/core/geometry/qgsgeometry.h#L1223
|
||||||
QgsGeometry.boundingBox: src/core/geometry/qgsgeometry.h#L1199
|
QgsGeometry.boundingBox: src/core/geometry/qgsgeometry.h#L1216
|
||||||
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1447
|
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1464
|
||||||
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1457
|
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1474
|
||||||
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1544
|
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1561
|
||||||
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1557
|
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1574
|
||||||
QgsGeometry.centroid: src/core/geometry/qgsgeometry.h#L1686
|
QgsGeometry.centroid: src/core/geometry/qgsgeometry.h#L1703
|
||||||
QgsGeometry.clipped: src/core/geometry/qgsgeometry.h#L2022
|
QgsGeometry.clipped: src/core/geometry/qgsgeometry.h#L2039
|
||||||
QgsGeometry.closestSegmentWithContext: src/core/geometry/qgsgeometry.h#L907
|
QgsGeometry.closestSegmentWithContext: src/core/geometry/qgsgeometry.h#L924
|
||||||
QgsGeometry.closestVertex: src/core/geometry/qgsgeometry.h#L747
|
QgsGeometry.closestVertex: src/core/geometry/qgsgeometry.h#L764
|
||||||
QgsGeometry.closestVertexWithContext: src/core/geometry/qgsgeometry.h#L894
|
QgsGeometry.closestVertexWithContext: src/core/geometry/qgsgeometry.h#L911
|
||||||
QgsGeometry.collectGeometry: src/core/geometry/qgsgeometry.h#L330
|
QgsGeometry.collectGeometry: src/core/geometry/qgsgeometry.h#L347
|
||||||
QgsGeometry.combine: src/core/geometry/qgsgeometry.h#L2038
|
QgsGeometry.combine: src/core/geometry/qgsgeometry.h#L2055
|
||||||
QgsGeometry.compare: src/core/geometry/qgsgeometry.h#L3013
|
QgsGeometry.compare: src/core/geometry/qgsgeometry.h#L3030
|
||||||
QgsGeometry.concaveHull: src/core/geometry/qgsgeometry.h#L1816
|
QgsGeometry.concaveHull: src/core/geometry/qgsgeometry.h#L1833
|
||||||
QgsGeometry.constGet: src/core/geometry/qgsgeometry.h#L205
|
QgsGeometry.constGet: src/core/geometry/qgsgeometry.h#L222
|
||||||
QgsGeometry.constParts: src/core/geometry/qgsgeometry.h#L656
|
QgsGeometry.constParts: src/core/geometry/qgsgeometry.h#L673
|
||||||
QgsGeometry.constrainedDelaunayTriangulation: src/core/geometry/qgsgeometry.h#L1858
|
QgsGeometry.constrainedDelaunayTriangulation: src/core/geometry/qgsgeometry.h#L1875
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1462
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1479
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1469
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1486
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1480
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1497
|
||||||
QgsGeometry.convertGeometryCollectionToSubclass: src/core/geometry/qgsgeometry.h#L2613
|
QgsGeometry.convertGeometryCollectionToSubclass: src/core/geometry/qgsgeometry.h#L2630
|
||||||
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3167
|
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3184
|
||||||
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3174
|
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3191
|
||||||
QgsGeometry.convertToCurvedMultiType: src/core/geometry/qgsgeometry.h#L2591
|
QgsGeometry.convertToCurvedMultiType: src/core/geometry/qgsgeometry.h#L2608
|
||||||
QgsGeometry.convertToCurves: src/core/geometry/qgsgeometry.h#L1671
|
QgsGeometry.convertToCurves: src/core/geometry/qgsgeometry.h#L1688
|
||||||
QgsGeometry.convertToMultiType: src/core/geometry/qgsgeometry.h#L2574
|
QgsGeometry.convertToMultiType: src/core/geometry/qgsgeometry.h#L2591
|
||||||
QgsGeometry.convertToSingleType: src/core/geometry/qgsgeometry.h#L2602
|
QgsGeometry.convertToSingleType: src/core/geometry/qgsgeometry.h#L2619
|
||||||
QgsGeometry.convertToStraightSegment: src/core/geometry/qgsgeometry.h#L2847
|
QgsGeometry.convertToStraightSegment: src/core/geometry/qgsgeometry.h#L2864
|
||||||
QgsGeometry.convertToType: src/core/geometry/qgsgeometry.h#L2256
|
QgsGeometry.convertToType: src/core/geometry/qgsgeometry.h#L2273
|
||||||
QgsGeometry.convexHull: src/core/geometry/qgsgeometry.h#L1801
|
QgsGeometry.convexHull: src/core/geometry/qgsgeometry.h#L1818
|
||||||
QgsGeometry.createGeometryEngine: src/core/geometry/qgsgeometry.h#L3160
|
QgsGeometry.createGeometryEngine: src/core/geometry/qgsgeometry.h#L3177
|
||||||
QgsGeometry.createPolygonFromQPolygonF: src/core/geometry/qgsgeometry.h#L2956
|
QgsGeometry.createPolygonFromQPolygonF: src/core/geometry/qgsgeometry.h#L2973
|
||||||
QgsGeometry.createPolylineFromQPolygonF: src/core/geometry/qgsgeometry.h#L2947
|
QgsGeometry.createPolylineFromQPolygonF: src/core/geometry/qgsgeometry.h#L2964
|
||||||
QgsGeometry.createWedgeBuffer: src/core/geometry/qgsgeometry.h#L347
|
QgsGeometry.createWedgeBuffer: src/core/geometry/qgsgeometry.h#L364
|
||||||
QgsGeometry.createWedgeBufferFromAngles: src/core/geometry/qgsgeometry.h#L363
|
QgsGeometry.createWedgeBufferFromAngles: src/core/geometry/qgsgeometry.h#L380
|
||||||
QgsGeometry.crosses: src/core/geometry/qgsgeometry.h#L1535
|
QgsGeometry.crosses: src/core/geometry/qgsgeometry.h#L1552
|
||||||
QgsGeometry.delaunayTriangulation: src/core/geometry/qgsgeometry.h#L1844
|
QgsGeometry.delaunayTriangulation: src/core/geometry/qgsgeometry.h#L1861
|
||||||
QgsGeometry.deletePart: src/core/geometry/qgsgeometry.h#L2564
|
QgsGeometry.deletePart: src/core/geometry/qgsgeometry.h#L2581
|
||||||
QgsGeometry.deleteRing: src/core/geometry/qgsgeometry.h#L2558
|
QgsGeometry.deleteRing: src/core/geometry/qgsgeometry.h#L2575
|
||||||
QgsGeometry.deleteVertex: src/core/geometry/qgsgeometry.h#L846
|
QgsGeometry.deleteVertex: src/core/geometry/qgsgeometry.h#L863
|
||||||
QgsGeometry.densifyByCount: src/core/geometry/qgsgeometry.h#L1639
|
QgsGeometry.densifyByCount: src/core/geometry/qgsgeometry.h#L1656
|
||||||
QgsGeometry.densifyByDistance: src/core/geometry/qgsgeometry.h#L1654
|
QgsGeometry.densifyByDistance: src/core/geometry/qgsgeometry.h#L1671
|
||||||
QgsGeometry.difference: src/core/geometry/qgsgeometry.h#L2063
|
QgsGeometry.difference: src/core/geometry/qgsgeometry.h#L2080
|
||||||
QgsGeometry.disjoint: src/core/geometry/qgsgeometry.h#L1491
|
QgsGeometry.disjoint: src/core/geometry/qgsgeometry.h#L1508
|
||||||
QgsGeometry.distance: src/core/geometry/qgsgeometry.h#L500
|
QgsGeometry.distance: src/core/geometry/qgsgeometry.h#L517
|
||||||
QgsGeometry.distanceToVertex: src/core/geometry/qgsgeometry.h#L756
|
QgsGeometry.distanceToVertex: src/core/geometry/qgsgeometry.h#L773
|
||||||
QgsGeometry.draw: src/core/geometry/qgsgeometry.h#L2866
|
QgsGeometry.draw: src/core/geometry/qgsgeometry.h#L2883
|
||||||
QgsGeometry.equals: src/core/geometry/qgsgeometry.h#L414
|
QgsGeometry.equals: src/core/geometry/qgsgeometry.h#L431
|
||||||
QgsGeometry.extendLine: src/core/geometry/qgsgeometry.h#L1626
|
QgsGeometry.extendLine: src/core/geometry/qgsgeometry.h#L1643
|
||||||
QgsGeometry.extrude: src/core/geometry/qgsgeometry.h#L2079
|
QgsGeometry.extrude: src/core/geometry/qgsgeometry.h#L2096
|
||||||
QgsGeometry.forcePolygonClockwise: src/core/geometry/qgsgeometry.h#L2733
|
QgsGeometry.forcePolygonClockwise: src/core/geometry/qgsgeometry.h#L2750
|
||||||
QgsGeometry.forcePolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2745
|
QgsGeometry.forcePolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2762
|
||||||
QgsGeometry.forceRHR: src/core/geometry/qgsgeometry.h#L2721
|
QgsGeometry.forceRHR: src/core/geometry/qgsgeometry.h#L2738
|
||||||
QgsGeometry.frechetDistance: src/core/geometry/qgsgeometry.h#L709
|
QgsGeometry.frechetDistance: src/core/geometry/qgsgeometry.h#L726
|
||||||
QgsGeometry.frechetDistanceDensify: src/core/geometry/qgsgeometry.h#L733
|
QgsGeometry.frechetDistanceDensify: src/core/geometry/qgsgeometry.h#L750
|
||||||
QgsGeometry.fromBox3D: src/core/geometry/qgsgeometry.h#L326
|
QgsGeometry.fromBox3D: src/core/geometry/qgsgeometry.h#L343
|
||||||
QgsGeometry.fromMultiPointXY: src/core/geometry/qgsgeometry.h#L255
|
QgsGeometry.fromMultiPointXY: src/core/geometry/qgsgeometry.h#L272
|
||||||
QgsGeometry.fromMultiPolygonXY: src/core/geometry/qgsgeometry.h#L314
|
QgsGeometry.fromMultiPolygonXY: src/core/geometry/qgsgeometry.h#L331
|
||||||
QgsGeometry.fromMultiPolylineXY: src/core/geometry/qgsgeometry.h#L282
|
QgsGeometry.fromMultiPolylineXY: src/core/geometry/qgsgeometry.h#L299
|
||||||
QgsGeometry.fromPoint: src/core/geometry/qgsgeometry.h#L252
|
QgsGeometry.fromPoint: src/core/geometry/qgsgeometry.h#L269
|
||||||
QgsGeometry.fromPointXY: src/core/geometry/qgsgeometry.h#L245
|
QgsGeometry.fromPointXY: src/core/geometry/qgsgeometry.h#L262
|
||||||
QgsGeometry.fromPolygonXY: src/core/geometry/qgsgeometry.h#L309
|
QgsGeometry.fromPolygonXY: src/core/geometry/qgsgeometry.h#L326
|
||||||
QgsGeometry.fromPolyline: src/core/geometry/qgsgeometry.h#L277
|
QgsGeometry.fromPolyline: src/core/geometry/qgsgeometry.h#L294
|
||||||
QgsGeometry.fromPolylineXY: src/core/geometry/qgsgeometry.h#L267
|
QgsGeometry.fromPolylineXY: src/core/geometry/qgsgeometry.h#L284
|
||||||
QgsGeometry.fromQPointF: src/core/geometry/qgsgeometry.h#L2930
|
QgsGeometry.fromQPointF: src/core/geometry/qgsgeometry.h#L2947
|
||||||
QgsGeometry.fromQPolygonF: src/core/geometry/qgsgeometry.h#L2938
|
QgsGeometry.fromQPolygonF: src/core/geometry/qgsgeometry.h#L2955
|
||||||
QgsGeometry.fromRect: src/core/geometry/qgsgeometry.h#L317
|
QgsGeometry.fromRect: src/core/geometry/qgsgeometry.h#L334
|
||||||
QgsGeometry.fromWkb: src/core/geometry/qgsgeometry.h#L376
|
QgsGeometry.fromWkb: src/core/geometry/qgsgeometry.h#L393
|
||||||
QgsGeometry.fromWkt: src/core/geometry/qgsgeometry.h#L243
|
QgsGeometry.fromWkt: src/core/geometry/qgsgeometry.h#L260
|
||||||
QgsGeometry.get: src/core/geometry/qgsgeometry.h#L218
|
QgsGeometry.get: src/core/geometry/qgsgeometry.h#L235
|
||||||
QgsGeometry.hausdorffDistance: src/core/geometry/qgsgeometry.h#L674
|
QgsGeometry.hausdorffDistance: src/core/geometry/qgsgeometry.h#L691
|
||||||
QgsGeometry.hausdorffDistanceDensify: src/core/geometry/qgsgeometry.h#L693
|
QgsGeometry.hausdorffDistanceDensify: src/core/geometry/qgsgeometry.h#L710
|
||||||
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L792
|
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L809
|
||||||
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L806
|
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L823
|
||||||
QgsGeometry.interpolate: src/core/geometry/qgsgeometry.h#L1979
|
QgsGeometry.interpolate: src/core/geometry/qgsgeometry.h#L1996
|
||||||
QgsGeometry.interpolateAngle: src/core/geometry/qgsgeometry.h#L2001
|
QgsGeometry.interpolateAngle: src/core/geometry/qgsgeometry.h#L2018
|
||||||
QgsGeometry.intersection: src/core/geometry/qgsgeometry.h#L2014
|
QgsGeometry.intersection: src/core/geometry/qgsgeometry.h#L2031
|
||||||
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1421
|
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1438
|
||||||
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1437
|
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1454
|
||||||
QgsGeometry.isAxisParallelRectangle: src/core/geometry/qgsgeometry.h#L463
|
QgsGeometry.isAxisParallelRectangle: src/core/geometry/qgsgeometry.h#L480
|
||||||
QgsGeometry.isEmpty: src/core/geometry/qgsgeometry.h#L396
|
QgsGeometry.isEmpty: src/core/geometry/qgsgeometry.h#L413
|
||||||
QgsGeometry.isGeosEqual: src/core/geometry/qgsgeometry.h#L431
|
QgsGeometry.isGeosEqual: src/core/geometry/qgsgeometry.h#L448
|
||||||
QgsGeometry.isGeosValid: src/core/geometry/qgsgeometry.h#L439
|
QgsGeometry.isGeosValid: src/core/geometry/qgsgeometry.h#L456
|
||||||
QgsGeometry.isMultipart: src/core/geometry/qgsgeometry.h#L399
|
QgsGeometry.isMultipart: src/core/geometry/qgsgeometry.h#L416
|
||||||
QgsGeometry.isNull: src/core/geometry/qgsgeometry.h#L240
|
QgsGeometry.isNull: src/core/geometry/qgsgeometry.h#L257
|
||||||
QgsGeometry.isPolygonClockwise: src/core/geometry/qgsgeometry.h#L2704
|
QgsGeometry.isPolygonClockwise: src/core/geometry/qgsgeometry.h#L2721
|
||||||
QgsGeometry.isPolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2689
|
QgsGeometry.isPolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2706
|
||||||
QgsGeometry.isSimple: src/core/geometry/qgsgeometry.h#L448
|
QgsGeometry.isSimple: src/core/geometry/qgsgeometry.h#L465
|
||||||
QgsGeometry.largestEmptyCircle: src/core/geometry/qgsgeometry.h#L1739
|
QgsGeometry.largestEmptyCircle: src/core/geometry/qgsgeometry.h#L1756
|
||||||
QgsGeometry.lastError: src/core/geometry/qgsgeometry.h#L2897
|
QgsGeometry.lastError: src/core/geometry/qgsgeometry.h#L2914
|
||||||
QgsGeometry.length: src/core/geometry/qgsgeometry.h#L491
|
QgsGeometry.length: src/core/geometry/qgsgeometry.h#L508
|
||||||
QgsGeometry.lineLocatePoint: src/core/geometry/qgsgeometry.h#L1991
|
QgsGeometry.lineLocatePoint: src/core/geometry/qgsgeometry.h#L2008
|
||||||
QgsGeometry.makeDifference: src/core/geometry/qgsgeometry.h#L1193
|
QgsGeometry.makeDifference: src/core/geometry/qgsgeometry.h#L1210
|
||||||
QgsGeometry.makeValid: src/core/geometry/qgsgeometry.h#L2663
|
QgsGeometry.makeValid: src/core/geometry/qgsgeometry.h#L2680
|
||||||
QgsGeometry.mapToPixel: src/core/geometry/qgsgeometry.h#L2860
|
QgsGeometry.mapToPixel: src/core/geometry/qgsgeometry.h#L2877
|
||||||
QgsGeometry.mergeLines: src/core/geometry/qgsgeometry.h#L2050
|
QgsGeometry.mergeLines: src/core/geometry/qgsgeometry.h#L2067
|
||||||
QgsGeometry.minimalEnclosingCircle: src/core/geometry/qgsgeometry.h#L1240
|
QgsGeometry.minimalEnclosingCircle: src/core/geometry/qgsgeometry.h#L1257
|
||||||
QgsGeometry.minimumClearance: src/core/geometry/qgsgeometry.h#L1778
|
QgsGeometry.minimumClearance: src/core/geometry/qgsgeometry.h#L1795
|
||||||
QgsGeometry.minimumClearanceLine: src/core/geometry/qgsgeometry.h#L1791
|
QgsGeometry.minimumClearanceLine: src/core/geometry/qgsgeometry.h#L1808
|
||||||
QgsGeometry.minimumWidth: src/core/geometry/qgsgeometry.h#L1755
|
QgsGeometry.minimumWidth: src/core/geometry/qgsgeometry.h#L1772
|
||||||
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L824
|
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L841
|
||||||
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L833
|
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L850
|
||||||
QgsGeometry.nearestPoint: src/core/geometry/qgsgeometry.h#L875
|
QgsGeometry.nearestPoint: src/core/geometry/qgsgeometry.h#L892
|
||||||
QgsGeometry.node: src/core/geometry/qgsgeometry.h#L1924
|
QgsGeometry.node: src/core/geometry/qgsgeometry.h#L1941
|
||||||
QgsGeometry.normalize: src/core/geometry/qgsgeometry.h#L2820
|
QgsGeometry.normalize: src/core/geometry/qgsgeometry.h#L2837
|
||||||
QgsGeometry.offsetCurve: src/core/geometry/qgsgeometry.h#L1566
|
QgsGeometry.offsetCurve: src/core/geometry/qgsgeometry.h#L1583
|
||||||
QgsGeometry.orientedMinimumBoundingBox: src/core/geometry/qgsgeometry.h#L1220
|
QgsGeometry.orientedMinimumBoundingBox: src/core/geometry/qgsgeometry.h#L1237
|
||||||
QgsGeometry.orthogonalize: src/core/geometry/qgsgeometry.h#L1255
|
QgsGeometry.orthogonalize: src/core/geometry/qgsgeometry.h#L1272
|
||||||
QgsGeometry.overlaps: src/core/geometry/qgsgeometry.h#L1513
|
QgsGeometry.overlaps: src/core/geometry/qgsgeometry.h#L1530
|
||||||
QgsGeometry.parts: src/core/geometry/qgsgeometry.h#L622
|
QgsGeometry.parts: src/core/geometry/qgsgeometry.h#L639
|
||||||
QgsGeometry.pointOnSurface: src/core/geometry/qgsgeometry.h#L1701
|
QgsGeometry.pointOnSurface: src/core/geometry/qgsgeometry.h#L1718
|
||||||
QgsGeometry.poleOfInaccessibility: src/core/geometry/qgsgeometry.h#L1714
|
QgsGeometry.poleOfInaccessibility: src/core/geometry/qgsgeometry.h#L1731
|
||||||
QgsGeometry.polygonOrientation: src/core/geometry/qgsgeometry.h#L2674
|
QgsGeometry.polygonOrientation: src/core/geometry/qgsgeometry.h#L2691
|
||||||
QgsGeometry.polygonize: src/core/geometry/qgsgeometry.h#L2839
|
QgsGeometry.polygonize: src/core/geometry/qgsgeometry.h#L2856
|
||||||
QgsGeometry.randomPointsInPolygon: src/core/geometry/qgsgeometry.h#L2136
|
QgsGeometry.randomPointsInPolygon: src/core/geometry/qgsgeometry.h#L2153
|
||||||
QgsGeometry.removeDuplicateNodes: src/core/geometry/qgsgeometry.h#L1410
|
QgsGeometry.removeDuplicateNodes: src/core/geometry/qgsgeometry.h#L1427
|
||||||
QgsGeometry.removeInteriorRings: src/core/geometry/qgsgeometry.h#L989
|
QgsGeometry.removeInteriorRings: src/core/geometry/qgsgeometry.h#L1006
|
||||||
QgsGeometry.requiresConversionToStraightSegments: src/core/geometry/qgsgeometry.h#L2854
|
QgsGeometry.requiresConversionToStraightSegments: src/core/geometry/qgsgeometry.h#L2871
|
||||||
QgsGeometry.reshapeGeometry: src/core/geometry/qgsgeometry.h#L1178
|
QgsGeometry.reshapeGeometry: src/core/geometry/qgsgeometry.h#L1195
|
||||||
QgsGeometry.rotate: src/core/geometry/qgsgeometry.h#L1029
|
QgsGeometry.rotate: src/core/geometry/qgsgeometry.h#L1046
|
||||||
QgsGeometry.roundWaves: src/core/geometry/qgsgeometry.h#L1337
|
QgsGeometry.roundWaves: src/core/geometry/qgsgeometry.h#L1354
|
||||||
QgsGeometry.roundWavesRandomized: src/core/geometry/qgsgeometry.h#L1357
|
QgsGeometry.roundWavesRandomized: src/core/geometry/qgsgeometry.h#L1374
|
||||||
QgsGeometry.set: src/core/geometry/qgsgeometry.h#L231
|
QgsGeometry.set: src/core/geometry/qgsgeometry.h#L248
|
||||||
QgsGeometry.sharedPaths: src/core/geometry/qgsgeometry.h#L1940
|
QgsGeometry.sharedPaths: src/core/geometry/qgsgeometry.h#L1957
|
||||||
QgsGeometry.shortestLine: src/core/geometry/qgsgeometry.h#L886
|
QgsGeometry.shortestLine: src/core/geometry/qgsgeometry.h#L903
|
||||||
QgsGeometry.simplify: src/core/geometry/qgsgeometry.h#L1629
|
QgsGeometry.simplify: src/core/geometry/qgsgeometry.h#L1646
|
||||||
QgsGeometry.simplifyCoverageVW: src/core/geometry/qgsgeometry.h#L1899
|
QgsGeometry.simplifyCoverageVW: src/core/geometry/qgsgeometry.h#L1916
|
||||||
QgsGeometry.singleSidedBuffer: src/core/geometry/qgsgeometry.h#L1582
|
QgsGeometry.singleSidedBuffer: src/core/geometry/qgsgeometry.h#L1599
|
||||||
QgsGeometry.smooth: src/core/geometry/qgsgeometry.h#L3118
|
QgsGeometry.smooth: src/core/geometry/qgsgeometry.h#L3135
|
||||||
QgsGeometry.snappedToGrid: src/core/geometry/qgsgeometry.h#L1389
|
QgsGeometry.snappedToGrid: src/core/geometry/qgsgeometry.h#L1406
|
||||||
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1092
|
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1109
|
||||||
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1172
|
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1189
|
||||||
QgsGeometry.sqrDistToVertexAt: src/core/geometry/qgsgeometry.h#L869
|
QgsGeometry.sqrDistToVertexAt: src/core/geometry/qgsgeometry.h#L886
|
||||||
QgsGeometry.squareWaves: src/core/geometry/qgsgeometry.h#L1303
|
QgsGeometry.squareWaves: src/core/geometry/qgsgeometry.h#L1320
|
||||||
QgsGeometry.squareWavesRandomized: src/core/geometry/qgsgeometry.h#L1323
|
QgsGeometry.squareWavesRandomized: src/core/geometry/qgsgeometry.h#L1340
|
||||||
QgsGeometry.subdivide: src/core/geometry/qgsgeometry.h#L1963
|
QgsGeometry.subdivide: src/core/geometry/qgsgeometry.h#L1980
|
||||||
QgsGeometry.symDifference: src/core/geometry/qgsgeometry.h#L2076
|
QgsGeometry.symDifference: src/core/geometry/qgsgeometry.h#L2093
|
||||||
QgsGeometry.taperedBuffer: src/core/geometry/qgsgeometry.h#L1603
|
QgsGeometry.taperedBuffer: src/core/geometry/qgsgeometry.h#L1620
|
||||||
QgsGeometry.toggleCircularAtVertex: src/core/geometry/qgsgeometry.h#L855
|
QgsGeometry.toggleCircularAtVertex: src/core/geometry/qgsgeometry.h#L872
|
||||||
QgsGeometry.touches: src/core/geometry/qgsgeometry.h#L1502
|
QgsGeometry.touches: src/core/geometry/qgsgeometry.h#L1519
|
||||||
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1011
|
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1028
|
||||||
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1021
|
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1038
|
||||||
QgsGeometry.translate: src/core/geometry/qgsgeometry.h#L995
|
QgsGeometry.translate: src/core/geometry/qgsgeometry.h#L1012
|
||||||
QgsGeometry.triangularWaves: src/core/geometry/qgsgeometry.h#L1269
|
QgsGeometry.triangularWaves: src/core/geometry/qgsgeometry.h#L1286
|
||||||
QgsGeometry.triangularWavesRandomized: src/core/geometry/qgsgeometry.h#L1289
|
QgsGeometry.triangularWavesRandomized: src/core/geometry/qgsgeometry.h#L1306
|
||||||
QgsGeometry.type: src/core/geometry/qgsgeometry.h#L388
|
QgsGeometry.type: src/core/geometry/qgsgeometry.h#L405
|
||||||
QgsGeometry.unaryUnion: src/core/geometry/qgsgeometry.h#L2830
|
QgsGeometry.unaryUnion: src/core/geometry/qgsgeometry.h#L2847
|
||||||
QgsGeometry.unionCoverage: src/core/geometry/qgsgeometry.h#L1912
|
QgsGeometry.unionCoverage: src/core/geometry/qgsgeometry.h#L1929
|
||||||
QgsGeometry.validateCoverage: src/core/geometry/qgsgeometry.h#L1877
|
QgsGeometry.validateCoverage: src/core/geometry/qgsgeometry.h#L1894
|
||||||
QgsGeometry.validateGeometry: src/core/geometry/qgsgeometry.h#L2809
|
QgsGeometry.validateGeometry: src/core/geometry/qgsgeometry.h#L2826
|
||||||
QgsGeometry.variableWidthBufferByM: src/core/geometry/qgsgeometry.h#L1619
|
QgsGeometry.variableWidthBufferByM: src/core/geometry/qgsgeometry.h#L1636
|
||||||
QgsGeometry.vertexAt: src/core/geometry/qgsgeometry.h#L862
|
QgsGeometry.vertexAt: src/core/geometry/qgsgeometry.h#L879
|
||||||
QgsGeometry.vertexIdFromVertexNr: src/core/geometry/qgsgeometry.h#L2877
|
QgsGeometry.vertexIdFromVertexNr: src/core/geometry/qgsgeometry.h#L2894
|
||||||
QgsGeometry.vertexNrFromVertexId: src/core/geometry/qgsgeometry.h#L2889
|
QgsGeometry.vertexNrFromVertexId: src/core/geometry/qgsgeometry.h#L2906
|
||||||
QgsGeometry.vertices: src/core/geometry/qgsgeometry.h#L540
|
QgsGeometry.vertices: src/core/geometry/qgsgeometry.h#L557
|
||||||
QgsGeometry.voronoiDiagram: src/core/geometry/qgsgeometry.h#L1832
|
QgsGeometry.voronoiDiagram: src/core/geometry/qgsgeometry.h#L1849
|
||||||
QgsGeometry.within: src/core/geometry/qgsgeometry.h#L1524
|
QgsGeometry.within: src/core/geometry/qgsgeometry.h#L1541
|
||||||
QgsGeometry.wkbSize: src/core/geometry/qgsgeometry.h#L2167
|
QgsGeometry.wkbSize: src/core/geometry/qgsgeometry.h#L2184
|
||||||
QgsGeometry.wkbType: src/core/geometry/qgsgeometry.h#L382
|
QgsGeometry.wkbType: src/core/geometry/qgsgeometry.h#L399
|
||||||
QgsGeometry: src/core/geometry/qgsgeometry.h#L161
|
QgsGeometry: src/core/geometry/qgsgeometry.h#L178
|
||||||
QgsGeometryCollection.__bool__: src/core/geometry/qgsgeometrycollection.h#L136
|
QgsGeometryCollection.__bool__: src/core/geometry/qgsgeometrycollection.h#L136
|
||||||
QgsGeometryCollection.__delitem__: src/core/geometry/qgsgeometrycollection.h#L401
|
QgsGeometryCollection.__delitem__: src/core/geometry/qgsgeometrycollection.h#L401
|
||||||
QgsGeometryCollection.__getitem__: src/core/geometry/qgsgeometrycollection.h#L373
|
QgsGeometryCollection.__getitem__: src/core/geometry/qgsgeometrycollection.h#L373
|
||||||
@ -5306,9 +5306,9 @@ QgsGeometryPaintDevice.painterPathToGeometry: src/core/painting/qgsgeometrypaint
|
|||||||
QgsGeometryPaintDevice.setSimplificationTolerance: src/core/painting/qgsgeometrypaintdevice.h#L149
|
QgsGeometryPaintDevice.setSimplificationTolerance: src/core/painting/qgsgeometrypaintdevice.h#L149
|
||||||
QgsGeometryPaintDevice.setStrokedPathSegments: src/core/painting/qgsgeometrypaintdevice.h#L140
|
QgsGeometryPaintDevice.setStrokedPathSegments: src/core/painting/qgsgeometrypaintdevice.h#L140
|
||||||
QgsGeometryPaintDevice: src/core/painting/qgsgeometrypaintdevice.h#L122
|
QgsGeometryPaintDevice: src/core/painting/qgsgeometrypaintdevice.h#L122
|
||||||
QgsGeometryParameters.gridSize: src/core/geometry/qgsgeometry.h#L122
|
QgsGeometryParameters.gridSize: src/core/geometry/qgsgeometry.h#L139
|
||||||
QgsGeometryParameters.setGridSize: src/core/geometry/qgsgeometry.h#L134
|
QgsGeometryParameters.setGridSize: src/core/geometry/qgsgeometry.h#L151
|
||||||
QgsGeometryParameters: src/core/geometry/qgsgeometry.h#L108
|
QgsGeometryParameters: src/core/geometry/qgsgeometry.h#L125
|
||||||
QgsGeometryPartIterator.__iter__: src/core/geometry/qgsabstractgeometry.h#L1286
|
QgsGeometryPartIterator.__iter__: src/core/geometry/qgsabstractgeometry.h#L1286
|
||||||
QgsGeometryPartIterator.__next__: src/core/geometry/qgsabstractgeometry.h#L1291
|
QgsGeometryPartIterator.__next__: src/core/geometry/qgsabstractgeometry.h#L1291
|
||||||
QgsGeometryPartIterator.hasNext: src/core/geometry/qgsabstractgeometry.h#L1280
|
QgsGeometryPartIterator.hasNext: src/core/geometry/qgsabstractgeometry.h#L1280
|
||||||
@ -5508,13 +5508,13 @@ QgsGlowEffect.shadeExterior: src/core/effects/qgsgloweffect.h#L274
|
|||||||
QgsGlowEffect.spread: src/core/effects/qgsgloweffect.h#L73
|
QgsGlowEffect.spread: src/core/effects/qgsgloweffect.h#L73
|
||||||
QgsGlowEffect.spreadUnit: src/core/effects/qgsgloweffect.h#L91
|
QgsGlowEffect.spreadUnit: src/core/effects/qgsgloweffect.h#L91
|
||||||
QgsGlowEffect: src/core/effects/qgsgloweffect.h#L37
|
QgsGlowEffect: src/core/effects/qgsgloweffect.h#L37
|
||||||
QgsGml.crs: src/core/qgsgml.h#L431
|
QgsGml.crs: src/core/qgsgml.h#L432
|
||||||
QgsGml.dataProgressAndSteps: src/core/qgsgml.h#L455
|
QgsGml.dataProgressAndSteps: src/core/qgsgml.h#L456
|
||||||
QgsGml.dataReadProgress: src/core/qgsgml.h#L440
|
QgsGml.dataReadProgress: src/core/qgsgml.h#L441
|
||||||
QgsGml.getFeatures: src/core/qgsgml.h#L408
|
QgsGml.getFeatures: src/core/qgsgml.h#L409
|
||||||
QgsGml.getFeatures: src/core/qgsgml.h#L420
|
QgsGml.getFeatures: src/core/qgsgml.h#L421
|
||||||
QgsGml.totalStepsUpdate: src/core/qgsgml.h#L447
|
QgsGml.totalStepsUpdate: src/core/qgsgml.h#L448
|
||||||
QgsGml: src/core/qgsgml.h#L387
|
QgsGml: src/core/qgsgml.h#L388
|
||||||
QgsGmlFeatureClass.fieldIndex: src/core/qgsgmlschema.h#L49
|
QgsGmlFeatureClass.fieldIndex: src/core/qgsgmlschema.h#L49
|
||||||
QgsGmlFeatureClass.path: src/core/qgsgmlschema.h#L51
|
QgsGmlFeatureClass.path: src/core/qgsgmlschema.h#L51
|
||||||
QgsGmlFeatureClass: src/core/qgsgmlschema.h#L40
|
QgsGmlFeatureClass: src/core/qgsgmlschema.h#L40
|
||||||
@ -8951,219 +8951,220 @@ QgsMapInfoSymbolConverter.convertFillSymbol: src/core/symbology/qgsmapinfosymbol
|
|||||||
QgsMapInfoSymbolConverter.convertLineSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L75
|
QgsMapInfoSymbolConverter.convertLineSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L75
|
||||||
QgsMapInfoSymbolConverter.convertMarkerSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L91
|
QgsMapInfoSymbolConverter.convertMarkerSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L91
|
||||||
QgsMapInfoSymbolConverter: src/core/symbology/qgsmapinfosymbolconverter.h#L66
|
QgsMapInfoSymbolConverter: src/core/symbology/qgsmapinfosymbolconverter.h#L66
|
||||||
QgsMapLayer.__repr__: src/core/qgsmaplayer.h#L1915
|
QgsMapLayer.__repr__: src/core/qgsmaplayer.h#L1955
|
||||||
QgsMapLayer.abstract: src/core/qgsmaplayer.h#L356
|
QgsMapLayer.abstract: src/core/qgsmaplayer.h#L356
|
||||||
QgsMapLayer.accept: src/core/qgsmaplayer.h#L1742
|
QgsMapLayer.accept: src/core/qgsmaplayer.h#L1782
|
||||||
QgsMapLayer.appendError: src/core/qgsmaplayer.h#L2279
|
QgsMapLayer.appendError: src/core/qgsmaplayer.h#L2319
|
||||||
QgsMapLayer.attribution: src/core/qgsmaplayer.h#L412
|
QgsMapLayer.attribution: src/core/qgsmaplayer.h#L412
|
||||||
QgsMapLayer.attributionUrl: src/core/qgsmaplayer.h#L426
|
QgsMapLayer.attributionUrl: src/core/qgsmaplayer.h#L426
|
||||||
QgsMapLayer.autoRefreshInterval: src/core/qgsmaplayer.h#L1636
|
QgsMapLayer.autoRefreshInterval: src/core/qgsmaplayer.h#L1676
|
||||||
QgsMapLayer.autoRefreshIntervalChanged: src/core/qgsmaplayer.h#L2080
|
QgsMapLayer.autoRefreshIntervalChanged: src/core/qgsmaplayer.h#L2120
|
||||||
QgsMapLayer.autoRefreshMode: src/core/qgsmaplayer.h#L1628
|
QgsMapLayer.autoRefreshMode: src/core/qgsmaplayer.h#L1668
|
||||||
QgsMapLayer.beforeResolveReferences: src/core/qgsmaplayer.h#L1938
|
QgsMapLayer.beforeResolveReferences: src/core/qgsmaplayer.h#L1978
|
||||||
QgsMapLayer.blendMode: src/core/qgsmaplayer.h#L516
|
QgsMapLayer.blendMode: src/core/qgsmaplayer.h#L516
|
||||||
QgsMapLayer.blendModeChanged: src/core/qgsmaplayer.h#L2011
|
QgsMapLayer.blendModeChanged: src/core/qgsmaplayer.h#L2051
|
||||||
QgsMapLayer.clone: src/core/qgsmaplayer.h#L214
|
QgsMapLayer.clone: src/core/qgsmaplayer.h#L214
|
||||||
QgsMapLayer.clone: src/core/qgsmaplayer.h#L2187
|
QgsMapLayer.clone: src/core/qgsmaplayer.h#L2227
|
||||||
QgsMapLayer.configChanged: src/core/qgsmaplayer.h#L2062
|
QgsMapLayer.configChanged: src/core/qgsmaplayer.h#L2102
|
||||||
QgsMapLayer.createMapRenderer: src/core/qgsmaplayer.h#L549
|
QgsMapLayer.createMapRenderer: src/core/qgsmaplayer.h#L549
|
||||||
QgsMapLayer.crs3D: src/core/qgsmaplayer.h#L1034
|
QgsMapLayer.crs3D: src/core/qgsmaplayer.h#L1074
|
||||||
QgsMapLayer.crs3DChanged: src/core/qgsmaplayer.h#L1977
|
QgsMapLayer.crs3DChanged: src/core/qgsmaplayer.h#L2017
|
||||||
QgsMapLayer.crs: src/core/qgsmaplayer.h#L994
|
QgsMapLayer.crs: src/core/qgsmaplayer.h#L1034
|
||||||
QgsMapLayer.crsChanged: src/core/qgsmaplayer.h#L1966
|
QgsMapLayer.crsChanged: src/core/qgsmaplayer.h#L2006
|
||||||
QgsMapLayer.customProperty: src/core/qgsmaplayer.h#L721
|
QgsMapLayer.customProperty: src/core/qgsmaplayer.h#L721
|
||||||
QgsMapLayer.customPropertyChanged: src/core/qgsmaplayer.h#L2125
|
QgsMapLayer.customPropertyChanged: src/core/qgsmaplayer.h#L2165
|
||||||
QgsMapLayer.customPropertyKeys: src/core/qgsmaplayer.h#L708
|
QgsMapLayer.customPropertyKeys: src/core/qgsmaplayer.h#L708
|
||||||
QgsMapLayer.dataChanged: src/core/qgsmaplayer.h#L2008
|
QgsMapLayer.dataChanged: src/core/qgsmaplayer.h#L2048
|
||||||
QgsMapLayer.dataProvider: src/core/qgsmaplayer.h#L302
|
QgsMapLayer.dataProvider: src/core/qgsmaplayer.h#L302
|
||||||
QgsMapLayer.dataSourceChanged: src/core/qgsmaplayer.h#L2104
|
QgsMapLayer.dataSourceChanged: src/core/qgsmaplayer.h#L2144
|
||||||
QgsMapLayer.dataUrl: src/core/qgsmaplayer.h#L384
|
QgsMapLayer.dataUrl: src/core/qgsmaplayer.h#L384
|
||||||
QgsMapLayer.dataUrlFormat: src/core/qgsmaplayer.h#L398
|
QgsMapLayer.dataUrlFormat: src/core/qgsmaplayer.h#L398
|
||||||
QgsMapLayer.decodedSource: src/core/qgsmaplayer.h#L2238
|
QgsMapLayer.decodedSource: src/core/qgsmaplayer.h#L2278
|
||||||
QgsMapLayer.deleteStyleFromDatabase: src/core/qgsmaplayer.h#L758
|
QgsMapLayer.deleteStyleFromDatabase: src/core/qgsmaplayer.h#L758
|
||||||
QgsMapLayer.dependenciesChanged: src/core/qgsmaplayer.h#L2067
|
QgsMapLayer.dependenciesChanged: src/core/qgsmaplayer.h#L2107
|
||||||
QgsMapLayer.editingStarted: src/core/qgsmaplayer.h#L2131
|
QgsMapLayer.editingStarted: src/core/qgsmaplayer.h#L2171
|
||||||
QgsMapLayer.editingStopped: src/core/qgsmaplayer.h#L2137
|
QgsMapLayer.editingStopped: src/core/qgsmaplayer.h#L2177
|
||||||
QgsMapLayer.elevationProperties: src/core/qgsmaplayer.h#L1763
|
QgsMapLayer.elevationProperties: src/core/qgsmaplayer.h#L1803
|
||||||
QgsMapLayer.emitStyleChanged: src/core/qgsmaplayer.h#L1882
|
QgsMapLayer.emitStyleChanged: src/core/qgsmaplayer.h#L1922
|
||||||
QgsMapLayer.encodedSource: src/core/qgsmaplayer.h#L2224
|
QgsMapLayer.encodedSource: src/core/qgsmaplayer.h#L2264
|
||||||
QgsMapLayer.error: src/core/qgsmaplayer.h#L981
|
QgsMapLayer.error: src/core/qgsmaplayer.h#L1021
|
||||||
QgsMapLayer.exportNamedMetadata: src/core/qgsmaplayer.h#L1096
|
QgsMapLayer.exportNamedMetadata: src/core/qgsmaplayer.h#L1136
|
||||||
QgsMapLayer.exportNamedStyle: src/core/qgsmaplayer.h#L1244
|
QgsMapLayer.exportNamedStyle: src/core/qgsmaplayer.h#L1284
|
||||||
QgsMapLayer.exportSldStyle: src/core/qgsmaplayer.h#L1255
|
QgsMapLayer.exportSldStyle: src/core/qgsmaplayer.h#L1295
|
||||||
QgsMapLayer.exportSldStyleV2: src/core/qgsmaplayer.h#L1264
|
QgsMapLayer.exportSldStyleV2: src/core/qgsmaplayer.h#L1304
|
||||||
QgsMapLayer.exportSldStyleV3: src/core/qgsmaplayer.h#L1275
|
QgsMapLayer.exportSldStyleV3: src/core/qgsmaplayer.h#L1315
|
||||||
QgsMapLayer.extensionPropertyType: src/core/qgsmaplayer.h#L260
|
QgsMapLayer.extensionPropertyType: src/core/qgsmaplayer.h#L260
|
||||||
QgsMapLayer.extent3D: src/core/qgsmaplayer.h#L558
|
QgsMapLayer.extent3D: src/core/qgsmaplayer.h#L558
|
||||||
QgsMapLayer.extent: src/core/qgsmaplayer.h#L552
|
QgsMapLayer.extent: src/core/qgsmaplayer.h#L552
|
||||||
QgsMapLayer.flags: src/core/qgsmaplayer.h#L231
|
QgsMapLayer.flags: src/core/qgsmaplayer.h#L231
|
||||||
QgsMapLayer.flagsChanged: src/core/qgsmaplayer.h#L2095
|
QgsMapLayer.flagsChanged: src/core/qgsmaplayer.h#L2135
|
||||||
QgsMapLayer.formatLayerName: src/core/qgsmaplayer.h#L1081
|
QgsMapLayer.formatLayerName: src/core/qgsmaplayer.h#L1121
|
||||||
QgsMapLayer.generateId: src/core/qgsmaplayer.h#L1731
|
QgsMapLayer.generateId: src/core/qgsmaplayer.h#L1771
|
||||||
QgsMapLayer.getStyleFromDatabase: src/core/qgsmaplayer.h#L750
|
QgsMapLayer.getStyleFromDatabase: src/core/qgsmaplayer.h#L750
|
||||||
QgsMapLayer.hasAutoRefreshEnabled: src/core/qgsmaplayer.h#L1620
|
QgsMapLayer.hasAutoRefreshEnabled: src/core/qgsmaplayer.h#L1660
|
||||||
QgsMapLayer.hasDependencyCycle: src/core/qgsmaplayer.h#L2311
|
QgsMapLayer.hasDependencyCycle: src/core/qgsmaplayer.h#L2351
|
||||||
QgsMapLayer.hasMapTips: src/core/qgsmaplayer.h#L1785
|
QgsMapLayer.hasMapTips: src/core/qgsmaplayer.h#L1825
|
||||||
QgsMapLayer.hasScaleBasedVisibility: src/core/qgsmaplayer.h#L1612
|
QgsMapLayer.hasScaleBasedVisibility: src/core/qgsmaplayer.h#L1652
|
||||||
QgsMapLayer.htmlMetadata: src/core/qgsmaplayer.h#L1683
|
QgsMapLayer.htmlMetadata: src/core/qgsmaplayer.h#L1723
|
||||||
QgsMapLayer.id: src/core/qgsmaplayer.h#L268
|
QgsMapLayer.id: src/core/qgsmaplayer.h#L268
|
||||||
QgsMapLayer.idChanged: src/core/qgsmaplayer.h#L1951
|
QgsMapLayer.idChanged: src/core/qgsmaplayer.h#L1991
|
||||||
QgsMapLayer.importNamedMetadata: src/core/qgsmaplayer.h#L1169
|
QgsMapLayer.importNamedMetadata: src/core/qgsmaplayer.h#L1209
|
||||||
QgsMapLayer.importNamedStyle: src/core/qgsmaplayer.h#L1233
|
QgsMapLayer.importNamedStyle: src/core/qgsmaplayer.h#L1273
|
||||||
QgsMapLayer.invalidateWgs84Extent: src/core/qgsmaplayer.h#L2289
|
QgsMapLayer.invalidateWgs84Extent: src/core/qgsmaplayer.h#L2329
|
||||||
QgsMapLayer.isEditable: src/core/qgsmaplayer.h#L624
|
QgsMapLayer.isEditable: src/core/qgsmaplayer.h#L624
|
||||||
QgsMapLayer.isInScaleRange: src/core/qgsmaplayer.h#L1578
|
QgsMapLayer.isInScaleRange: src/core/qgsmaplayer.h#L1618
|
||||||
QgsMapLayer.isModified: src/core/qgsmaplayer.h#L631
|
QgsMapLayer.isModified: src/core/qgsmaplayer.h#L631
|
||||||
QgsMapLayer.isRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1706
|
QgsMapLayer.isRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1746
|
||||||
QgsMapLayer.isSpatial: src/core/qgsmaplayer.h#L636
|
QgsMapLayer.isSpatial: src/core/qgsmaplayer.h#L636
|
||||||
QgsMapLayer.isTemporary: src/core/qgsmaplayer.h#L647
|
QgsMapLayer.isTemporary: src/core/qgsmaplayer.h#L647
|
||||||
QgsMapLayer.isValid: src/core/qgsmaplayer.h#L575
|
QgsMapLayer.isValid: src/core/qgsmaplayer.h#L575
|
||||||
QgsMapLayer.isValidChanged: src/core/qgsmaplayer.h#L2118
|
QgsMapLayer.isValidChanged: src/core/qgsmaplayer.h#L2158
|
||||||
QgsMapLayer.keywordList: src/core/qgsmaplayer.h#L370
|
QgsMapLayer.keywordList: src/core/qgsmaplayer.h#L370
|
||||||
QgsMapLayer.layerModified: src/core/qgsmaplayer.h#L2143
|
QgsMapLayer.layerModified: src/core/qgsmaplayer.h#L2183
|
||||||
QgsMapLayer.legend: src/core/qgsmaplayer.h#L1553
|
QgsMapLayer.legend: src/core/qgsmaplayer.h#L1593
|
||||||
QgsMapLayer.legendChanged: src/core/qgsmaplayer.h#L2044
|
QgsMapLayer.legendChanged: src/core/qgsmaplayer.h#L2084
|
||||||
QgsMapLayer.legendPlaceholderImage: src/core/qgsmaplayer.h#L1770
|
QgsMapLayer.legendPlaceholderImage: src/core/qgsmaplayer.h#L1810
|
||||||
QgsMapLayer.legendUrl: src/core/qgsmaplayer.h#L1528
|
QgsMapLayer.legendUrl: src/core/qgsmaplayer.h#L1568
|
||||||
QgsMapLayer.legendUrlFormat: src/core/qgsmaplayer.h#L1542
|
QgsMapLayer.legendUrlFormat: src/core/qgsmaplayer.h#L1582
|
||||||
QgsMapLayer.listStylesInDatabase: src/core/qgsmaplayer.h#L744
|
QgsMapLayer.listStylesInDatabase: src/core/qgsmaplayer.h#L744
|
||||||
QgsMapLayer.loadDefaultMetadata: src/core/qgsmaplayer.h#L1152
|
QgsMapLayer.loadDefaultMetadata: src/core/qgsmaplayer.h#L1192
|
||||||
QgsMapLayer.loadDefaultStyle: src/core/qgsmaplayer.h#L1193
|
QgsMapLayer.loadDefaultStyle: src/core/qgsmaplayer.h#L1233
|
||||||
QgsMapLayer.loadNamedMetadata: src/core/qgsmaplayer.h#L1139
|
QgsMapLayer.loadNamedMetadata: src/core/qgsmaplayer.h#L1179
|
||||||
QgsMapLayer.loadNamedMetadataFromDatabase: src/core/qgsmaplayer.h#L1161
|
QgsMapLayer.loadNamedMetadataFromDatabase: src/core/qgsmaplayer.h#L1201
|
||||||
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L1214
|
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L1254
|
||||||
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L795
|
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L835
|
||||||
QgsMapLayer.loadNamedStyleFromDatabase: src/core/qgsmaplayer.h#L1223
|
QgsMapLayer.loadNamedStyleFromDatabase: src/core/qgsmaplayer.h#L1263
|
||||||
QgsMapLayer.loadSldStyle: src/core/qgsmaplayer.h#L1351
|
QgsMapLayer.loadSldStyle: src/core/qgsmaplayer.h#L1391
|
||||||
QgsMapLayer.mapTipTemplate: src/core/qgsmaplayer.h#L1794
|
QgsMapLayer.mapTipTemplate: src/core/qgsmaplayer.h#L1834
|
||||||
QgsMapLayer.mapTipTemplateChanged: src/core/qgsmaplayer.h#L2150
|
QgsMapLayer.mapTipTemplateChanged: src/core/qgsmaplayer.h#L2190
|
||||||
QgsMapLayer.mapTipsEnabled: src/core/qgsmaplayer.h#L1817
|
QgsMapLayer.mapTipsEnabled: src/core/qgsmaplayer.h#L1857
|
||||||
QgsMapLayer.mapTipsEnabledChanged: src/core/qgsmaplayer.h#L2158
|
QgsMapLayer.mapTipsEnabledChanged: src/core/qgsmaplayer.h#L2198
|
||||||
QgsMapLayer.maximumScale: src/core/qgsmaplayer.h#L1602
|
QgsMapLayer.maximumScale: src/core/qgsmaplayer.h#L1642
|
||||||
QgsMapLayer.metadataChanged: src/core/qgsmaplayer.h#L2087
|
QgsMapLayer.metadataChanged: src/core/qgsmaplayer.h#L2127
|
||||||
QgsMapLayer.metadataUri: src/core/qgsmaplayer.h#L1089
|
QgsMapLayer.metadataUri: src/core/qgsmaplayer.h#L1129
|
||||||
QgsMapLayer.metadataUrl: src/core/qgsmaplayer.h#L461
|
QgsMapLayer.metadataUrl: src/core/qgsmaplayer.h#L461
|
||||||
QgsMapLayer.metadataUrlFormat: src/core/qgsmaplayer.h#L503
|
QgsMapLayer.metadataUrlFormat: src/core/qgsmaplayer.h#L503
|
||||||
QgsMapLayer.metadataUrlType: src/core/qgsmaplayer.h#L482
|
QgsMapLayer.metadataUrlType: src/core/qgsmaplayer.h#L482
|
||||||
QgsMapLayer.minimumScale: src/core/qgsmaplayer.h#L1590
|
QgsMapLayer.minimumScale: src/core/qgsmaplayer.h#L1630
|
||||||
QgsMapLayer.name: src/core/qgsmaplayer.h#L297
|
QgsMapLayer.name: src/core/qgsmaplayer.h#L297
|
||||||
QgsMapLayer.nameChanged: src/core/qgsmaplayer.h#L1956
|
QgsMapLayer.nameChanged: src/core/qgsmaplayer.h#L1996
|
||||||
QgsMapLayer.opacity: src/core/qgsmaplayer.h#L536
|
QgsMapLayer.opacity: src/core/qgsmaplayer.h#L536
|
||||||
QgsMapLayer.opacityChanged: src/core/qgsmaplayer.h#L2021
|
QgsMapLayer.opacityChanged: src/core/qgsmaplayer.h#L2061
|
||||||
QgsMapLayer.originalXmlProperties: src/core/qgsmaplayer.h#L1716
|
QgsMapLayer.originalXmlProperties: src/core/qgsmaplayer.h#L1756
|
||||||
QgsMapLayer.project: src/core/qgsmaplayer.h#L1928
|
QgsMapLayer.project: src/core/qgsmaplayer.h#L1968
|
||||||
QgsMapLayer.properties: src/core/qgsmaplayer.h#L254
|
QgsMapLayer.properties: src/core/qgsmaplayer.h#L254
|
||||||
QgsMapLayer.providerMetadata: src/core/qgsmaplayer.h#L314
|
QgsMapLayer.providerMetadata: src/core/qgsmaplayer.h#L314
|
||||||
QgsMapLayer.providerReadFlags: src/core/qgsmaplayer.h#L1826
|
QgsMapLayer.providerReadFlags: src/core/qgsmaplayer.h#L1866
|
||||||
QgsMapLayer.providerType: src/core/qgsmaplayer.h#L1506
|
QgsMapLayer.providerType: src/core/qgsmaplayer.h#L1546
|
||||||
QgsMapLayer.publicSource: src/core/qgsmaplayer.h#L587
|
QgsMapLayer.publicSource: src/core/qgsmaplayer.h#L587
|
||||||
QgsMapLayer.readCommonStyle: src/core/qgsmaplayer.h#L2265
|
QgsMapLayer.readCommonStyle: src/core/qgsmaplayer.h#L2305
|
||||||
QgsMapLayer.readCustomProperties: src/core/qgsmaplayer.h#L2245
|
QgsMapLayer.readCustomProperties: src/core/qgsmaplayer.h#L2285
|
||||||
QgsMapLayer.readLayerXml: src/core/qgsmaplayer.h#L679
|
QgsMapLayer.readLayerXml: src/core/qgsmaplayer.h#L679
|
||||||
QgsMapLayer.readOnly: src/core/qgsmaplayer.h#L539
|
QgsMapLayer.readOnly: src/core/qgsmaplayer.h#L539
|
||||||
QgsMapLayer.readSld: src/core/qgsmaplayer.h#L1354
|
QgsMapLayer.readSld: src/core/qgsmaplayer.h#L1394
|
||||||
QgsMapLayer.readStyle: src/core/qgsmaplayer.h#L1378
|
QgsMapLayer.readStyle: src/core/qgsmaplayer.h#L1418
|
||||||
QgsMapLayer.readStyleManager: src/core/qgsmaplayer.h#L2251
|
QgsMapLayer.readStyleManager: src/core/qgsmaplayer.h#L2291
|
||||||
QgsMapLayer.readSymbology: src/core/qgsmaplayer.h#L1366
|
QgsMapLayer.readSymbology: src/core/qgsmaplayer.h#L1406
|
||||||
QgsMapLayer.readXml: src/core/qgsmaplayer.h#L2205
|
QgsMapLayer.readXml: src/core/qgsmaplayer.h#L2245
|
||||||
QgsMapLayer.recalculateExtents: src/core/qgsmaplayer.h#L2005
|
QgsMapLayer.recalculateExtents: src/core/qgsmaplayer.h#L2045
|
||||||
QgsMapLayer.refreshOnNotifyMessage: src/core/qgsmaplayer.h#L1700
|
QgsMapLayer.refreshOnNotifyMessage: src/core/qgsmaplayer.h#L1740
|
||||||
QgsMapLayer.reload: src/core/qgsmaplayer.h#L544
|
QgsMapLayer.reload: src/core/qgsmaplayer.h#L544
|
||||||
QgsMapLayer.removeCustomProperty: src/core/qgsmaplayer.h#L974
|
QgsMapLayer.removeCustomProperty: src/core/qgsmaplayer.h#L1014
|
||||||
QgsMapLayer.renderer3D: src/core/qgsmaplayer.h#L1568
|
QgsMapLayer.renderer3D: src/core/qgsmaplayer.h#L1608
|
||||||
QgsMapLayer.renderer3DChanged: src/core/qgsmaplayer.h#L2049
|
QgsMapLayer.renderer3DChanged: src/core/qgsmaplayer.h#L2089
|
||||||
QgsMapLayer.rendererChanged: src/core/qgsmaplayer.h#L2027
|
QgsMapLayer.rendererChanged: src/core/qgsmaplayer.h#L2067
|
||||||
QgsMapLayer.repaintRequested: src/core/qgsmaplayer.h#L2002
|
QgsMapLayer.repaintRequested: src/core/qgsmaplayer.h#L2042
|
||||||
QgsMapLayer.request3DUpdate: src/core/qgsmaplayer.h#L2056
|
QgsMapLayer.request3DUpdate: src/core/qgsmaplayer.h#L2096
|
||||||
QgsMapLayer.resolveReferences: src/core/qgsmaplayer.h#L702
|
QgsMapLayer.resolveReferences: src/core/qgsmaplayer.h#L702
|
||||||
QgsMapLayer.saveDefaultMetadata: src/core/qgsmaplayer.h#L1106
|
QgsMapLayer.saveDefaultMetadata: src/core/qgsmaplayer.h#L1146
|
||||||
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1288
|
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1328
|
||||||
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1301
|
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1341
|
||||||
QgsMapLayer.saveNamedMetadata: src/core/qgsmaplayer.h#L1121
|
QgsMapLayer.saveNamedMetadata: src/core/qgsmaplayer.h#L1161
|
||||||
QgsMapLayer.saveNamedStyle: src/core/qgsmaplayer.h#L1318
|
QgsMapLayer.saveNamedStyle: src/core/qgsmaplayer.h#L1358
|
||||||
QgsMapLayer.saveSldStyle: src/core/qgsmaplayer.h#L1329
|
QgsMapLayer.saveSldStyle: src/core/qgsmaplayer.h#L1369
|
||||||
QgsMapLayer.saveSldStyleV2: src/core/qgsmaplayer.h#L1341
|
QgsMapLayer.saveSldStyleV2: src/core/qgsmaplayer.h#L1381
|
||||||
QgsMapLayer.saveStyleToDatabase: src/core/qgsmaplayer.h#L776
|
QgsMapLayer.saveStyleToDatabase: src/core/qgsmaplayer.h#L799
|
||||||
QgsMapLayer.selectionProperties: src/core/qgsmaplayer.h#L1749
|
QgsMapLayer.saveStyleToDatabaseV2: src/core/qgsmaplayer.h#L817
|
||||||
|
QgsMapLayer.selectionProperties: src/core/qgsmaplayer.h#L1789
|
||||||
QgsMapLayer.serverProperties: src/core/qgsmaplayer.h#L435
|
QgsMapLayer.serverProperties: src/core/qgsmaplayer.h#L435
|
||||||
QgsMapLayer.setAbstract: src/core/qgsmaplayer.h#L349
|
QgsMapLayer.setAbstract: src/core/qgsmaplayer.h#L349
|
||||||
QgsMapLayer.setAttribution: src/core/qgsmaplayer.h#L405
|
QgsMapLayer.setAttribution: src/core/qgsmaplayer.h#L405
|
||||||
QgsMapLayer.setAttributionUrl: src/core/qgsmaplayer.h#L419
|
QgsMapLayer.setAttributionUrl: src/core/qgsmaplayer.h#L419
|
||||||
QgsMapLayer.setAutoRefreshEnabled: src/core/qgsmaplayer.h#L1656
|
QgsMapLayer.setAutoRefreshEnabled: src/core/qgsmaplayer.h#L1696
|
||||||
QgsMapLayer.setAutoRefreshInterval: src/core/qgsmaplayer.h#L1648
|
QgsMapLayer.setAutoRefreshInterval: src/core/qgsmaplayer.h#L1688
|
||||||
QgsMapLayer.setAutoRefreshMode: src/core/qgsmaplayer.h#L1664
|
QgsMapLayer.setAutoRefreshMode: src/core/qgsmaplayer.h#L1704
|
||||||
QgsMapLayer.setBlendMode: src/core/qgsmaplayer.h#L510
|
QgsMapLayer.setBlendMode: src/core/qgsmaplayer.h#L510
|
||||||
QgsMapLayer.setCrs: src/core/qgsmaplayer.h#L1046
|
QgsMapLayer.setCrs: src/core/qgsmaplayer.h#L1086
|
||||||
QgsMapLayer.setCustomProperties: src/core/qgsmaplayer.h#L726
|
QgsMapLayer.setCustomProperties: src/core/qgsmaplayer.h#L726
|
||||||
QgsMapLayer.setCustomProperty: src/core/qgsmaplayer.h#L715
|
QgsMapLayer.setCustomProperty: src/core/qgsmaplayer.h#L715
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1439
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1479
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1470
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1510
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1501
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1541
|
||||||
QgsMapLayer.setDataUrl: src/core/qgsmaplayer.h#L377
|
QgsMapLayer.setDataUrl: src/core/qgsmaplayer.h#L377
|
||||||
QgsMapLayer.setDataUrlFormat: src/core/qgsmaplayer.h#L391
|
QgsMapLayer.setDataUrlFormat: src/core/qgsmaplayer.h#L391
|
||||||
QgsMapLayer.setDependencies: src/core/qgsmaplayer.h#L1891
|
QgsMapLayer.setDependencies: src/core/qgsmaplayer.h#L1931
|
||||||
QgsMapLayer.setError: src/core/qgsmaplayer.h#L2281
|
QgsMapLayer.setError: src/core/qgsmaplayer.h#L2321
|
||||||
QgsMapLayer.setExtent3D: src/core/qgsmaplayer.h#L2196
|
QgsMapLayer.setExtent3D: src/core/qgsmaplayer.h#L2236
|
||||||
QgsMapLayer.setExtent: src/core/qgsmaplayer.h#L2190
|
QgsMapLayer.setExtent: src/core/qgsmaplayer.h#L2230
|
||||||
QgsMapLayer.setFlags: src/core/qgsmaplayer.h#L243
|
QgsMapLayer.setFlags: src/core/qgsmaplayer.h#L243
|
||||||
QgsMapLayer.setId: src/core/qgsmaplayer.h#L285
|
QgsMapLayer.setId: src/core/qgsmaplayer.h#L285
|
||||||
QgsMapLayer.setKeywordList: src/core/qgsmaplayer.h#L363
|
QgsMapLayer.setKeywordList: src/core/qgsmaplayer.h#L363
|
||||||
QgsMapLayer.setLayerOrder: src/core/qgsmaplayer.h#L606
|
QgsMapLayer.setLayerOrder: src/core/qgsmaplayer.h#L606
|
||||||
QgsMapLayer.setLegend: src/core/qgsmaplayer.h#L1548
|
QgsMapLayer.setLegend: src/core/qgsmaplayer.h#L1588
|
||||||
QgsMapLayer.setLegendPlaceholderImage: src/core/qgsmaplayer.h#L1777
|
QgsMapLayer.setLegendPlaceholderImage: src/core/qgsmaplayer.h#L1817
|
||||||
QgsMapLayer.setLegendUrl: src/core/qgsmaplayer.h#L1521
|
QgsMapLayer.setLegendUrl: src/core/qgsmaplayer.h#L1561
|
||||||
QgsMapLayer.setLegendUrlFormat: src/core/qgsmaplayer.h#L1535
|
QgsMapLayer.setLegendUrlFormat: src/core/qgsmaplayer.h#L1575
|
||||||
QgsMapLayer.setMapTipTemplate: src/core/qgsmaplayer.h#L1803
|
QgsMapLayer.setMapTipTemplate: src/core/qgsmaplayer.h#L1843
|
||||||
QgsMapLayer.setMapTipsEnabled: src/core/qgsmaplayer.h#L1811
|
QgsMapLayer.setMapTipsEnabled: src/core/qgsmaplayer.h#L1851
|
||||||
QgsMapLayer.setMaximumScale: src/core/qgsmaplayer.h#L1850
|
QgsMapLayer.setMaximumScale: src/core/qgsmaplayer.h#L1890
|
||||||
QgsMapLayer.setMetadata: src/core/qgsmaplayer.h#L1678
|
QgsMapLayer.setMetadata: src/core/qgsmaplayer.h#L1718
|
||||||
QgsMapLayer.setMetadataUrl: src/core/qgsmaplayer.h#L450
|
QgsMapLayer.setMetadataUrl: src/core/qgsmaplayer.h#L450
|
||||||
QgsMapLayer.setMetadataUrlFormat: src/core/qgsmaplayer.h#L492
|
QgsMapLayer.setMetadataUrlFormat: src/core/qgsmaplayer.h#L492
|
||||||
QgsMapLayer.setMetadataUrlType: src/core/qgsmaplayer.h#L471
|
QgsMapLayer.setMetadataUrlType: src/core/qgsmaplayer.h#L471
|
||||||
QgsMapLayer.setMinimumScale: src/core/qgsmaplayer.h#L1839
|
QgsMapLayer.setMinimumScale: src/core/qgsmaplayer.h#L1879
|
||||||
QgsMapLayer.setName: src/core/qgsmaplayer.h#L291
|
QgsMapLayer.setName: src/core/qgsmaplayer.h#L291
|
||||||
QgsMapLayer.setOpacity: src/core/qgsmaplayer.h#L526
|
QgsMapLayer.setOpacity: src/core/qgsmaplayer.h#L526
|
||||||
QgsMapLayer.setOriginalXmlProperties: src/core/qgsmaplayer.h#L1725
|
QgsMapLayer.setOriginalXmlProperties: src/core/qgsmaplayer.h#L1765
|
||||||
QgsMapLayer.setProviderType: src/core/qgsmaplayer.h#L2269
|
QgsMapLayer.setProviderType: src/core/qgsmaplayer.h#L2309
|
||||||
QgsMapLayer.setRefreshOnNofifyMessage: src/core/qgsmaplayer.h#L1905
|
QgsMapLayer.setRefreshOnNofifyMessage: src/core/qgsmaplayer.h#L1945
|
||||||
QgsMapLayer.setRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1897
|
QgsMapLayer.setRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1937
|
||||||
QgsMapLayer.setRenderer3D: src/core/qgsmaplayer.h#L1563
|
QgsMapLayer.setRenderer3D: src/core/qgsmaplayer.h#L1603
|
||||||
QgsMapLayer.setScaleBasedVisibility: src/core/qgsmaplayer.h#L1859
|
QgsMapLayer.setScaleBasedVisibility: src/core/qgsmaplayer.h#L1899
|
||||||
QgsMapLayer.setShortName: src/core/qgsmaplayer.h#L321
|
QgsMapLayer.setShortName: src/core/qgsmaplayer.h#L321
|
||||||
QgsMapLayer.setSubLayerVisibility: src/core/qgsmaplayer.h#L613
|
QgsMapLayer.setSubLayerVisibility: src/core/qgsmaplayer.h#L613
|
||||||
QgsMapLayer.setTitle: src/core/qgsmaplayer.h#L335
|
QgsMapLayer.setTitle: src/core/qgsmaplayer.h#L335
|
||||||
QgsMapLayer.setTransformContext: src/core/qgsmaplayer.h#L1912
|
QgsMapLayer.setTransformContext: src/core/qgsmaplayer.h#L1952
|
||||||
QgsMapLayer.setValid: src/core/qgsmaplayer.h#L2199
|
QgsMapLayer.setValid: src/core/qgsmaplayer.h#L2239
|
||||||
QgsMapLayer.setVerticalCrs: src/core/qgsmaplayer.h#L1067
|
QgsMapLayer.setVerticalCrs: src/core/qgsmaplayer.h#L1107
|
||||||
QgsMapLayer.shortName: src/core/qgsmaplayer.h#L328
|
QgsMapLayer.shortName: src/core/qgsmaplayer.h#L328
|
||||||
QgsMapLayer.source: src/core/qgsmaplayer.h#L594
|
QgsMapLayer.source: src/core/qgsmaplayer.h#L594
|
||||||
QgsMapLayer.statusChanged: src/core/qgsmaplayer.h#L1941
|
QgsMapLayer.statusChanged: src/core/qgsmaplayer.h#L1981
|
||||||
QgsMapLayer.styleChanged: src/core/qgsmaplayer.h#L2039
|
QgsMapLayer.styleChanged: src/core/qgsmaplayer.h#L2079
|
||||||
QgsMapLayer.styleLoaded: src/core/qgsmaplayer.h#L2111
|
QgsMapLayer.styleLoaded: src/core/qgsmaplayer.h#L2151
|
||||||
QgsMapLayer.styleManager: src/core/qgsmaplayer.h#L1558
|
QgsMapLayer.styleManager: src/core/qgsmaplayer.h#L1598
|
||||||
QgsMapLayer.styleURI: src/core/qgsmaplayer.h#L1179
|
QgsMapLayer.styleURI: src/core/qgsmaplayer.h#L1219
|
||||||
QgsMapLayer.subLayers: src/core/qgsmaplayer.h#L600
|
QgsMapLayer.subLayers: src/core/qgsmaplayer.h#L600
|
||||||
QgsMapLayer.supportsEditing: src/core/qgsmaplayer.h#L621
|
QgsMapLayer.supportsEditing: src/core/qgsmaplayer.h#L621
|
||||||
QgsMapLayer.temporalProperties: src/core/qgsmaplayer.h#L1756
|
QgsMapLayer.temporalProperties: src/core/qgsmaplayer.h#L1796
|
||||||
QgsMapLayer.timestamp: src/core/qgsmaplayer.h#L1686
|
QgsMapLayer.timestamp: src/core/qgsmaplayer.h#L1726
|
||||||
QgsMapLayer.title: src/core/qgsmaplayer.h#L342
|
QgsMapLayer.title: src/core/qgsmaplayer.h#L342
|
||||||
QgsMapLayer.transformContext: src/core/qgsmaplayer.h#L1074
|
QgsMapLayer.transformContext: src/core/qgsmaplayer.h#L1114
|
||||||
QgsMapLayer.trigger3DUpdate: src/core/qgsmaplayer.h#L1877
|
QgsMapLayer.trigger3DUpdate: src/core/qgsmaplayer.h#L1917
|
||||||
QgsMapLayer.triggerRepaint: src/core/qgsmaplayer.h#L1869
|
QgsMapLayer.triggerRepaint: src/core/qgsmaplayer.h#L1909
|
||||||
QgsMapLayer.type: src/core/qgsmaplayer.h#L219
|
QgsMapLayer.type: src/core/qgsmaplayer.h#L219
|
||||||
QgsMapLayer.undoStack: src/core/qgsmaplayer.h#L1509
|
QgsMapLayer.undoStack: src/core/qgsmaplayer.h#L1549
|
||||||
QgsMapLayer.undoStackStyles: src/core/qgsmaplayer.h#L1514
|
QgsMapLayer.undoStackStyles: src/core/qgsmaplayer.h#L1554
|
||||||
QgsMapLayer.verticalCrs: src/core/qgsmaplayer.h#L1014
|
QgsMapLayer.verticalCrs: src/core/qgsmaplayer.h#L1054
|
||||||
QgsMapLayer.verticalCrsChanged: src/core/qgsmaplayer.h#L1994
|
QgsMapLayer.verticalCrsChanged: src/core/qgsmaplayer.h#L2034
|
||||||
QgsMapLayer.wgs84Extent: src/core/qgsmaplayer.h#L568
|
QgsMapLayer.wgs84Extent: src/core/qgsmaplayer.h#L568
|
||||||
QgsMapLayer.willBeDeleted: src/core/qgsmaplayer.h#L2074
|
QgsMapLayer.willBeDeleted: src/core/qgsmaplayer.h#L2114
|
||||||
QgsMapLayer.writeCommonStyle: src/core/qgsmaplayer.h#L2258
|
QgsMapLayer.writeCommonStyle: src/core/qgsmaplayer.h#L2298
|
||||||
QgsMapLayer.writeCustomProperties: src/core/qgsmaplayer.h#L2248
|
QgsMapLayer.writeCustomProperties: src/core/qgsmaplayer.h#L2288
|
||||||
QgsMapLayer.writeLayerXml: src/core/qgsmaplayer.h#L697
|
QgsMapLayer.writeLayerXml: src/core/qgsmaplayer.h#L697
|
||||||
QgsMapLayer.writeStyle: src/core/qgsmaplayer.h#L1405
|
QgsMapLayer.writeStyle: src/core/qgsmaplayer.h#L1445
|
||||||
QgsMapLayer.writeStyleManager: src/core/qgsmaplayer.h#L2253
|
QgsMapLayer.writeStyleManager: src/core/qgsmaplayer.h#L2293
|
||||||
QgsMapLayer.writeSymbology: src/core/qgsmaplayer.h#L1391
|
QgsMapLayer.writeSymbology: src/core/qgsmaplayer.h#L1431
|
||||||
QgsMapLayer.writeXml: src/core/qgsmaplayer.h#L2211
|
QgsMapLayer.writeXml: src/core/qgsmaplayer.h#L2251
|
||||||
QgsMapLayer: src/core/qgsmaplayer.h#L76
|
QgsMapLayer: src/core/qgsmaplayer.h#L76
|
||||||
QgsMapLayerDependency.__hash__: src/core/qgsmaplayerdependency.h#L78
|
QgsMapLayerDependency.__hash__: src/core/qgsmaplayerdependency.h#L78
|
||||||
QgsMapLayerDependency.layerId: src/core/qgsmaplayerdependency.h#L67
|
QgsMapLayerDependency.layerId: src/core/qgsmaplayerdependency.h#L67
|
||||||
|
File diff suppressed because one or more lines are too long
@ -16,7 +16,9 @@
|
|||||||
|
|
||||||
typedef QVector<QgsPointXY> QgsPolylineXY;
|
typedef QVector<QgsPointXY> QgsPolylineXY;
|
||||||
|
|
||||||
typedef QgsPointSequence QgsPolyline;
|
typedef QVector<QgsPoint> QgsPolyline;
|
||||||
|
|
||||||
|
typedef QVector<QVector< QgsPoint >> QgsMultiPolyline;
|
||||||
|
|
||||||
typedef QVector<QVector<QgsPointXY>> QgsPolygonXY;
|
typedef QVector<QVector<QgsPointXY>> QgsPolygonXY;
|
||||||
|
|
||||||
|
@ -825,12 +825,24 @@ Deletes a style from the database
|
|||||||
- msgError: a descriptive error message if any occurs
|
- msgError: a descriptive error message if any occurs
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
enum class SaveStyleResult
|
||||||
|
{
|
||||||
|
Success,
|
||||||
|
QmlGenerationFailed,
|
||||||
|
SldGenerationFailed,
|
||||||
|
DatabaseWriteFailed,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef QFlags<QgsMapLayer::SaveStyleResult> SaveStyleResults;
|
||||||
|
|
||||||
|
|
||||||
virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
||||||
bool useAsDefault, const QString &uiFileContent,
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
QString &msgError /Out/,
|
QString &msgError /Out/,
|
||||||
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) /Deprecated="Since 4.0. Use saveStyleToDatabaseV2() instead."/;
|
||||||
%Docstring
|
%Docstring
|
||||||
Saves named and sld style of the layer to the style table in the db.
|
Saves QML and SLD representations of the layer's style to a table in the
|
||||||
|
database.
|
||||||
|
|
||||||
:param name: Style name
|
:param name: Style name
|
||||||
:param description: A description of the style
|
:param description: A description of the style
|
||||||
@ -847,9 +859,33 @@ Saves named and sld style of the layer to the style table in the db.
|
|||||||
Use :py:func:`QgsProviderRegistry.styleExists()` to test in advance if a style already exists and handle this appropriately
|
Use :py:func:`QgsProviderRegistry.styleExists()` to test in advance if a style already exists and handle this appropriately
|
||||||
in your client code.
|
in your client code.
|
||||||
|
|
||||||
:return: a descriptive error message if any occurs
|
:return: - msgError: a descriptive error message if any occurs
|
||||||
|
|
||||||
|
.. deprecated:: 4.0
|
||||||
|
|
||||||
|
Use :py:func:`~QgsMapLayer.saveStyleToDatabaseV2` instead.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
QgsMapLayer::SaveStyleResults saveStyleToDatabaseV2( const QString &name, const QString &description,
|
||||||
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
|
QString &msgError /Out/,
|
||||||
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
||||||
|
%Docstring
|
||||||
|
Saves QML and SLD representations of the layer's style to a table in the
|
||||||
|
database.
|
||||||
|
|
||||||
|
:param name: Style name
|
||||||
|
:param description: A description of the style
|
||||||
|
:param useAsDefault: Set to ``True`` if style should be used as the
|
||||||
|
default style for the layer
|
||||||
|
:param uiFileContent:
|
||||||
|
:param categories: the style categories to be saved.
|
||||||
|
|
||||||
|
:return: - flags representing whether QML or SLD storing was successful
|
||||||
|
- msgError: a descriptive error message if any occurs
|
||||||
|
|
||||||
|
.. versionadded:: 4.0
|
||||||
|
%End
|
||||||
|
|
||||||
|
|
||||||
virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag /Out/, bool loadFromLocalDb,
|
virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag /Out/, bool loadFromLocalDb,
|
||||||
|
@ -217,6 +217,8 @@ Creates an OGC expression XML element from the ``exp`` expression.
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* This file has been generated automatically from *
|
* This file has been generated automatically from *
|
||||||
* *
|
* *
|
||||||
|
@ -4938,205 +4938,205 @@ QgsGeographicCoordinateNumericFormat.sortKey: src/core/numericformats/qgscoordin
|
|||||||
QgsGeographicCoordinateNumericFormat.suggestSampleValue: src/core/numericformats/qgscoordinatenumericformat.h#L53
|
QgsGeographicCoordinateNumericFormat.suggestSampleValue: src/core/numericformats/qgscoordinatenumericformat.h#L53
|
||||||
QgsGeographicCoordinateNumericFormat.visibleName: src/core/numericformats/qgscoordinatenumericformat.h#L51
|
QgsGeographicCoordinateNumericFormat.visibleName: src/core/numericformats/qgscoordinatenumericformat.h#L51
|
||||||
QgsGeographicCoordinateNumericFormat: src/core/numericformats/qgscoordinatenumericformat.h#L28
|
QgsGeographicCoordinateNumericFormat: src/core/numericformats/qgscoordinatenumericformat.h#L28
|
||||||
QgsGeometry.Error.Error: src/core/geometry/qgsgeometry.h#L2760
|
QgsGeometry.Error.Error: src/core/geometry/qgsgeometry.h#L2777
|
||||||
QgsGeometry.Error.__repr__: src/core/geometry/qgsgeometry.h#L2783
|
QgsGeometry.Error.__repr__: src/core/geometry/qgsgeometry.h#L2800
|
||||||
QgsGeometry.Error.hasWhere: src/core/geometry/qgsgeometry.h#L2780
|
QgsGeometry.Error.hasWhere: src/core/geometry/qgsgeometry.h#L2797
|
||||||
QgsGeometry.Error.what: src/core/geometry/qgsgeometry.h#L2770
|
QgsGeometry.Error.what: src/core/geometry/qgsgeometry.h#L2787
|
||||||
QgsGeometry.Error.where: src/core/geometry/qgsgeometry.h#L2775
|
QgsGeometry.Error.where: src/core/geometry/qgsgeometry.h#L2792
|
||||||
QgsGeometry.Error: src/core/geometry/qgsgeometry.h#L2751
|
QgsGeometry.Error: src/core/geometry/qgsgeometry.h#L2768
|
||||||
QgsGeometry.QVariant: src/core/geometry/qgsgeometry.h#L3180
|
QgsGeometry.QVariant: src/core/geometry/qgsgeometry.h#L3197
|
||||||
QgsGeometry.QgsGeometry: src/core/geometry/qgsgeometry.h#L184
|
QgsGeometry.QgsGeometry: src/core/geometry/qgsgeometry.h#L201
|
||||||
QgsGeometry.__repr__: src/core/geometry/qgsgeometry.h#L2185
|
QgsGeometry.__repr__: src/core/geometry/qgsgeometry.h#L2202
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L930
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L947
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L948
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L965
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L966
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L983
|
||||||
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L982
|
QgsGeometry.addPart: src/core/geometry/qgsgeometry.h#L999
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L939
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L956
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L957
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L974
|
||||||
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L975
|
QgsGeometry.addPartV2: src/core/geometry/qgsgeometry.h#L992
|
||||||
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L914
|
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L931
|
||||||
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L921
|
QgsGeometry.addRing: src/core/geometry/qgsgeometry.h#L938
|
||||||
QgsGeometry.addTopologicalPoint: src/core/geometry/qgsgeometry.h#L815
|
QgsGeometry.addTopologicalPoint: src/core/geometry/qgsgeometry.h#L832
|
||||||
QgsGeometry.adjacentVertices: src/core/geometry/qgsgeometry.h#L778
|
QgsGeometry.adjacentVertices: src/core/geometry/qgsgeometry.h#L795
|
||||||
QgsGeometry.angleAtVertex: src/core/geometry/qgsgeometry.h#L764
|
QgsGeometry.angleAtVertex: src/core/geometry/qgsgeometry.h#L781
|
||||||
QgsGeometry.applyDashPattern: src/core/geometry/qgsgeometry.h#L1372
|
QgsGeometry.applyDashPattern: src/core/geometry/qgsgeometry.h#L1389
|
||||||
QgsGeometry.area: src/core/geometry/qgsgeometry.h#L476
|
QgsGeometry.area: src/core/geometry/qgsgeometry.h#L493
|
||||||
QgsGeometry.asJson: src/core/geometry/qgsgeometry.h#L2204
|
QgsGeometry.asJson: src/core/geometry/qgsgeometry.h#L2221
|
||||||
QgsGeometry.asMultiPoint: src/core/geometry/qgsgeometry.h#L2418
|
QgsGeometry.asMultiPoint: src/core/geometry/qgsgeometry.h#L2435
|
||||||
QgsGeometry.asMultiPolygon: src/core/geometry/qgsgeometry.h#L2508
|
QgsGeometry.asMultiPolygon: src/core/geometry/qgsgeometry.h#L2525
|
||||||
QgsGeometry.asMultiPolyline: src/core/geometry/qgsgeometry.h#L2463
|
QgsGeometry.asMultiPolyline: src/core/geometry/qgsgeometry.h#L2480
|
||||||
QgsGeometry.asPoint: src/core/geometry/qgsgeometry.h#L2283
|
QgsGeometry.asPoint: src/core/geometry/qgsgeometry.h#L2300
|
||||||
QgsGeometry.asPolygon: src/core/geometry/qgsgeometry.h#L2375
|
QgsGeometry.asPolygon: src/core/geometry/qgsgeometry.h#L2392
|
||||||
QgsGeometry.asPolyline: src/core/geometry/qgsgeometry.h#L2330
|
QgsGeometry.asPolyline: src/core/geometry/qgsgeometry.h#L2347
|
||||||
QgsGeometry.asQPointF: src/core/geometry/qgsgeometry.h#L2538
|
QgsGeometry.asQPointF: src/core/geometry/qgsgeometry.h#L2555
|
||||||
QgsGeometry.asQPolygonF: src/core/geometry/qgsgeometry.h#L2551
|
QgsGeometry.asQPolygonF: src/core/geometry/qgsgeometry.h#L2568
|
||||||
QgsGeometry.asWkb: src/core/geometry/qgsgeometry.h#L2175
|
QgsGeometry.asWkb: src/core/geometry/qgsgeometry.h#L2192
|
||||||
QgsGeometry.asWkt: src/core/geometry/qgsgeometry.h#L2182
|
QgsGeometry.asWkt: src/core/geometry/qgsgeometry.h#L2199
|
||||||
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2626
|
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2643
|
||||||
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2627
|
QgsGeometry.avoidIntersections: src/core/geometry/qgsgeometry.h#L2644
|
||||||
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2640
|
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2657
|
||||||
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2641
|
QgsGeometry.avoidIntersectionsV2: src/core/geometry/qgsgeometry.h#L2658
|
||||||
QgsGeometry.boundingBox3D: src/core/geometry/qgsgeometry.h#L1206
|
QgsGeometry.boundingBox3D: src/core/geometry/qgsgeometry.h#L1223
|
||||||
QgsGeometry.boundingBox: src/core/geometry/qgsgeometry.h#L1199
|
QgsGeometry.boundingBox: src/core/geometry/qgsgeometry.h#L1216
|
||||||
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1447
|
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1464
|
||||||
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1457
|
QgsGeometry.boundingBoxIntersects: src/core/geometry/qgsgeometry.h#L1474
|
||||||
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1544
|
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1561
|
||||||
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1557
|
QgsGeometry.buffer: src/core/geometry/qgsgeometry.h#L1574
|
||||||
QgsGeometry.centroid: src/core/geometry/qgsgeometry.h#L1686
|
QgsGeometry.centroid: src/core/geometry/qgsgeometry.h#L1703
|
||||||
QgsGeometry.clipped: src/core/geometry/qgsgeometry.h#L2022
|
QgsGeometry.clipped: src/core/geometry/qgsgeometry.h#L2039
|
||||||
QgsGeometry.closestSegmentWithContext: src/core/geometry/qgsgeometry.h#L907
|
QgsGeometry.closestSegmentWithContext: src/core/geometry/qgsgeometry.h#L924
|
||||||
QgsGeometry.closestVertex: src/core/geometry/qgsgeometry.h#L747
|
QgsGeometry.closestVertex: src/core/geometry/qgsgeometry.h#L764
|
||||||
QgsGeometry.closestVertexWithContext: src/core/geometry/qgsgeometry.h#L894
|
QgsGeometry.closestVertexWithContext: src/core/geometry/qgsgeometry.h#L911
|
||||||
QgsGeometry.collectGeometry: src/core/geometry/qgsgeometry.h#L330
|
QgsGeometry.collectGeometry: src/core/geometry/qgsgeometry.h#L347
|
||||||
QgsGeometry.combine: src/core/geometry/qgsgeometry.h#L2038
|
QgsGeometry.combine: src/core/geometry/qgsgeometry.h#L2055
|
||||||
QgsGeometry.compare: src/core/geometry/qgsgeometry.h#L3013
|
QgsGeometry.compare: src/core/geometry/qgsgeometry.h#L3030
|
||||||
QgsGeometry.concaveHull: src/core/geometry/qgsgeometry.h#L1816
|
QgsGeometry.concaveHull: src/core/geometry/qgsgeometry.h#L1833
|
||||||
QgsGeometry.constGet: src/core/geometry/qgsgeometry.h#L205
|
QgsGeometry.constGet: src/core/geometry/qgsgeometry.h#L222
|
||||||
QgsGeometry.constParts: src/core/geometry/qgsgeometry.h#L656
|
QgsGeometry.constParts: src/core/geometry/qgsgeometry.h#L673
|
||||||
QgsGeometry.constrainedDelaunayTriangulation: src/core/geometry/qgsgeometry.h#L1858
|
QgsGeometry.constrainedDelaunayTriangulation: src/core/geometry/qgsgeometry.h#L1875
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1462
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1479
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1469
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1486
|
||||||
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1480
|
QgsGeometry.contains: src/core/geometry/qgsgeometry.h#L1497
|
||||||
QgsGeometry.convertGeometryCollectionToSubclass: src/core/geometry/qgsgeometry.h#L2613
|
QgsGeometry.convertGeometryCollectionToSubclass: src/core/geometry/qgsgeometry.h#L2630
|
||||||
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3167
|
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3184
|
||||||
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3174
|
QgsGeometry.convertPointList: src/core/geometry/qgsgeometry.h#L3191
|
||||||
QgsGeometry.convertToCurvedMultiType: src/core/geometry/qgsgeometry.h#L2591
|
QgsGeometry.convertToCurvedMultiType: src/core/geometry/qgsgeometry.h#L2608
|
||||||
QgsGeometry.convertToCurves: src/core/geometry/qgsgeometry.h#L1671
|
QgsGeometry.convertToCurves: src/core/geometry/qgsgeometry.h#L1688
|
||||||
QgsGeometry.convertToMultiType: src/core/geometry/qgsgeometry.h#L2574
|
QgsGeometry.convertToMultiType: src/core/geometry/qgsgeometry.h#L2591
|
||||||
QgsGeometry.convertToSingleType: src/core/geometry/qgsgeometry.h#L2602
|
QgsGeometry.convertToSingleType: src/core/geometry/qgsgeometry.h#L2619
|
||||||
QgsGeometry.convertToStraightSegment: src/core/geometry/qgsgeometry.h#L2847
|
QgsGeometry.convertToStraightSegment: src/core/geometry/qgsgeometry.h#L2864
|
||||||
QgsGeometry.convertToType: src/core/geometry/qgsgeometry.h#L2256
|
QgsGeometry.convertToType: src/core/geometry/qgsgeometry.h#L2273
|
||||||
QgsGeometry.convexHull: src/core/geometry/qgsgeometry.h#L1801
|
QgsGeometry.convexHull: src/core/geometry/qgsgeometry.h#L1818
|
||||||
QgsGeometry.createGeometryEngine: src/core/geometry/qgsgeometry.h#L3160
|
QgsGeometry.createGeometryEngine: src/core/geometry/qgsgeometry.h#L3177
|
||||||
QgsGeometry.createPolygonFromQPolygonF: src/core/geometry/qgsgeometry.h#L2956
|
QgsGeometry.createPolygonFromQPolygonF: src/core/geometry/qgsgeometry.h#L2973
|
||||||
QgsGeometry.createPolylineFromQPolygonF: src/core/geometry/qgsgeometry.h#L2947
|
QgsGeometry.createPolylineFromQPolygonF: src/core/geometry/qgsgeometry.h#L2964
|
||||||
QgsGeometry.createWedgeBuffer: src/core/geometry/qgsgeometry.h#L347
|
QgsGeometry.createWedgeBuffer: src/core/geometry/qgsgeometry.h#L364
|
||||||
QgsGeometry.createWedgeBufferFromAngles: src/core/geometry/qgsgeometry.h#L363
|
QgsGeometry.createWedgeBufferFromAngles: src/core/geometry/qgsgeometry.h#L380
|
||||||
QgsGeometry.crosses: src/core/geometry/qgsgeometry.h#L1535
|
QgsGeometry.crosses: src/core/geometry/qgsgeometry.h#L1552
|
||||||
QgsGeometry.delaunayTriangulation: src/core/geometry/qgsgeometry.h#L1844
|
QgsGeometry.delaunayTriangulation: src/core/geometry/qgsgeometry.h#L1861
|
||||||
QgsGeometry.deletePart: src/core/geometry/qgsgeometry.h#L2564
|
QgsGeometry.deletePart: src/core/geometry/qgsgeometry.h#L2581
|
||||||
QgsGeometry.deleteRing: src/core/geometry/qgsgeometry.h#L2558
|
QgsGeometry.deleteRing: src/core/geometry/qgsgeometry.h#L2575
|
||||||
QgsGeometry.deleteVertex: src/core/geometry/qgsgeometry.h#L846
|
QgsGeometry.deleteVertex: src/core/geometry/qgsgeometry.h#L863
|
||||||
QgsGeometry.densifyByCount: src/core/geometry/qgsgeometry.h#L1639
|
QgsGeometry.densifyByCount: src/core/geometry/qgsgeometry.h#L1656
|
||||||
QgsGeometry.densifyByDistance: src/core/geometry/qgsgeometry.h#L1654
|
QgsGeometry.densifyByDistance: src/core/geometry/qgsgeometry.h#L1671
|
||||||
QgsGeometry.difference: src/core/geometry/qgsgeometry.h#L2063
|
QgsGeometry.difference: src/core/geometry/qgsgeometry.h#L2080
|
||||||
QgsGeometry.disjoint: src/core/geometry/qgsgeometry.h#L1491
|
QgsGeometry.disjoint: src/core/geometry/qgsgeometry.h#L1508
|
||||||
QgsGeometry.distance: src/core/geometry/qgsgeometry.h#L500
|
QgsGeometry.distance: src/core/geometry/qgsgeometry.h#L517
|
||||||
QgsGeometry.distanceToVertex: src/core/geometry/qgsgeometry.h#L756
|
QgsGeometry.distanceToVertex: src/core/geometry/qgsgeometry.h#L773
|
||||||
QgsGeometry.draw: src/core/geometry/qgsgeometry.h#L2866
|
QgsGeometry.draw: src/core/geometry/qgsgeometry.h#L2883
|
||||||
QgsGeometry.equals: src/core/geometry/qgsgeometry.h#L414
|
QgsGeometry.equals: src/core/geometry/qgsgeometry.h#L431
|
||||||
QgsGeometry.extendLine: src/core/geometry/qgsgeometry.h#L1626
|
QgsGeometry.extendLine: src/core/geometry/qgsgeometry.h#L1643
|
||||||
QgsGeometry.extrude: src/core/geometry/qgsgeometry.h#L2079
|
QgsGeometry.extrude: src/core/geometry/qgsgeometry.h#L2096
|
||||||
QgsGeometry.forcePolygonClockwise: src/core/geometry/qgsgeometry.h#L2733
|
QgsGeometry.forcePolygonClockwise: src/core/geometry/qgsgeometry.h#L2750
|
||||||
QgsGeometry.forcePolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2745
|
QgsGeometry.forcePolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2762
|
||||||
QgsGeometry.forceRHR: src/core/geometry/qgsgeometry.h#L2721
|
QgsGeometry.forceRHR: src/core/geometry/qgsgeometry.h#L2738
|
||||||
QgsGeometry.frechetDistance: src/core/geometry/qgsgeometry.h#L709
|
QgsGeometry.frechetDistance: src/core/geometry/qgsgeometry.h#L726
|
||||||
QgsGeometry.frechetDistanceDensify: src/core/geometry/qgsgeometry.h#L733
|
QgsGeometry.frechetDistanceDensify: src/core/geometry/qgsgeometry.h#L750
|
||||||
QgsGeometry.fromBox3D: src/core/geometry/qgsgeometry.h#L326
|
QgsGeometry.fromBox3D: src/core/geometry/qgsgeometry.h#L343
|
||||||
QgsGeometry.fromMultiPointXY: src/core/geometry/qgsgeometry.h#L255
|
QgsGeometry.fromMultiPointXY: src/core/geometry/qgsgeometry.h#L272
|
||||||
QgsGeometry.fromMultiPolygonXY: src/core/geometry/qgsgeometry.h#L314
|
QgsGeometry.fromMultiPolygonXY: src/core/geometry/qgsgeometry.h#L331
|
||||||
QgsGeometry.fromMultiPolylineXY: src/core/geometry/qgsgeometry.h#L282
|
QgsGeometry.fromMultiPolylineXY: src/core/geometry/qgsgeometry.h#L299
|
||||||
QgsGeometry.fromPoint: src/core/geometry/qgsgeometry.h#L252
|
QgsGeometry.fromPoint: src/core/geometry/qgsgeometry.h#L269
|
||||||
QgsGeometry.fromPointXY: src/core/geometry/qgsgeometry.h#L245
|
QgsGeometry.fromPointXY: src/core/geometry/qgsgeometry.h#L262
|
||||||
QgsGeometry.fromPolygonXY: src/core/geometry/qgsgeometry.h#L309
|
QgsGeometry.fromPolygonXY: src/core/geometry/qgsgeometry.h#L326
|
||||||
QgsGeometry.fromPolyline: src/core/geometry/qgsgeometry.h#L277
|
QgsGeometry.fromPolyline: src/core/geometry/qgsgeometry.h#L294
|
||||||
QgsGeometry.fromPolylineXY: src/core/geometry/qgsgeometry.h#L267
|
QgsGeometry.fromPolylineXY: src/core/geometry/qgsgeometry.h#L284
|
||||||
QgsGeometry.fromQPointF: src/core/geometry/qgsgeometry.h#L2930
|
QgsGeometry.fromQPointF: src/core/geometry/qgsgeometry.h#L2947
|
||||||
QgsGeometry.fromQPolygonF: src/core/geometry/qgsgeometry.h#L2938
|
QgsGeometry.fromQPolygonF: src/core/geometry/qgsgeometry.h#L2955
|
||||||
QgsGeometry.fromRect: src/core/geometry/qgsgeometry.h#L317
|
QgsGeometry.fromRect: src/core/geometry/qgsgeometry.h#L334
|
||||||
QgsGeometry.fromWkb: src/core/geometry/qgsgeometry.h#L376
|
QgsGeometry.fromWkb: src/core/geometry/qgsgeometry.h#L393
|
||||||
QgsGeometry.fromWkt: src/core/geometry/qgsgeometry.h#L243
|
QgsGeometry.fromWkt: src/core/geometry/qgsgeometry.h#L260
|
||||||
QgsGeometry.get: src/core/geometry/qgsgeometry.h#L218
|
QgsGeometry.get: src/core/geometry/qgsgeometry.h#L235
|
||||||
QgsGeometry.hausdorffDistance: src/core/geometry/qgsgeometry.h#L674
|
QgsGeometry.hausdorffDistance: src/core/geometry/qgsgeometry.h#L691
|
||||||
QgsGeometry.hausdorffDistanceDensify: src/core/geometry/qgsgeometry.h#L693
|
QgsGeometry.hausdorffDistanceDensify: src/core/geometry/qgsgeometry.h#L710
|
||||||
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L792
|
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L809
|
||||||
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L806
|
QgsGeometry.insertVertex: src/core/geometry/qgsgeometry.h#L823
|
||||||
QgsGeometry.interpolate: src/core/geometry/qgsgeometry.h#L1979
|
QgsGeometry.interpolate: src/core/geometry/qgsgeometry.h#L1996
|
||||||
QgsGeometry.interpolateAngle: src/core/geometry/qgsgeometry.h#L2001
|
QgsGeometry.interpolateAngle: src/core/geometry/qgsgeometry.h#L2018
|
||||||
QgsGeometry.intersection: src/core/geometry/qgsgeometry.h#L2014
|
QgsGeometry.intersection: src/core/geometry/qgsgeometry.h#L2031
|
||||||
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1421
|
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1438
|
||||||
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1437
|
QgsGeometry.intersects: src/core/geometry/qgsgeometry.h#L1454
|
||||||
QgsGeometry.isAxisParallelRectangle: src/core/geometry/qgsgeometry.h#L463
|
QgsGeometry.isAxisParallelRectangle: src/core/geometry/qgsgeometry.h#L480
|
||||||
QgsGeometry.isEmpty: src/core/geometry/qgsgeometry.h#L396
|
QgsGeometry.isEmpty: src/core/geometry/qgsgeometry.h#L413
|
||||||
QgsGeometry.isGeosEqual: src/core/geometry/qgsgeometry.h#L431
|
QgsGeometry.isGeosEqual: src/core/geometry/qgsgeometry.h#L448
|
||||||
QgsGeometry.isGeosValid: src/core/geometry/qgsgeometry.h#L439
|
QgsGeometry.isGeosValid: src/core/geometry/qgsgeometry.h#L456
|
||||||
QgsGeometry.isMultipart: src/core/geometry/qgsgeometry.h#L399
|
QgsGeometry.isMultipart: src/core/geometry/qgsgeometry.h#L416
|
||||||
QgsGeometry.isNull: src/core/geometry/qgsgeometry.h#L240
|
QgsGeometry.isNull: src/core/geometry/qgsgeometry.h#L257
|
||||||
QgsGeometry.isPolygonClockwise: src/core/geometry/qgsgeometry.h#L2704
|
QgsGeometry.isPolygonClockwise: src/core/geometry/qgsgeometry.h#L2721
|
||||||
QgsGeometry.isPolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2689
|
QgsGeometry.isPolygonCounterClockwise: src/core/geometry/qgsgeometry.h#L2706
|
||||||
QgsGeometry.isSimple: src/core/geometry/qgsgeometry.h#L448
|
QgsGeometry.isSimple: src/core/geometry/qgsgeometry.h#L465
|
||||||
QgsGeometry.largestEmptyCircle: src/core/geometry/qgsgeometry.h#L1739
|
QgsGeometry.largestEmptyCircle: src/core/geometry/qgsgeometry.h#L1756
|
||||||
QgsGeometry.lastError: src/core/geometry/qgsgeometry.h#L2897
|
QgsGeometry.lastError: src/core/geometry/qgsgeometry.h#L2914
|
||||||
QgsGeometry.length: src/core/geometry/qgsgeometry.h#L491
|
QgsGeometry.length: src/core/geometry/qgsgeometry.h#L508
|
||||||
QgsGeometry.lineLocatePoint: src/core/geometry/qgsgeometry.h#L1991
|
QgsGeometry.lineLocatePoint: src/core/geometry/qgsgeometry.h#L2008
|
||||||
QgsGeometry.makeDifference: src/core/geometry/qgsgeometry.h#L1193
|
QgsGeometry.makeDifference: src/core/geometry/qgsgeometry.h#L1210
|
||||||
QgsGeometry.makeValid: src/core/geometry/qgsgeometry.h#L2663
|
QgsGeometry.makeValid: src/core/geometry/qgsgeometry.h#L2680
|
||||||
QgsGeometry.mapToPixel: src/core/geometry/qgsgeometry.h#L2860
|
QgsGeometry.mapToPixel: src/core/geometry/qgsgeometry.h#L2877
|
||||||
QgsGeometry.mergeLines: src/core/geometry/qgsgeometry.h#L2050
|
QgsGeometry.mergeLines: src/core/geometry/qgsgeometry.h#L2067
|
||||||
QgsGeometry.minimalEnclosingCircle: src/core/geometry/qgsgeometry.h#L1240
|
QgsGeometry.minimalEnclosingCircle: src/core/geometry/qgsgeometry.h#L1257
|
||||||
QgsGeometry.minimumClearance: src/core/geometry/qgsgeometry.h#L1778
|
QgsGeometry.minimumClearance: src/core/geometry/qgsgeometry.h#L1795
|
||||||
QgsGeometry.minimumClearanceLine: src/core/geometry/qgsgeometry.h#L1791
|
QgsGeometry.minimumClearanceLine: src/core/geometry/qgsgeometry.h#L1808
|
||||||
QgsGeometry.minimumWidth: src/core/geometry/qgsgeometry.h#L1755
|
QgsGeometry.minimumWidth: src/core/geometry/qgsgeometry.h#L1772
|
||||||
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L824
|
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L841
|
||||||
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L833
|
QgsGeometry.moveVertex: src/core/geometry/qgsgeometry.h#L850
|
||||||
QgsGeometry.nearestPoint: src/core/geometry/qgsgeometry.h#L875
|
QgsGeometry.nearestPoint: src/core/geometry/qgsgeometry.h#L892
|
||||||
QgsGeometry.node: src/core/geometry/qgsgeometry.h#L1924
|
QgsGeometry.node: src/core/geometry/qgsgeometry.h#L1941
|
||||||
QgsGeometry.normalize: src/core/geometry/qgsgeometry.h#L2820
|
QgsGeometry.normalize: src/core/geometry/qgsgeometry.h#L2837
|
||||||
QgsGeometry.offsetCurve: src/core/geometry/qgsgeometry.h#L1566
|
QgsGeometry.offsetCurve: src/core/geometry/qgsgeometry.h#L1583
|
||||||
QgsGeometry.orientedMinimumBoundingBox: src/core/geometry/qgsgeometry.h#L1220
|
QgsGeometry.orientedMinimumBoundingBox: src/core/geometry/qgsgeometry.h#L1237
|
||||||
QgsGeometry.orthogonalize: src/core/geometry/qgsgeometry.h#L1255
|
QgsGeometry.orthogonalize: src/core/geometry/qgsgeometry.h#L1272
|
||||||
QgsGeometry.overlaps: src/core/geometry/qgsgeometry.h#L1513
|
QgsGeometry.overlaps: src/core/geometry/qgsgeometry.h#L1530
|
||||||
QgsGeometry.parts: src/core/geometry/qgsgeometry.h#L622
|
QgsGeometry.parts: src/core/geometry/qgsgeometry.h#L639
|
||||||
QgsGeometry.pointOnSurface: src/core/geometry/qgsgeometry.h#L1701
|
QgsGeometry.pointOnSurface: src/core/geometry/qgsgeometry.h#L1718
|
||||||
QgsGeometry.poleOfInaccessibility: src/core/geometry/qgsgeometry.h#L1714
|
QgsGeometry.poleOfInaccessibility: src/core/geometry/qgsgeometry.h#L1731
|
||||||
QgsGeometry.polygonOrientation: src/core/geometry/qgsgeometry.h#L2674
|
QgsGeometry.polygonOrientation: src/core/geometry/qgsgeometry.h#L2691
|
||||||
QgsGeometry.polygonize: src/core/geometry/qgsgeometry.h#L2839
|
QgsGeometry.polygonize: src/core/geometry/qgsgeometry.h#L2856
|
||||||
QgsGeometry.randomPointsInPolygon: src/core/geometry/qgsgeometry.h#L2136
|
QgsGeometry.randomPointsInPolygon: src/core/geometry/qgsgeometry.h#L2153
|
||||||
QgsGeometry.removeDuplicateNodes: src/core/geometry/qgsgeometry.h#L1410
|
QgsGeometry.removeDuplicateNodes: src/core/geometry/qgsgeometry.h#L1427
|
||||||
QgsGeometry.removeInteriorRings: src/core/geometry/qgsgeometry.h#L989
|
QgsGeometry.removeInteriorRings: src/core/geometry/qgsgeometry.h#L1006
|
||||||
QgsGeometry.requiresConversionToStraightSegments: src/core/geometry/qgsgeometry.h#L2854
|
QgsGeometry.requiresConversionToStraightSegments: src/core/geometry/qgsgeometry.h#L2871
|
||||||
QgsGeometry.reshapeGeometry: src/core/geometry/qgsgeometry.h#L1178
|
QgsGeometry.reshapeGeometry: src/core/geometry/qgsgeometry.h#L1195
|
||||||
QgsGeometry.rotate: src/core/geometry/qgsgeometry.h#L1029
|
QgsGeometry.rotate: src/core/geometry/qgsgeometry.h#L1046
|
||||||
QgsGeometry.roundWaves: src/core/geometry/qgsgeometry.h#L1337
|
QgsGeometry.roundWaves: src/core/geometry/qgsgeometry.h#L1354
|
||||||
QgsGeometry.roundWavesRandomized: src/core/geometry/qgsgeometry.h#L1357
|
QgsGeometry.roundWavesRandomized: src/core/geometry/qgsgeometry.h#L1374
|
||||||
QgsGeometry.set: src/core/geometry/qgsgeometry.h#L231
|
QgsGeometry.set: src/core/geometry/qgsgeometry.h#L248
|
||||||
QgsGeometry.sharedPaths: src/core/geometry/qgsgeometry.h#L1940
|
QgsGeometry.sharedPaths: src/core/geometry/qgsgeometry.h#L1957
|
||||||
QgsGeometry.shortestLine: src/core/geometry/qgsgeometry.h#L886
|
QgsGeometry.shortestLine: src/core/geometry/qgsgeometry.h#L903
|
||||||
QgsGeometry.simplify: src/core/geometry/qgsgeometry.h#L1629
|
QgsGeometry.simplify: src/core/geometry/qgsgeometry.h#L1646
|
||||||
QgsGeometry.simplifyCoverageVW: src/core/geometry/qgsgeometry.h#L1899
|
QgsGeometry.simplifyCoverageVW: src/core/geometry/qgsgeometry.h#L1916
|
||||||
QgsGeometry.singleSidedBuffer: src/core/geometry/qgsgeometry.h#L1582
|
QgsGeometry.singleSidedBuffer: src/core/geometry/qgsgeometry.h#L1599
|
||||||
QgsGeometry.smooth: src/core/geometry/qgsgeometry.h#L3118
|
QgsGeometry.smooth: src/core/geometry/qgsgeometry.h#L3135
|
||||||
QgsGeometry.snappedToGrid: src/core/geometry/qgsgeometry.h#L1389
|
QgsGeometry.snappedToGrid: src/core/geometry/qgsgeometry.h#L1406
|
||||||
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1092
|
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1109
|
||||||
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1172
|
QgsGeometry.splitGeometry: src/core/geometry/qgsgeometry.h#L1189
|
||||||
QgsGeometry.sqrDistToVertexAt: src/core/geometry/qgsgeometry.h#L869
|
QgsGeometry.sqrDistToVertexAt: src/core/geometry/qgsgeometry.h#L886
|
||||||
QgsGeometry.squareWaves: src/core/geometry/qgsgeometry.h#L1303
|
QgsGeometry.squareWaves: src/core/geometry/qgsgeometry.h#L1320
|
||||||
QgsGeometry.squareWavesRandomized: src/core/geometry/qgsgeometry.h#L1323
|
QgsGeometry.squareWavesRandomized: src/core/geometry/qgsgeometry.h#L1340
|
||||||
QgsGeometry.subdivide: src/core/geometry/qgsgeometry.h#L1963
|
QgsGeometry.subdivide: src/core/geometry/qgsgeometry.h#L1980
|
||||||
QgsGeometry.symDifference: src/core/geometry/qgsgeometry.h#L2076
|
QgsGeometry.symDifference: src/core/geometry/qgsgeometry.h#L2093
|
||||||
QgsGeometry.taperedBuffer: src/core/geometry/qgsgeometry.h#L1603
|
QgsGeometry.taperedBuffer: src/core/geometry/qgsgeometry.h#L1620
|
||||||
QgsGeometry.toggleCircularAtVertex: src/core/geometry/qgsgeometry.h#L855
|
QgsGeometry.toggleCircularAtVertex: src/core/geometry/qgsgeometry.h#L872
|
||||||
QgsGeometry.touches: src/core/geometry/qgsgeometry.h#L1502
|
QgsGeometry.touches: src/core/geometry/qgsgeometry.h#L1519
|
||||||
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1011
|
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1028
|
||||||
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1021
|
QgsGeometry.transform: src/core/geometry/qgsgeometry.h#L1038
|
||||||
QgsGeometry.translate: src/core/geometry/qgsgeometry.h#L995
|
QgsGeometry.translate: src/core/geometry/qgsgeometry.h#L1012
|
||||||
QgsGeometry.triangularWaves: src/core/geometry/qgsgeometry.h#L1269
|
QgsGeometry.triangularWaves: src/core/geometry/qgsgeometry.h#L1286
|
||||||
QgsGeometry.triangularWavesRandomized: src/core/geometry/qgsgeometry.h#L1289
|
QgsGeometry.triangularWavesRandomized: src/core/geometry/qgsgeometry.h#L1306
|
||||||
QgsGeometry.type: src/core/geometry/qgsgeometry.h#L388
|
QgsGeometry.type: src/core/geometry/qgsgeometry.h#L405
|
||||||
QgsGeometry.unaryUnion: src/core/geometry/qgsgeometry.h#L2830
|
QgsGeometry.unaryUnion: src/core/geometry/qgsgeometry.h#L2847
|
||||||
QgsGeometry.unionCoverage: src/core/geometry/qgsgeometry.h#L1912
|
QgsGeometry.unionCoverage: src/core/geometry/qgsgeometry.h#L1929
|
||||||
QgsGeometry.validateCoverage: src/core/geometry/qgsgeometry.h#L1877
|
QgsGeometry.validateCoverage: src/core/geometry/qgsgeometry.h#L1894
|
||||||
QgsGeometry.validateGeometry: src/core/geometry/qgsgeometry.h#L2809
|
QgsGeometry.validateGeometry: src/core/geometry/qgsgeometry.h#L2826
|
||||||
QgsGeometry.variableWidthBufferByM: src/core/geometry/qgsgeometry.h#L1619
|
QgsGeometry.variableWidthBufferByM: src/core/geometry/qgsgeometry.h#L1636
|
||||||
QgsGeometry.vertexAt: src/core/geometry/qgsgeometry.h#L862
|
QgsGeometry.vertexAt: src/core/geometry/qgsgeometry.h#L879
|
||||||
QgsGeometry.vertexIdFromVertexNr: src/core/geometry/qgsgeometry.h#L2877
|
QgsGeometry.vertexIdFromVertexNr: src/core/geometry/qgsgeometry.h#L2894
|
||||||
QgsGeometry.vertexNrFromVertexId: src/core/geometry/qgsgeometry.h#L2889
|
QgsGeometry.vertexNrFromVertexId: src/core/geometry/qgsgeometry.h#L2906
|
||||||
QgsGeometry.vertices: src/core/geometry/qgsgeometry.h#L540
|
QgsGeometry.vertices: src/core/geometry/qgsgeometry.h#L557
|
||||||
QgsGeometry.voronoiDiagram: src/core/geometry/qgsgeometry.h#L1832
|
QgsGeometry.voronoiDiagram: src/core/geometry/qgsgeometry.h#L1849
|
||||||
QgsGeometry.within: src/core/geometry/qgsgeometry.h#L1524
|
QgsGeometry.within: src/core/geometry/qgsgeometry.h#L1541
|
||||||
QgsGeometry.wkbSize: src/core/geometry/qgsgeometry.h#L2167
|
QgsGeometry.wkbSize: src/core/geometry/qgsgeometry.h#L2184
|
||||||
QgsGeometry.wkbType: src/core/geometry/qgsgeometry.h#L382
|
QgsGeometry.wkbType: src/core/geometry/qgsgeometry.h#L399
|
||||||
QgsGeometry: src/core/geometry/qgsgeometry.h#L161
|
QgsGeometry: src/core/geometry/qgsgeometry.h#L178
|
||||||
QgsGeometryCollection.__bool__: src/core/geometry/qgsgeometrycollection.h#L136
|
QgsGeometryCollection.__bool__: src/core/geometry/qgsgeometrycollection.h#L136
|
||||||
QgsGeometryCollection.__delitem__: src/core/geometry/qgsgeometrycollection.h#L401
|
QgsGeometryCollection.__delitem__: src/core/geometry/qgsgeometrycollection.h#L401
|
||||||
QgsGeometryCollection.__getitem__: src/core/geometry/qgsgeometrycollection.h#L373
|
QgsGeometryCollection.__getitem__: src/core/geometry/qgsgeometrycollection.h#L373
|
||||||
@ -5306,9 +5306,9 @@ QgsGeometryPaintDevice.painterPathToGeometry: src/core/painting/qgsgeometrypaint
|
|||||||
QgsGeometryPaintDevice.setSimplificationTolerance: src/core/painting/qgsgeometrypaintdevice.h#L149
|
QgsGeometryPaintDevice.setSimplificationTolerance: src/core/painting/qgsgeometrypaintdevice.h#L149
|
||||||
QgsGeometryPaintDevice.setStrokedPathSegments: src/core/painting/qgsgeometrypaintdevice.h#L140
|
QgsGeometryPaintDevice.setStrokedPathSegments: src/core/painting/qgsgeometrypaintdevice.h#L140
|
||||||
QgsGeometryPaintDevice: src/core/painting/qgsgeometrypaintdevice.h#L122
|
QgsGeometryPaintDevice: src/core/painting/qgsgeometrypaintdevice.h#L122
|
||||||
QgsGeometryParameters.gridSize: src/core/geometry/qgsgeometry.h#L122
|
QgsGeometryParameters.gridSize: src/core/geometry/qgsgeometry.h#L139
|
||||||
QgsGeometryParameters.setGridSize: src/core/geometry/qgsgeometry.h#L134
|
QgsGeometryParameters.setGridSize: src/core/geometry/qgsgeometry.h#L151
|
||||||
QgsGeometryParameters: src/core/geometry/qgsgeometry.h#L108
|
QgsGeometryParameters: src/core/geometry/qgsgeometry.h#L125
|
||||||
QgsGeometryPartIterator.__iter__: src/core/geometry/qgsabstractgeometry.h#L1286
|
QgsGeometryPartIterator.__iter__: src/core/geometry/qgsabstractgeometry.h#L1286
|
||||||
QgsGeometryPartIterator.__next__: src/core/geometry/qgsabstractgeometry.h#L1291
|
QgsGeometryPartIterator.__next__: src/core/geometry/qgsabstractgeometry.h#L1291
|
||||||
QgsGeometryPartIterator.hasNext: src/core/geometry/qgsabstractgeometry.h#L1280
|
QgsGeometryPartIterator.hasNext: src/core/geometry/qgsabstractgeometry.h#L1280
|
||||||
@ -5508,13 +5508,13 @@ QgsGlowEffect.shadeExterior: src/core/effects/qgsgloweffect.h#L274
|
|||||||
QgsGlowEffect.spread: src/core/effects/qgsgloweffect.h#L73
|
QgsGlowEffect.spread: src/core/effects/qgsgloweffect.h#L73
|
||||||
QgsGlowEffect.spreadUnit: src/core/effects/qgsgloweffect.h#L91
|
QgsGlowEffect.spreadUnit: src/core/effects/qgsgloweffect.h#L91
|
||||||
QgsGlowEffect: src/core/effects/qgsgloweffect.h#L37
|
QgsGlowEffect: src/core/effects/qgsgloweffect.h#L37
|
||||||
QgsGml.crs: src/core/qgsgml.h#L431
|
QgsGml.crs: src/core/qgsgml.h#L432
|
||||||
QgsGml.dataProgressAndSteps: src/core/qgsgml.h#L455
|
QgsGml.dataProgressAndSteps: src/core/qgsgml.h#L456
|
||||||
QgsGml.dataReadProgress: src/core/qgsgml.h#L440
|
QgsGml.dataReadProgress: src/core/qgsgml.h#L441
|
||||||
QgsGml.getFeatures: src/core/qgsgml.h#L408
|
QgsGml.getFeatures: src/core/qgsgml.h#L409
|
||||||
QgsGml.getFeatures: src/core/qgsgml.h#L420
|
QgsGml.getFeatures: src/core/qgsgml.h#L421
|
||||||
QgsGml.totalStepsUpdate: src/core/qgsgml.h#L447
|
QgsGml.totalStepsUpdate: src/core/qgsgml.h#L448
|
||||||
QgsGml: src/core/qgsgml.h#L387
|
QgsGml: src/core/qgsgml.h#L388
|
||||||
QgsGmlFeatureClass.fieldIndex: src/core/qgsgmlschema.h#L49
|
QgsGmlFeatureClass.fieldIndex: src/core/qgsgmlschema.h#L49
|
||||||
QgsGmlFeatureClass.path: src/core/qgsgmlschema.h#L51
|
QgsGmlFeatureClass.path: src/core/qgsgmlschema.h#L51
|
||||||
QgsGmlFeatureClass: src/core/qgsgmlschema.h#L40
|
QgsGmlFeatureClass: src/core/qgsgmlschema.h#L40
|
||||||
@ -8951,219 +8951,220 @@ QgsMapInfoSymbolConverter.convertFillSymbol: src/core/symbology/qgsmapinfosymbol
|
|||||||
QgsMapInfoSymbolConverter.convertLineSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L75
|
QgsMapInfoSymbolConverter.convertLineSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L75
|
||||||
QgsMapInfoSymbolConverter.convertMarkerSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L91
|
QgsMapInfoSymbolConverter.convertMarkerSymbol: src/core/symbology/qgsmapinfosymbolconverter.h#L91
|
||||||
QgsMapInfoSymbolConverter: src/core/symbology/qgsmapinfosymbolconverter.h#L66
|
QgsMapInfoSymbolConverter: src/core/symbology/qgsmapinfosymbolconverter.h#L66
|
||||||
QgsMapLayer.__repr__: src/core/qgsmaplayer.h#L1915
|
QgsMapLayer.__repr__: src/core/qgsmaplayer.h#L1955
|
||||||
QgsMapLayer.abstract: src/core/qgsmaplayer.h#L356
|
QgsMapLayer.abstract: src/core/qgsmaplayer.h#L356
|
||||||
QgsMapLayer.accept: src/core/qgsmaplayer.h#L1742
|
QgsMapLayer.accept: src/core/qgsmaplayer.h#L1782
|
||||||
QgsMapLayer.appendError: src/core/qgsmaplayer.h#L2279
|
QgsMapLayer.appendError: src/core/qgsmaplayer.h#L2319
|
||||||
QgsMapLayer.attribution: src/core/qgsmaplayer.h#L412
|
QgsMapLayer.attribution: src/core/qgsmaplayer.h#L412
|
||||||
QgsMapLayer.attributionUrl: src/core/qgsmaplayer.h#L426
|
QgsMapLayer.attributionUrl: src/core/qgsmaplayer.h#L426
|
||||||
QgsMapLayer.autoRefreshInterval: src/core/qgsmaplayer.h#L1636
|
QgsMapLayer.autoRefreshInterval: src/core/qgsmaplayer.h#L1676
|
||||||
QgsMapLayer.autoRefreshIntervalChanged: src/core/qgsmaplayer.h#L2080
|
QgsMapLayer.autoRefreshIntervalChanged: src/core/qgsmaplayer.h#L2120
|
||||||
QgsMapLayer.autoRefreshMode: src/core/qgsmaplayer.h#L1628
|
QgsMapLayer.autoRefreshMode: src/core/qgsmaplayer.h#L1668
|
||||||
QgsMapLayer.beforeResolveReferences: src/core/qgsmaplayer.h#L1938
|
QgsMapLayer.beforeResolveReferences: src/core/qgsmaplayer.h#L1978
|
||||||
QgsMapLayer.blendMode: src/core/qgsmaplayer.h#L516
|
QgsMapLayer.blendMode: src/core/qgsmaplayer.h#L516
|
||||||
QgsMapLayer.blendModeChanged: src/core/qgsmaplayer.h#L2011
|
QgsMapLayer.blendModeChanged: src/core/qgsmaplayer.h#L2051
|
||||||
QgsMapLayer.clone: src/core/qgsmaplayer.h#L214
|
QgsMapLayer.clone: src/core/qgsmaplayer.h#L214
|
||||||
QgsMapLayer.clone: src/core/qgsmaplayer.h#L2187
|
QgsMapLayer.clone: src/core/qgsmaplayer.h#L2227
|
||||||
QgsMapLayer.configChanged: src/core/qgsmaplayer.h#L2062
|
QgsMapLayer.configChanged: src/core/qgsmaplayer.h#L2102
|
||||||
QgsMapLayer.createMapRenderer: src/core/qgsmaplayer.h#L549
|
QgsMapLayer.createMapRenderer: src/core/qgsmaplayer.h#L549
|
||||||
QgsMapLayer.crs3D: src/core/qgsmaplayer.h#L1034
|
QgsMapLayer.crs3D: src/core/qgsmaplayer.h#L1074
|
||||||
QgsMapLayer.crs3DChanged: src/core/qgsmaplayer.h#L1977
|
QgsMapLayer.crs3DChanged: src/core/qgsmaplayer.h#L2017
|
||||||
QgsMapLayer.crs: src/core/qgsmaplayer.h#L994
|
QgsMapLayer.crs: src/core/qgsmaplayer.h#L1034
|
||||||
QgsMapLayer.crsChanged: src/core/qgsmaplayer.h#L1966
|
QgsMapLayer.crsChanged: src/core/qgsmaplayer.h#L2006
|
||||||
QgsMapLayer.customProperty: src/core/qgsmaplayer.h#L721
|
QgsMapLayer.customProperty: src/core/qgsmaplayer.h#L721
|
||||||
QgsMapLayer.customPropertyChanged: src/core/qgsmaplayer.h#L2125
|
QgsMapLayer.customPropertyChanged: src/core/qgsmaplayer.h#L2165
|
||||||
QgsMapLayer.customPropertyKeys: src/core/qgsmaplayer.h#L708
|
QgsMapLayer.customPropertyKeys: src/core/qgsmaplayer.h#L708
|
||||||
QgsMapLayer.dataChanged: src/core/qgsmaplayer.h#L2008
|
QgsMapLayer.dataChanged: src/core/qgsmaplayer.h#L2048
|
||||||
QgsMapLayer.dataProvider: src/core/qgsmaplayer.h#L302
|
QgsMapLayer.dataProvider: src/core/qgsmaplayer.h#L302
|
||||||
QgsMapLayer.dataSourceChanged: src/core/qgsmaplayer.h#L2104
|
QgsMapLayer.dataSourceChanged: src/core/qgsmaplayer.h#L2144
|
||||||
QgsMapLayer.dataUrl: src/core/qgsmaplayer.h#L384
|
QgsMapLayer.dataUrl: src/core/qgsmaplayer.h#L384
|
||||||
QgsMapLayer.dataUrlFormat: src/core/qgsmaplayer.h#L398
|
QgsMapLayer.dataUrlFormat: src/core/qgsmaplayer.h#L398
|
||||||
QgsMapLayer.decodedSource: src/core/qgsmaplayer.h#L2238
|
QgsMapLayer.decodedSource: src/core/qgsmaplayer.h#L2278
|
||||||
QgsMapLayer.deleteStyleFromDatabase: src/core/qgsmaplayer.h#L758
|
QgsMapLayer.deleteStyleFromDatabase: src/core/qgsmaplayer.h#L758
|
||||||
QgsMapLayer.dependenciesChanged: src/core/qgsmaplayer.h#L2067
|
QgsMapLayer.dependenciesChanged: src/core/qgsmaplayer.h#L2107
|
||||||
QgsMapLayer.editingStarted: src/core/qgsmaplayer.h#L2131
|
QgsMapLayer.editingStarted: src/core/qgsmaplayer.h#L2171
|
||||||
QgsMapLayer.editingStopped: src/core/qgsmaplayer.h#L2137
|
QgsMapLayer.editingStopped: src/core/qgsmaplayer.h#L2177
|
||||||
QgsMapLayer.elevationProperties: src/core/qgsmaplayer.h#L1763
|
QgsMapLayer.elevationProperties: src/core/qgsmaplayer.h#L1803
|
||||||
QgsMapLayer.emitStyleChanged: src/core/qgsmaplayer.h#L1882
|
QgsMapLayer.emitStyleChanged: src/core/qgsmaplayer.h#L1922
|
||||||
QgsMapLayer.encodedSource: src/core/qgsmaplayer.h#L2224
|
QgsMapLayer.encodedSource: src/core/qgsmaplayer.h#L2264
|
||||||
QgsMapLayer.error: src/core/qgsmaplayer.h#L981
|
QgsMapLayer.error: src/core/qgsmaplayer.h#L1021
|
||||||
QgsMapLayer.exportNamedMetadata: src/core/qgsmaplayer.h#L1096
|
QgsMapLayer.exportNamedMetadata: src/core/qgsmaplayer.h#L1136
|
||||||
QgsMapLayer.exportNamedStyle: src/core/qgsmaplayer.h#L1244
|
QgsMapLayer.exportNamedStyle: src/core/qgsmaplayer.h#L1284
|
||||||
QgsMapLayer.exportSldStyle: src/core/qgsmaplayer.h#L1255
|
QgsMapLayer.exportSldStyle: src/core/qgsmaplayer.h#L1295
|
||||||
QgsMapLayer.exportSldStyleV2: src/core/qgsmaplayer.h#L1264
|
QgsMapLayer.exportSldStyleV2: src/core/qgsmaplayer.h#L1304
|
||||||
QgsMapLayer.exportSldStyleV3: src/core/qgsmaplayer.h#L1275
|
QgsMapLayer.exportSldStyleV3: src/core/qgsmaplayer.h#L1315
|
||||||
QgsMapLayer.extensionPropertyType: src/core/qgsmaplayer.h#L260
|
QgsMapLayer.extensionPropertyType: src/core/qgsmaplayer.h#L260
|
||||||
QgsMapLayer.extent3D: src/core/qgsmaplayer.h#L558
|
QgsMapLayer.extent3D: src/core/qgsmaplayer.h#L558
|
||||||
QgsMapLayer.extent: src/core/qgsmaplayer.h#L552
|
QgsMapLayer.extent: src/core/qgsmaplayer.h#L552
|
||||||
QgsMapLayer.flags: src/core/qgsmaplayer.h#L231
|
QgsMapLayer.flags: src/core/qgsmaplayer.h#L231
|
||||||
QgsMapLayer.flagsChanged: src/core/qgsmaplayer.h#L2095
|
QgsMapLayer.flagsChanged: src/core/qgsmaplayer.h#L2135
|
||||||
QgsMapLayer.formatLayerName: src/core/qgsmaplayer.h#L1081
|
QgsMapLayer.formatLayerName: src/core/qgsmaplayer.h#L1121
|
||||||
QgsMapLayer.generateId: src/core/qgsmaplayer.h#L1731
|
QgsMapLayer.generateId: src/core/qgsmaplayer.h#L1771
|
||||||
QgsMapLayer.getStyleFromDatabase: src/core/qgsmaplayer.h#L750
|
QgsMapLayer.getStyleFromDatabase: src/core/qgsmaplayer.h#L750
|
||||||
QgsMapLayer.hasAutoRefreshEnabled: src/core/qgsmaplayer.h#L1620
|
QgsMapLayer.hasAutoRefreshEnabled: src/core/qgsmaplayer.h#L1660
|
||||||
QgsMapLayer.hasDependencyCycle: src/core/qgsmaplayer.h#L2311
|
QgsMapLayer.hasDependencyCycle: src/core/qgsmaplayer.h#L2351
|
||||||
QgsMapLayer.hasMapTips: src/core/qgsmaplayer.h#L1785
|
QgsMapLayer.hasMapTips: src/core/qgsmaplayer.h#L1825
|
||||||
QgsMapLayer.hasScaleBasedVisibility: src/core/qgsmaplayer.h#L1612
|
QgsMapLayer.hasScaleBasedVisibility: src/core/qgsmaplayer.h#L1652
|
||||||
QgsMapLayer.htmlMetadata: src/core/qgsmaplayer.h#L1683
|
QgsMapLayer.htmlMetadata: src/core/qgsmaplayer.h#L1723
|
||||||
QgsMapLayer.id: src/core/qgsmaplayer.h#L268
|
QgsMapLayer.id: src/core/qgsmaplayer.h#L268
|
||||||
QgsMapLayer.idChanged: src/core/qgsmaplayer.h#L1951
|
QgsMapLayer.idChanged: src/core/qgsmaplayer.h#L1991
|
||||||
QgsMapLayer.importNamedMetadata: src/core/qgsmaplayer.h#L1169
|
QgsMapLayer.importNamedMetadata: src/core/qgsmaplayer.h#L1209
|
||||||
QgsMapLayer.importNamedStyle: src/core/qgsmaplayer.h#L1233
|
QgsMapLayer.importNamedStyle: src/core/qgsmaplayer.h#L1273
|
||||||
QgsMapLayer.invalidateWgs84Extent: src/core/qgsmaplayer.h#L2289
|
QgsMapLayer.invalidateWgs84Extent: src/core/qgsmaplayer.h#L2329
|
||||||
QgsMapLayer.isEditable: src/core/qgsmaplayer.h#L624
|
QgsMapLayer.isEditable: src/core/qgsmaplayer.h#L624
|
||||||
QgsMapLayer.isInScaleRange: src/core/qgsmaplayer.h#L1578
|
QgsMapLayer.isInScaleRange: src/core/qgsmaplayer.h#L1618
|
||||||
QgsMapLayer.isModified: src/core/qgsmaplayer.h#L631
|
QgsMapLayer.isModified: src/core/qgsmaplayer.h#L631
|
||||||
QgsMapLayer.isRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1706
|
QgsMapLayer.isRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1746
|
||||||
QgsMapLayer.isSpatial: src/core/qgsmaplayer.h#L636
|
QgsMapLayer.isSpatial: src/core/qgsmaplayer.h#L636
|
||||||
QgsMapLayer.isTemporary: src/core/qgsmaplayer.h#L647
|
QgsMapLayer.isTemporary: src/core/qgsmaplayer.h#L647
|
||||||
QgsMapLayer.isValid: src/core/qgsmaplayer.h#L575
|
QgsMapLayer.isValid: src/core/qgsmaplayer.h#L575
|
||||||
QgsMapLayer.isValidChanged: src/core/qgsmaplayer.h#L2118
|
QgsMapLayer.isValidChanged: src/core/qgsmaplayer.h#L2158
|
||||||
QgsMapLayer.keywordList: src/core/qgsmaplayer.h#L370
|
QgsMapLayer.keywordList: src/core/qgsmaplayer.h#L370
|
||||||
QgsMapLayer.layerModified: src/core/qgsmaplayer.h#L2143
|
QgsMapLayer.layerModified: src/core/qgsmaplayer.h#L2183
|
||||||
QgsMapLayer.legend: src/core/qgsmaplayer.h#L1553
|
QgsMapLayer.legend: src/core/qgsmaplayer.h#L1593
|
||||||
QgsMapLayer.legendChanged: src/core/qgsmaplayer.h#L2044
|
QgsMapLayer.legendChanged: src/core/qgsmaplayer.h#L2084
|
||||||
QgsMapLayer.legendPlaceholderImage: src/core/qgsmaplayer.h#L1770
|
QgsMapLayer.legendPlaceholderImage: src/core/qgsmaplayer.h#L1810
|
||||||
QgsMapLayer.legendUrl: src/core/qgsmaplayer.h#L1528
|
QgsMapLayer.legendUrl: src/core/qgsmaplayer.h#L1568
|
||||||
QgsMapLayer.legendUrlFormat: src/core/qgsmaplayer.h#L1542
|
QgsMapLayer.legendUrlFormat: src/core/qgsmaplayer.h#L1582
|
||||||
QgsMapLayer.listStylesInDatabase: src/core/qgsmaplayer.h#L744
|
QgsMapLayer.listStylesInDatabase: src/core/qgsmaplayer.h#L744
|
||||||
QgsMapLayer.loadDefaultMetadata: src/core/qgsmaplayer.h#L1152
|
QgsMapLayer.loadDefaultMetadata: src/core/qgsmaplayer.h#L1192
|
||||||
QgsMapLayer.loadDefaultStyle: src/core/qgsmaplayer.h#L1193
|
QgsMapLayer.loadDefaultStyle: src/core/qgsmaplayer.h#L1233
|
||||||
QgsMapLayer.loadNamedMetadata: src/core/qgsmaplayer.h#L1139
|
QgsMapLayer.loadNamedMetadata: src/core/qgsmaplayer.h#L1179
|
||||||
QgsMapLayer.loadNamedMetadataFromDatabase: src/core/qgsmaplayer.h#L1161
|
QgsMapLayer.loadNamedMetadataFromDatabase: src/core/qgsmaplayer.h#L1201
|
||||||
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L1214
|
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L1254
|
||||||
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L795
|
QgsMapLayer.loadNamedStyle: src/core/qgsmaplayer.h#L835
|
||||||
QgsMapLayer.loadNamedStyleFromDatabase: src/core/qgsmaplayer.h#L1223
|
QgsMapLayer.loadNamedStyleFromDatabase: src/core/qgsmaplayer.h#L1263
|
||||||
QgsMapLayer.loadSldStyle: src/core/qgsmaplayer.h#L1351
|
QgsMapLayer.loadSldStyle: src/core/qgsmaplayer.h#L1391
|
||||||
QgsMapLayer.mapTipTemplate: src/core/qgsmaplayer.h#L1794
|
QgsMapLayer.mapTipTemplate: src/core/qgsmaplayer.h#L1834
|
||||||
QgsMapLayer.mapTipTemplateChanged: src/core/qgsmaplayer.h#L2150
|
QgsMapLayer.mapTipTemplateChanged: src/core/qgsmaplayer.h#L2190
|
||||||
QgsMapLayer.mapTipsEnabled: src/core/qgsmaplayer.h#L1817
|
QgsMapLayer.mapTipsEnabled: src/core/qgsmaplayer.h#L1857
|
||||||
QgsMapLayer.mapTipsEnabledChanged: src/core/qgsmaplayer.h#L2158
|
QgsMapLayer.mapTipsEnabledChanged: src/core/qgsmaplayer.h#L2198
|
||||||
QgsMapLayer.maximumScale: src/core/qgsmaplayer.h#L1602
|
QgsMapLayer.maximumScale: src/core/qgsmaplayer.h#L1642
|
||||||
QgsMapLayer.metadataChanged: src/core/qgsmaplayer.h#L2087
|
QgsMapLayer.metadataChanged: src/core/qgsmaplayer.h#L2127
|
||||||
QgsMapLayer.metadataUri: src/core/qgsmaplayer.h#L1089
|
QgsMapLayer.metadataUri: src/core/qgsmaplayer.h#L1129
|
||||||
QgsMapLayer.metadataUrl: src/core/qgsmaplayer.h#L461
|
QgsMapLayer.metadataUrl: src/core/qgsmaplayer.h#L461
|
||||||
QgsMapLayer.metadataUrlFormat: src/core/qgsmaplayer.h#L503
|
QgsMapLayer.metadataUrlFormat: src/core/qgsmaplayer.h#L503
|
||||||
QgsMapLayer.metadataUrlType: src/core/qgsmaplayer.h#L482
|
QgsMapLayer.metadataUrlType: src/core/qgsmaplayer.h#L482
|
||||||
QgsMapLayer.minimumScale: src/core/qgsmaplayer.h#L1590
|
QgsMapLayer.minimumScale: src/core/qgsmaplayer.h#L1630
|
||||||
QgsMapLayer.name: src/core/qgsmaplayer.h#L297
|
QgsMapLayer.name: src/core/qgsmaplayer.h#L297
|
||||||
QgsMapLayer.nameChanged: src/core/qgsmaplayer.h#L1956
|
QgsMapLayer.nameChanged: src/core/qgsmaplayer.h#L1996
|
||||||
QgsMapLayer.opacity: src/core/qgsmaplayer.h#L536
|
QgsMapLayer.opacity: src/core/qgsmaplayer.h#L536
|
||||||
QgsMapLayer.opacityChanged: src/core/qgsmaplayer.h#L2021
|
QgsMapLayer.opacityChanged: src/core/qgsmaplayer.h#L2061
|
||||||
QgsMapLayer.originalXmlProperties: src/core/qgsmaplayer.h#L1716
|
QgsMapLayer.originalXmlProperties: src/core/qgsmaplayer.h#L1756
|
||||||
QgsMapLayer.project: src/core/qgsmaplayer.h#L1928
|
QgsMapLayer.project: src/core/qgsmaplayer.h#L1968
|
||||||
QgsMapLayer.properties: src/core/qgsmaplayer.h#L254
|
QgsMapLayer.properties: src/core/qgsmaplayer.h#L254
|
||||||
QgsMapLayer.providerMetadata: src/core/qgsmaplayer.h#L314
|
QgsMapLayer.providerMetadata: src/core/qgsmaplayer.h#L314
|
||||||
QgsMapLayer.providerReadFlags: src/core/qgsmaplayer.h#L1826
|
QgsMapLayer.providerReadFlags: src/core/qgsmaplayer.h#L1866
|
||||||
QgsMapLayer.providerType: src/core/qgsmaplayer.h#L1506
|
QgsMapLayer.providerType: src/core/qgsmaplayer.h#L1546
|
||||||
QgsMapLayer.publicSource: src/core/qgsmaplayer.h#L587
|
QgsMapLayer.publicSource: src/core/qgsmaplayer.h#L587
|
||||||
QgsMapLayer.readCommonStyle: src/core/qgsmaplayer.h#L2265
|
QgsMapLayer.readCommonStyle: src/core/qgsmaplayer.h#L2305
|
||||||
QgsMapLayer.readCustomProperties: src/core/qgsmaplayer.h#L2245
|
QgsMapLayer.readCustomProperties: src/core/qgsmaplayer.h#L2285
|
||||||
QgsMapLayer.readLayerXml: src/core/qgsmaplayer.h#L679
|
QgsMapLayer.readLayerXml: src/core/qgsmaplayer.h#L679
|
||||||
QgsMapLayer.readOnly: src/core/qgsmaplayer.h#L539
|
QgsMapLayer.readOnly: src/core/qgsmaplayer.h#L539
|
||||||
QgsMapLayer.readSld: src/core/qgsmaplayer.h#L1354
|
QgsMapLayer.readSld: src/core/qgsmaplayer.h#L1394
|
||||||
QgsMapLayer.readStyle: src/core/qgsmaplayer.h#L1378
|
QgsMapLayer.readStyle: src/core/qgsmaplayer.h#L1418
|
||||||
QgsMapLayer.readStyleManager: src/core/qgsmaplayer.h#L2251
|
QgsMapLayer.readStyleManager: src/core/qgsmaplayer.h#L2291
|
||||||
QgsMapLayer.readSymbology: src/core/qgsmaplayer.h#L1366
|
QgsMapLayer.readSymbology: src/core/qgsmaplayer.h#L1406
|
||||||
QgsMapLayer.readXml: src/core/qgsmaplayer.h#L2205
|
QgsMapLayer.readXml: src/core/qgsmaplayer.h#L2245
|
||||||
QgsMapLayer.recalculateExtents: src/core/qgsmaplayer.h#L2005
|
QgsMapLayer.recalculateExtents: src/core/qgsmaplayer.h#L2045
|
||||||
QgsMapLayer.refreshOnNotifyMessage: src/core/qgsmaplayer.h#L1700
|
QgsMapLayer.refreshOnNotifyMessage: src/core/qgsmaplayer.h#L1740
|
||||||
QgsMapLayer.reload: src/core/qgsmaplayer.h#L544
|
QgsMapLayer.reload: src/core/qgsmaplayer.h#L544
|
||||||
QgsMapLayer.removeCustomProperty: src/core/qgsmaplayer.h#L974
|
QgsMapLayer.removeCustomProperty: src/core/qgsmaplayer.h#L1014
|
||||||
QgsMapLayer.renderer3D: src/core/qgsmaplayer.h#L1568
|
QgsMapLayer.renderer3D: src/core/qgsmaplayer.h#L1608
|
||||||
QgsMapLayer.renderer3DChanged: src/core/qgsmaplayer.h#L2049
|
QgsMapLayer.renderer3DChanged: src/core/qgsmaplayer.h#L2089
|
||||||
QgsMapLayer.rendererChanged: src/core/qgsmaplayer.h#L2027
|
QgsMapLayer.rendererChanged: src/core/qgsmaplayer.h#L2067
|
||||||
QgsMapLayer.repaintRequested: src/core/qgsmaplayer.h#L2002
|
QgsMapLayer.repaintRequested: src/core/qgsmaplayer.h#L2042
|
||||||
QgsMapLayer.request3DUpdate: src/core/qgsmaplayer.h#L2056
|
QgsMapLayer.request3DUpdate: src/core/qgsmaplayer.h#L2096
|
||||||
QgsMapLayer.resolveReferences: src/core/qgsmaplayer.h#L702
|
QgsMapLayer.resolveReferences: src/core/qgsmaplayer.h#L702
|
||||||
QgsMapLayer.saveDefaultMetadata: src/core/qgsmaplayer.h#L1106
|
QgsMapLayer.saveDefaultMetadata: src/core/qgsmaplayer.h#L1146
|
||||||
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1288
|
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1328
|
||||||
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1301
|
QgsMapLayer.saveDefaultStyle: src/core/qgsmaplayer.h#L1341
|
||||||
QgsMapLayer.saveNamedMetadata: src/core/qgsmaplayer.h#L1121
|
QgsMapLayer.saveNamedMetadata: src/core/qgsmaplayer.h#L1161
|
||||||
QgsMapLayer.saveNamedStyle: src/core/qgsmaplayer.h#L1318
|
QgsMapLayer.saveNamedStyle: src/core/qgsmaplayer.h#L1358
|
||||||
QgsMapLayer.saveSldStyle: src/core/qgsmaplayer.h#L1329
|
QgsMapLayer.saveSldStyle: src/core/qgsmaplayer.h#L1369
|
||||||
QgsMapLayer.saveSldStyleV2: src/core/qgsmaplayer.h#L1341
|
QgsMapLayer.saveSldStyleV2: src/core/qgsmaplayer.h#L1381
|
||||||
QgsMapLayer.saveStyleToDatabase: src/core/qgsmaplayer.h#L776
|
QgsMapLayer.saveStyleToDatabase: src/core/qgsmaplayer.h#L799
|
||||||
QgsMapLayer.selectionProperties: src/core/qgsmaplayer.h#L1749
|
QgsMapLayer.saveStyleToDatabaseV2: src/core/qgsmaplayer.h#L817
|
||||||
|
QgsMapLayer.selectionProperties: src/core/qgsmaplayer.h#L1789
|
||||||
QgsMapLayer.serverProperties: src/core/qgsmaplayer.h#L435
|
QgsMapLayer.serverProperties: src/core/qgsmaplayer.h#L435
|
||||||
QgsMapLayer.setAbstract: src/core/qgsmaplayer.h#L349
|
QgsMapLayer.setAbstract: src/core/qgsmaplayer.h#L349
|
||||||
QgsMapLayer.setAttribution: src/core/qgsmaplayer.h#L405
|
QgsMapLayer.setAttribution: src/core/qgsmaplayer.h#L405
|
||||||
QgsMapLayer.setAttributionUrl: src/core/qgsmaplayer.h#L419
|
QgsMapLayer.setAttributionUrl: src/core/qgsmaplayer.h#L419
|
||||||
QgsMapLayer.setAutoRefreshEnabled: src/core/qgsmaplayer.h#L1656
|
QgsMapLayer.setAutoRefreshEnabled: src/core/qgsmaplayer.h#L1696
|
||||||
QgsMapLayer.setAutoRefreshInterval: src/core/qgsmaplayer.h#L1648
|
QgsMapLayer.setAutoRefreshInterval: src/core/qgsmaplayer.h#L1688
|
||||||
QgsMapLayer.setAutoRefreshMode: src/core/qgsmaplayer.h#L1664
|
QgsMapLayer.setAutoRefreshMode: src/core/qgsmaplayer.h#L1704
|
||||||
QgsMapLayer.setBlendMode: src/core/qgsmaplayer.h#L510
|
QgsMapLayer.setBlendMode: src/core/qgsmaplayer.h#L510
|
||||||
QgsMapLayer.setCrs: src/core/qgsmaplayer.h#L1046
|
QgsMapLayer.setCrs: src/core/qgsmaplayer.h#L1086
|
||||||
QgsMapLayer.setCustomProperties: src/core/qgsmaplayer.h#L726
|
QgsMapLayer.setCustomProperties: src/core/qgsmaplayer.h#L726
|
||||||
QgsMapLayer.setCustomProperty: src/core/qgsmaplayer.h#L715
|
QgsMapLayer.setCustomProperty: src/core/qgsmaplayer.h#L715
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1439
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1479
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1470
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1510
|
||||||
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1501
|
QgsMapLayer.setDataSource: src/core/qgsmaplayer.h#L1541
|
||||||
QgsMapLayer.setDataUrl: src/core/qgsmaplayer.h#L377
|
QgsMapLayer.setDataUrl: src/core/qgsmaplayer.h#L377
|
||||||
QgsMapLayer.setDataUrlFormat: src/core/qgsmaplayer.h#L391
|
QgsMapLayer.setDataUrlFormat: src/core/qgsmaplayer.h#L391
|
||||||
QgsMapLayer.setDependencies: src/core/qgsmaplayer.h#L1891
|
QgsMapLayer.setDependencies: src/core/qgsmaplayer.h#L1931
|
||||||
QgsMapLayer.setError: src/core/qgsmaplayer.h#L2281
|
QgsMapLayer.setError: src/core/qgsmaplayer.h#L2321
|
||||||
QgsMapLayer.setExtent3D: src/core/qgsmaplayer.h#L2196
|
QgsMapLayer.setExtent3D: src/core/qgsmaplayer.h#L2236
|
||||||
QgsMapLayer.setExtent: src/core/qgsmaplayer.h#L2190
|
QgsMapLayer.setExtent: src/core/qgsmaplayer.h#L2230
|
||||||
QgsMapLayer.setFlags: src/core/qgsmaplayer.h#L243
|
QgsMapLayer.setFlags: src/core/qgsmaplayer.h#L243
|
||||||
QgsMapLayer.setId: src/core/qgsmaplayer.h#L285
|
QgsMapLayer.setId: src/core/qgsmaplayer.h#L285
|
||||||
QgsMapLayer.setKeywordList: src/core/qgsmaplayer.h#L363
|
QgsMapLayer.setKeywordList: src/core/qgsmaplayer.h#L363
|
||||||
QgsMapLayer.setLayerOrder: src/core/qgsmaplayer.h#L606
|
QgsMapLayer.setLayerOrder: src/core/qgsmaplayer.h#L606
|
||||||
QgsMapLayer.setLegend: src/core/qgsmaplayer.h#L1548
|
QgsMapLayer.setLegend: src/core/qgsmaplayer.h#L1588
|
||||||
QgsMapLayer.setLegendPlaceholderImage: src/core/qgsmaplayer.h#L1777
|
QgsMapLayer.setLegendPlaceholderImage: src/core/qgsmaplayer.h#L1817
|
||||||
QgsMapLayer.setLegendUrl: src/core/qgsmaplayer.h#L1521
|
QgsMapLayer.setLegendUrl: src/core/qgsmaplayer.h#L1561
|
||||||
QgsMapLayer.setLegendUrlFormat: src/core/qgsmaplayer.h#L1535
|
QgsMapLayer.setLegendUrlFormat: src/core/qgsmaplayer.h#L1575
|
||||||
QgsMapLayer.setMapTipTemplate: src/core/qgsmaplayer.h#L1803
|
QgsMapLayer.setMapTipTemplate: src/core/qgsmaplayer.h#L1843
|
||||||
QgsMapLayer.setMapTipsEnabled: src/core/qgsmaplayer.h#L1811
|
QgsMapLayer.setMapTipsEnabled: src/core/qgsmaplayer.h#L1851
|
||||||
QgsMapLayer.setMaximumScale: src/core/qgsmaplayer.h#L1850
|
QgsMapLayer.setMaximumScale: src/core/qgsmaplayer.h#L1890
|
||||||
QgsMapLayer.setMetadata: src/core/qgsmaplayer.h#L1678
|
QgsMapLayer.setMetadata: src/core/qgsmaplayer.h#L1718
|
||||||
QgsMapLayer.setMetadataUrl: src/core/qgsmaplayer.h#L450
|
QgsMapLayer.setMetadataUrl: src/core/qgsmaplayer.h#L450
|
||||||
QgsMapLayer.setMetadataUrlFormat: src/core/qgsmaplayer.h#L492
|
QgsMapLayer.setMetadataUrlFormat: src/core/qgsmaplayer.h#L492
|
||||||
QgsMapLayer.setMetadataUrlType: src/core/qgsmaplayer.h#L471
|
QgsMapLayer.setMetadataUrlType: src/core/qgsmaplayer.h#L471
|
||||||
QgsMapLayer.setMinimumScale: src/core/qgsmaplayer.h#L1839
|
QgsMapLayer.setMinimumScale: src/core/qgsmaplayer.h#L1879
|
||||||
QgsMapLayer.setName: src/core/qgsmaplayer.h#L291
|
QgsMapLayer.setName: src/core/qgsmaplayer.h#L291
|
||||||
QgsMapLayer.setOpacity: src/core/qgsmaplayer.h#L526
|
QgsMapLayer.setOpacity: src/core/qgsmaplayer.h#L526
|
||||||
QgsMapLayer.setOriginalXmlProperties: src/core/qgsmaplayer.h#L1725
|
QgsMapLayer.setOriginalXmlProperties: src/core/qgsmaplayer.h#L1765
|
||||||
QgsMapLayer.setProviderType: src/core/qgsmaplayer.h#L2269
|
QgsMapLayer.setProviderType: src/core/qgsmaplayer.h#L2309
|
||||||
QgsMapLayer.setRefreshOnNofifyMessage: src/core/qgsmaplayer.h#L1905
|
QgsMapLayer.setRefreshOnNofifyMessage: src/core/qgsmaplayer.h#L1945
|
||||||
QgsMapLayer.setRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1897
|
QgsMapLayer.setRefreshOnNotifyEnabled: src/core/qgsmaplayer.h#L1937
|
||||||
QgsMapLayer.setRenderer3D: src/core/qgsmaplayer.h#L1563
|
QgsMapLayer.setRenderer3D: src/core/qgsmaplayer.h#L1603
|
||||||
QgsMapLayer.setScaleBasedVisibility: src/core/qgsmaplayer.h#L1859
|
QgsMapLayer.setScaleBasedVisibility: src/core/qgsmaplayer.h#L1899
|
||||||
QgsMapLayer.setShortName: src/core/qgsmaplayer.h#L321
|
QgsMapLayer.setShortName: src/core/qgsmaplayer.h#L321
|
||||||
QgsMapLayer.setSubLayerVisibility: src/core/qgsmaplayer.h#L613
|
QgsMapLayer.setSubLayerVisibility: src/core/qgsmaplayer.h#L613
|
||||||
QgsMapLayer.setTitle: src/core/qgsmaplayer.h#L335
|
QgsMapLayer.setTitle: src/core/qgsmaplayer.h#L335
|
||||||
QgsMapLayer.setTransformContext: src/core/qgsmaplayer.h#L1912
|
QgsMapLayer.setTransformContext: src/core/qgsmaplayer.h#L1952
|
||||||
QgsMapLayer.setValid: src/core/qgsmaplayer.h#L2199
|
QgsMapLayer.setValid: src/core/qgsmaplayer.h#L2239
|
||||||
QgsMapLayer.setVerticalCrs: src/core/qgsmaplayer.h#L1067
|
QgsMapLayer.setVerticalCrs: src/core/qgsmaplayer.h#L1107
|
||||||
QgsMapLayer.shortName: src/core/qgsmaplayer.h#L328
|
QgsMapLayer.shortName: src/core/qgsmaplayer.h#L328
|
||||||
QgsMapLayer.source: src/core/qgsmaplayer.h#L594
|
QgsMapLayer.source: src/core/qgsmaplayer.h#L594
|
||||||
QgsMapLayer.statusChanged: src/core/qgsmaplayer.h#L1941
|
QgsMapLayer.statusChanged: src/core/qgsmaplayer.h#L1981
|
||||||
QgsMapLayer.styleChanged: src/core/qgsmaplayer.h#L2039
|
QgsMapLayer.styleChanged: src/core/qgsmaplayer.h#L2079
|
||||||
QgsMapLayer.styleLoaded: src/core/qgsmaplayer.h#L2111
|
QgsMapLayer.styleLoaded: src/core/qgsmaplayer.h#L2151
|
||||||
QgsMapLayer.styleManager: src/core/qgsmaplayer.h#L1558
|
QgsMapLayer.styleManager: src/core/qgsmaplayer.h#L1598
|
||||||
QgsMapLayer.styleURI: src/core/qgsmaplayer.h#L1179
|
QgsMapLayer.styleURI: src/core/qgsmaplayer.h#L1219
|
||||||
QgsMapLayer.subLayers: src/core/qgsmaplayer.h#L600
|
QgsMapLayer.subLayers: src/core/qgsmaplayer.h#L600
|
||||||
QgsMapLayer.supportsEditing: src/core/qgsmaplayer.h#L621
|
QgsMapLayer.supportsEditing: src/core/qgsmaplayer.h#L621
|
||||||
QgsMapLayer.temporalProperties: src/core/qgsmaplayer.h#L1756
|
QgsMapLayer.temporalProperties: src/core/qgsmaplayer.h#L1796
|
||||||
QgsMapLayer.timestamp: src/core/qgsmaplayer.h#L1686
|
QgsMapLayer.timestamp: src/core/qgsmaplayer.h#L1726
|
||||||
QgsMapLayer.title: src/core/qgsmaplayer.h#L342
|
QgsMapLayer.title: src/core/qgsmaplayer.h#L342
|
||||||
QgsMapLayer.transformContext: src/core/qgsmaplayer.h#L1074
|
QgsMapLayer.transformContext: src/core/qgsmaplayer.h#L1114
|
||||||
QgsMapLayer.trigger3DUpdate: src/core/qgsmaplayer.h#L1877
|
QgsMapLayer.trigger3DUpdate: src/core/qgsmaplayer.h#L1917
|
||||||
QgsMapLayer.triggerRepaint: src/core/qgsmaplayer.h#L1869
|
QgsMapLayer.triggerRepaint: src/core/qgsmaplayer.h#L1909
|
||||||
QgsMapLayer.type: src/core/qgsmaplayer.h#L219
|
QgsMapLayer.type: src/core/qgsmaplayer.h#L219
|
||||||
QgsMapLayer.undoStack: src/core/qgsmaplayer.h#L1509
|
QgsMapLayer.undoStack: src/core/qgsmaplayer.h#L1549
|
||||||
QgsMapLayer.undoStackStyles: src/core/qgsmaplayer.h#L1514
|
QgsMapLayer.undoStackStyles: src/core/qgsmaplayer.h#L1554
|
||||||
QgsMapLayer.verticalCrs: src/core/qgsmaplayer.h#L1014
|
QgsMapLayer.verticalCrs: src/core/qgsmaplayer.h#L1054
|
||||||
QgsMapLayer.verticalCrsChanged: src/core/qgsmaplayer.h#L1994
|
QgsMapLayer.verticalCrsChanged: src/core/qgsmaplayer.h#L2034
|
||||||
QgsMapLayer.wgs84Extent: src/core/qgsmaplayer.h#L568
|
QgsMapLayer.wgs84Extent: src/core/qgsmaplayer.h#L568
|
||||||
QgsMapLayer.willBeDeleted: src/core/qgsmaplayer.h#L2074
|
QgsMapLayer.willBeDeleted: src/core/qgsmaplayer.h#L2114
|
||||||
QgsMapLayer.writeCommonStyle: src/core/qgsmaplayer.h#L2258
|
QgsMapLayer.writeCommonStyle: src/core/qgsmaplayer.h#L2298
|
||||||
QgsMapLayer.writeCustomProperties: src/core/qgsmaplayer.h#L2248
|
QgsMapLayer.writeCustomProperties: src/core/qgsmaplayer.h#L2288
|
||||||
QgsMapLayer.writeLayerXml: src/core/qgsmaplayer.h#L697
|
QgsMapLayer.writeLayerXml: src/core/qgsmaplayer.h#L697
|
||||||
QgsMapLayer.writeStyle: src/core/qgsmaplayer.h#L1405
|
QgsMapLayer.writeStyle: src/core/qgsmaplayer.h#L1445
|
||||||
QgsMapLayer.writeStyleManager: src/core/qgsmaplayer.h#L2253
|
QgsMapLayer.writeStyleManager: src/core/qgsmaplayer.h#L2293
|
||||||
QgsMapLayer.writeSymbology: src/core/qgsmaplayer.h#L1391
|
QgsMapLayer.writeSymbology: src/core/qgsmaplayer.h#L1431
|
||||||
QgsMapLayer.writeXml: src/core/qgsmaplayer.h#L2211
|
QgsMapLayer.writeXml: src/core/qgsmaplayer.h#L2251
|
||||||
QgsMapLayer: src/core/qgsmaplayer.h#L76
|
QgsMapLayer: src/core/qgsmaplayer.h#L76
|
||||||
QgsMapLayerDependency.__hash__: src/core/qgsmaplayerdependency.h#L78
|
QgsMapLayerDependency.__hash__: src/core/qgsmaplayerdependency.h#L78
|
||||||
QgsMapLayerDependency.layerId: src/core/qgsmaplayerdependency.h#L67
|
QgsMapLayerDependency.layerId: src/core/qgsmaplayerdependency.h#L67
|
||||||
|
@ -57,9 +57,13 @@ class BatchAlgorithmDialog(QgsProcessingBatchAlgorithmDialogBase):
|
|||||||
def runAsSingle(self):
|
def runAsSingle(self):
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
|
alg_instance = self.algorithm().create()
|
||||||
|
dlg = alg_instance.createCustomParametersWidget(parent=iface.mainWindow())
|
||||||
|
if not dlg:
|
||||||
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
||||||
|
|
||||||
dlg = AlgorithmDialog(self.algorithm().create(), parent=iface.mainWindow())
|
dlg = AlgorithmDialog(alg_instance, parent=iface.mainWindow())
|
||||||
|
|
||||||
dlg.show()
|
dlg.show()
|
||||||
dlg.exec()
|
dlg.exec()
|
||||||
|
|
||||||
|
@ -554,7 +554,7 @@ QVariantMap QgsExtractLabelsAlgorithm::processAlgorithm( const QVariantMap ¶
|
|||||||
vl->setLabelsEnabled( true );
|
vl->setLabelsEnabled( true );
|
||||||
|
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
vl->saveStyleToDatabase( QString(), QString(), true, QString(), errorMessage );
|
vl->saveStyleToDatabaseV2( QString(), QString(), true, QString(), errorMessage );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,9 +485,10 @@ bool QgsPackageAlgorithm::packageVectorLayer( QgsVectorLayer *layer, const QStri
|
|||||||
// this is not nice -- but needed to avoid an "overwrite" prompt messagebox from the provider! This api needs a rework to avoid this.
|
// this is not nice -- but needed to avoid an "overwrite" prompt messagebox from the provider! This api needs a rework to avoid this.
|
||||||
const QVariant prevOverwriteStyle = settings.value( QStringLiteral( "qgis/overwriteStyle" ) );
|
const QVariant prevOverwriteStyle = settings.value( QStringLiteral( "qgis/overwriteStyle" ) );
|
||||||
settings.setValue( QStringLiteral( "qgis/overwriteStyle" ), true );
|
settings.setValue( QStringLiteral( "qgis/overwriteStyle" ), true );
|
||||||
res->saveStyleToDatabase( newLayer, QString(), true, QString(), errorMsg );
|
QgsMapLayer::SaveStyleResults saveStyleResults = res->saveStyleToDatabaseV2( newLayer, QString(), true, QString(), errorMsg );
|
||||||
settings.setValue( QStringLiteral( "qgis/overwriteStyle" ), prevOverwriteStyle );
|
settings.setValue( QStringLiteral( "qgis/overwriteStyle" ), prevOverwriteStyle );
|
||||||
if ( !errorMsg.isEmpty() )
|
if ( saveStyleResults.testFlag( QgsMapLayer::SaveStyleResult::QmlGenerationFailed )
|
||||||
|
|| saveStyleResults.testFlag( QgsMapLayer::SaveStyleResult::DatabaseWriteFailed ) )
|
||||||
{
|
{
|
||||||
feedback->reportError( QObject::tr( "Could not save layer style: %1 " ).arg( errorMsg ) );
|
feedback->reportError( QObject::tr( "Could not save layer style: %1 " ).arg( errorMsg ) );
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ bool QgsMapToolShapeCircle2Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e, Q
|
|||||||
void QgsMapToolShapeCircle2Points::cadCanvasMoveEvent( QgsMapMouseEvent *e, QgsMapToolCapture::CaptureMode mode )
|
void QgsMapToolShapeCircle2Points::cadCanvasMoveEvent( QgsMapMouseEvent *e, QgsMapToolCapture::CaptureMode mode )
|
||||||
{
|
{
|
||||||
Q_UNUSED( mode )
|
Q_UNUSED( mode )
|
||||||
if ( !mTempRubberBand )
|
if ( !mTempRubberBand || mPoints.isEmpty() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mCircle = QgsCircle::from2Points( mPoints.at( 0 ), mParentTool->mapPoint( *e ) );
|
mCircle = QgsCircle::from2Points( mPoints.at( 0 ), mParentTool->mapPoint( *e ) );
|
||||||
|
@ -81,7 +81,7 @@ void QgsMapToolShapeCircleCenterPoint::cadCanvasMoveEvent( QgsMapMouseEvent *e,
|
|||||||
|
|
||||||
const QgsPoint point = mParentTool->mapPoint( *e );
|
const QgsPoint point = mParentTool->mapPoint( *e );
|
||||||
|
|
||||||
if ( mTempRubberBand )
|
if ( mTempRubberBand && !mPoints.isEmpty() )
|
||||||
{
|
{
|
||||||
mCircle = QgsCircle::fromCenterPoint( mPoints.at( 0 ), point );
|
mCircle = QgsCircle::fromCenterPoint( mPoints.at( 0 ), point );
|
||||||
mTempRubberBand->setGeometry( mCircle.toCircularString( true ) );
|
mTempRubberBand->setGeometry( mCircle.toCircularString( true ) );
|
||||||
|
@ -92,7 +92,7 @@ void QgsMapToolShapeRegularPolygon2Points::cadCanvasMoveEvent( QgsMapMouseEvent
|
|||||||
|
|
||||||
const QgsPoint point = mParentTool->mapPoint( *e );
|
const QgsPoint point = mParentTool->mapPoint( *e );
|
||||||
|
|
||||||
if ( mTempRubberBand )
|
if ( mTempRubberBand && !mPoints.isEmpty() )
|
||||||
{
|
{
|
||||||
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value() );
|
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value() );
|
||||||
mTempRubberBand->setGeometry( mRegularPolygon.toPolygon() );
|
mTempRubberBand->setGeometry( mRegularPolygon.toPolygon() );
|
||||||
|
@ -89,7 +89,7 @@ void QgsMapToolShapeRegularPolygonCenterCorner::cadCanvasMoveEvent( QgsMapMouseE
|
|||||||
|
|
||||||
const QgsPoint point = mParentTool->mapPoint( *e );
|
const QgsPoint point = mParentTool->mapPoint( *e );
|
||||||
|
|
||||||
if ( mTempRubberBand )
|
if ( mTempRubberBand && !mPoints.isEmpty() )
|
||||||
{
|
{
|
||||||
const QgsRegularPolygon::ConstructionOption option = QgsRegularPolygon::InscribedCircle;
|
const QgsRegularPolygon::ConstructionOption option = QgsRegularPolygon::InscribedCircle;
|
||||||
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value(), option );
|
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value(), option );
|
||||||
|
@ -91,7 +91,7 @@ void QgsMapToolShapeRegularPolygonCenterPoint::cadCanvasMoveEvent( QgsMapMouseEv
|
|||||||
|
|
||||||
const QgsPoint point = mParentTool->mapPoint( *e );
|
const QgsPoint point = mParentTool->mapPoint( *e );
|
||||||
|
|
||||||
if ( mTempRubberBand )
|
if ( mTempRubberBand && !mPoints.isEmpty() )
|
||||||
{
|
{
|
||||||
const QgsRegularPolygon::ConstructionOption option = QgsRegularPolygon::CircumscribedCircle;
|
const QgsRegularPolygon::ConstructionOption option = QgsRegularPolygon::CircumscribedCircle;
|
||||||
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value(), option );
|
mRegularPolygon = QgsRegularPolygon( mPoints.at( 0 ), point, mNumberSidesSpinBox->value(), option );
|
||||||
|
@ -8202,10 +8202,33 @@ void QgisApp::makeMemoryLayerPermanent( QgsVectorLayer *layer )
|
|||||||
|
|
||||||
void QgisApp::saveAsLayerDefinition()
|
void QgisApp::saveAsLayerDefinition()
|
||||||
{
|
{
|
||||||
|
QString defaultFileName;
|
||||||
|
|
||||||
|
QgsLayerTreeNode *node = mLayerTreeView->currentNode();
|
||||||
|
if ( !node )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( node->nodeType() == QgsLayerTreeNode::NodeLayer )
|
||||||
|
{
|
||||||
|
QgsLayerTreeLayer *layerNode = dynamic_cast<QgsLayerTreeLayer *>( node );
|
||||||
|
if ( layerNode && layerNode->layer() )
|
||||||
|
{
|
||||||
|
defaultFileName = QStringLiteral( "/%1.qlr" ).arg( layerNode->layer()->name() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( node->nodeType() == QgsLayerTreeNode::NodeGroup )
|
||||||
|
{
|
||||||
|
QgsLayerTreeGroup *groupNode = dynamic_cast<QgsLayerTreeGroup *>( node );
|
||||||
|
if ( groupNode )
|
||||||
|
{
|
||||||
|
defaultFileName = QStringLiteral( "/%1.qlr" ).arg( groupNode->name() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QgsSettings settings;
|
QgsSettings settings;
|
||||||
QString lastUsedDir = settings.value( QStringLiteral( "UI/lastQLRDir" ), QDir::homePath() ).toString();
|
QString lastUsedDir = settings.value( QStringLiteral( "UI/lastQLRDir" ), QDir::homePath() ).toString();
|
||||||
|
|
||||||
QString path = QFileDialog::getSaveFileName( this, QStringLiteral( "Save as Layer Definition File" ), lastUsedDir, QStringLiteral( "*.qlr" ) );
|
QString path = QFileDialog::getSaveFileName( this, QStringLiteral( "Save as Layer Definition File" ), QStringLiteral( "%1%2" ).arg( lastUsedDir, defaultFileName ), QStringLiteral( "*.qlr" ) );
|
||||||
QgsDebugMsgLevel( path, 2 );
|
QgsDebugMsgLevel( path, 2 );
|
||||||
if ( path.isEmpty() )
|
if ( path.isEmpty() )
|
||||||
return;
|
return;
|
||||||
|
@ -67,14 +67,10 @@ void QgsMapToolReshape::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
|
|||||||
{
|
{
|
||||||
deleteTempRubberBand();
|
deleteTempRubberBand();
|
||||||
|
|
||||||
//find out bounding box of mCaptureList
|
if ( size() > 1 )
|
||||||
if ( size() < 1 )
|
|
||||||
{
|
{
|
||||||
stopCapturing();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
reshape( vlayer );
|
reshape( vlayer );
|
||||||
|
}
|
||||||
|
|
||||||
stopCapturing();
|
stopCapturing();
|
||||||
}
|
}
|
||||||
@ -164,12 +160,11 @@ void QgsMapToolReshape::reshape( QgsVectorLayer *vlayer )
|
|||||||
QgsAvoidIntersectionsOperation avoidIntersections;
|
QgsAvoidIntersectionsOperation avoidIntersections;
|
||||||
connect( &avoidIntersections, &QgsAvoidIntersectionsOperation::messageEmitted, this, &QgsMapTool::messageEmitted );
|
connect( &avoidIntersections, &QgsAvoidIntersectionsOperation::messageEmitted, this, &QgsMapTool::messageEmitted );
|
||||||
|
|
||||||
vlayer->beginEditCommand( tr( "Reshape" ) );
|
QHash<QgsFeatureId, QgsGeometry> reshapedGeometries;
|
||||||
|
|
||||||
|
// we first gather the features that are actually going to be reshaped and the reshaped results
|
||||||
while ( fit.nextFeature( f ) )
|
while ( fit.nextFeature( f ) )
|
||||||
{
|
{
|
||||||
//query geometry
|
|
||||||
//call geometry->reshape(mCaptureList)
|
|
||||||
//register changed geometry in vector layer
|
|
||||||
QgsGeometry geom = f.geometry();
|
QgsGeometry geom = f.geometry();
|
||||||
if ( !geom.isNull() )
|
if ( !geom.isNull() )
|
||||||
{
|
{
|
||||||
@ -181,14 +176,25 @@ void QgsMapToolReshape::reshape( QgsVectorLayer *vlayer )
|
|||||||
reshapeReturn = geom.reshapeGeometry( reshapeLineString );
|
reshapeReturn = geom.reshapeGeometry( reshapeLineString );
|
||||||
if ( reshapeReturn == Qgis::GeometryOperationResult::Success )
|
if ( reshapeReturn == Qgis::GeometryOperationResult::Success )
|
||||||
{
|
{
|
||||||
|
reshapedGeometries.insert( f.id(), geom );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ignore features that are going to be reshaped
|
||||||
|
// some intersected features may not be reshaped because of active selection or reshape line geometry
|
||||||
|
const QHash<QgsVectorLayer *, QSet<QgsFeatureId>> ignoreFeatures { { vlayer, qgis::listToSet( reshapedGeometries.keys() ) } };
|
||||||
|
|
||||||
|
// then we can apply intersection avoidance logic and eventually update the layer
|
||||||
|
vlayer->beginEditCommand( tr( "Reshape" ) );
|
||||||
|
for ( auto it = reshapedGeometries.begin(); it != reshapedGeometries.end(); ++it )
|
||||||
|
{
|
||||||
|
QgsFeatureId fid = it.key();
|
||||||
|
QgsGeometry geom = it.value();
|
||||||
|
|
||||||
//avoid intersections on polygon layers
|
//avoid intersections on polygon layers
|
||||||
if ( vlayer->geometryType() == Qgis::GeometryType::Polygon )
|
if ( vlayer->geometryType() == Qgis::GeometryType::Polygon )
|
||||||
{
|
{
|
||||||
//ignore all current layer features as they should be reshaped too
|
const QgsAvoidIntersectionsOperation::Result res = avoidIntersections.apply( vlayer, fid, geom, ignoreFeatures );
|
||||||
QHash<QgsVectorLayer *, QSet<QgsFeatureId>> ignoreFeatures;
|
|
||||||
ignoreFeatures.insert( vlayer, vlayer->allFeatureIds() );
|
|
||||||
|
|
||||||
const QgsAvoidIntersectionsOperation::Result res = avoidIntersections.apply( vlayer, f.id(), geom, ignoreFeatures );
|
|
||||||
if ( res.operationResult == Qgis::GeometryOperationResult::InvalidInputGeometryType )
|
if ( res.operationResult == Qgis::GeometryOperationResult::InvalidInputGeometryType )
|
||||||
{
|
{
|
||||||
emit messageEmitted( tr( "An error was reported during intersection removal" ), Qgis::MessageLevel::Warning );
|
emit messageEmitted( tr( "An error was reported during intersection removal" ), Qgis::MessageLevel::Warning );
|
||||||
@ -205,11 +211,9 @@ void QgsMapToolReshape::reshape( QgsVectorLayer *vlayer )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vlayer->changeGeometry( f.id(), geom );
|
vlayer->changeGeometry( fid, geom );
|
||||||
reshapeDone = true;
|
reshapeDone = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( reshapeDone )
|
if ( reshapeDone )
|
||||||
{
|
{
|
||||||
|
@ -1241,7 +1241,17 @@ Qgis::GeometryOperationResult QgsGeometry::reshapeGeometry( const QgsLineString
|
|||||||
return Qgis::GeometryOperationResult::InvalidBaseGeometry;
|
return Qgis::GeometryOperationResult::InvalidBaseGeometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsGeos geos( d->geometry.get() );
|
// We're trying adding the reshape line's vertices to the geometry so that
|
||||||
|
// snap to segment always produces a valid reshape
|
||||||
|
QgsPointSequence reshapePoints;
|
||||||
|
reshapeLineString.points( reshapePoints );
|
||||||
|
QgsGeometry tmpGeom( *this );
|
||||||
|
for ( const QgsPoint &v : std::as_const( reshapePoints ) )
|
||||||
|
{
|
||||||
|
tmpGeom.addTopologicalPoint( v );
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsGeos geos( tmpGeom.get() );
|
||||||
QgsGeometryEngine::EngineOperationResult errorCode = QgsGeometryEngine::Success;
|
QgsGeometryEngine::EngineOperationResult errorCode = QgsGeometryEngine::Success;
|
||||||
mLastError.clear();
|
mLastError.clear();
|
||||||
std::unique_ptr< QgsAbstractGeometry > geom( geos.reshapeGeometry( reshapeLineString, &errorCode, &mLastError ) );
|
std::unique_ptr< QgsAbstractGeometry > geom( geos.reshapeGeometry( reshapeLineString, &errorCode, &mLastError ) );
|
||||||
|
@ -67,7 +67,24 @@ typedef QVector<QgsPointXY> QgsPolylineXY;
|
|||||||
* This type has full support for Z/M dimensions.
|
* This type has full support for Z/M dimensions.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#ifndef SIP_RUN
|
||||||
typedef QgsPointSequence QgsPolyline;
|
typedef QgsPointSequence QgsPolyline;
|
||||||
|
#else
|
||||||
|
typedef QVector<QgsPoint> QgsPolyline;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multi polyline represented as a vector of polylines.
|
||||||
|
*
|
||||||
|
* This type has full support for Z/M dimensions.
|
||||||
|
*
|
||||||
|
* \since QGIS 3.44
|
||||||
|
*/
|
||||||
|
#ifndef SIP_RUN
|
||||||
|
typedef QVector<QgsPolyline> QgsMultiPolyline;
|
||||||
|
#else
|
||||||
|
typedef QVector<QVector< QgsPoint >> QgsMultiPolyline;
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Polygon: first item of the list is outer ring, inner rings (if any) start from second item
|
//! Polygon: first item of the list is outer ring, inner rings (if any) start from second item
|
||||||
#ifndef SIP_RUN
|
#ifndef SIP_RUN
|
||||||
|
@ -33,13 +33,13 @@ email : marco.hugentobler at sourcepole dot com
|
|||||||
#define DEFAULT_QUADRANT_SEGMENTS 8
|
#define DEFAULT_QUADRANT_SEGMENTS 8
|
||||||
|
|
||||||
#define CATCH_GEOS(r) \
|
#define CATCH_GEOS(r) \
|
||||||
catch (GEOSException &) \
|
catch (QgsGeosException &) \
|
||||||
{ \
|
{ \
|
||||||
return r; \
|
return r; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CATCH_GEOS_WITH_ERRMSG(r) \
|
#define CATCH_GEOS_WITH_ERRMSG(r) \
|
||||||
catch (GEOSException &e) \
|
catch (QgsGeosException &e) \
|
||||||
{ \
|
{ \
|
||||||
if ( errorMsg ) \
|
if ( errorMsg ) \
|
||||||
{ \
|
{ \
|
||||||
@ -50,7 +50,7 @@ email : marco.hugentobler at sourcepole dot com
|
|||||||
|
|
||||||
/// @cond PRIVATE
|
/// @cond PRIVATE
|
||||||
|
|
||||||
static void throwGEOSException( const char *fmt, ... )
|
static void throwQgsGeosException( const char *fmt, ... )
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
@ -62,14 +62,14 @@ static void throwGEOSException( const char *fmt, ... )
|
|||||||
QString message = QString::fromUtf8( buffer );
|
QString message = QString::fromUtf8( buffer );
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
// stupid stupid MSVC, *SOMETIMES* raises it's own exception if we throw GEOSException, resulting in a crash!
|
// stupid stupid MSVC, *SOMETIMES* raises it's own exception if we throw QgsGeosException, resulting in a crash!
|
||||||
// see https://github.com/qgis/QGIS/issues/22709
|
// see https://github.com/qgis/QGIS/issues/22709
|
||||||
// if you want to test alternative fixes for this, run the testqgsexpression.cpp test suite - that will crash
|
// if you want to test alternative fixes for this, run the testqgsexpression.cpp test suite - that will crash
|
||||||
// and burn on the "line_interpolate_point point" test if a GEOSException is thrown.
|
// and burn on the "line_interpolate_point point" test if a QgsGeosException is thrown.
|
||||||
// TODO - find a real fix for the underlying issue
|
// TODO - find a real fix for the underlying issue
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
throw GEOSException( message );
|
throw QgsGeosException( message );
|
||||||
}
|
}
|
||||||
catch ( ... )
|
catch ( ... )
|
||||||
{
|
{
|
||||||
@ -77,7 +77,7 @@ static void throwGEOSException( const char *fmt, ... )
|
|||||||
// just throw nothing instead (except your mouse at your monitor)
|
// just throw nothing instead (except your mouse at your monitor)
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
throw GEOSException( message );
|
throw QgsGeosException( message );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,9 +112,9 @@ QgsGeosContext::QgsGeosContext()
|
|||||||
#if GEOS_VERSION_MAJOR>3 || ( GEOS_VERSION_MAJOR == 3 && GEOS_VERSION_MINOR>=5 )
|
#if GEOS_VERSION_MAJOR>3 || ( GEOS_VERSION_MAJOR == 3 && GEOS_VERSION_MINOR>=5 )
|
||||||
mContext = GEOS_init_r();
|
mContext = GEOS_init_r();
|
||||||
GEOSContext_setNoticeHandler_r( mContext, printGEOSNotice );
|
GEOSContext_setNoticeHandler_r( mContext, printGEOSNotice );
|
||||||
GEOSContext_setErrorHandler_r( mContext, throwGEOSException );
|
GEOSContext_setErrorHandler_r( mContext, throwQgsGeosException );
|
||||||
#else
|
#else
|
||||||
mContext = initGEOS_r( printGEOSNotice, throwGEOSException );
|
mContext = initGEOS_r( printGEOSNotice, throwQgsGeosException );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ std::unique_ptr<QgsAbstractGeometry> QgsGeos::makeValid( Qgis::MakeValidMethod m
|
|||||||
geos.reset( GEOSMakeValidWithParams_r( context, mGeos.get(), params ) );
|
geos.reset( GEOSMakeValidWithParams_r( context, mGeos.get(), params ) );
|
||||||
GEOSMakeValidParams_destroy_r( context, params );
|
GEOSMakeValidParams_destroy_r( context, params );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
{
|
{
|
||||||
@ -336,7 +336,7 @@ std::unique_ptr<QgsAbstractGeometry> QgsGeos::clip( const QgsRectangle &rect, QS
|
|||||||
geos::unique_ptr opGeom( GEOSClipByRect_r( QgsGeosContext::get(), mGeos.get(), rect.xMinimum(), rect.yMinimum(), rect.xMaximum(), rect.yMaximum() ) );
|
geos::unique_ptr opGeom( GEOSClipByRect_r( QgsGeosContext::get(), mGeos.get(), rect.xMinimum(), rect.yMinimum(), rect.xMaximum(), rect.yMaximum() ) );
|
||||||
return fromGeos( opGeom.get() );
|
return fromGeos( opGeom.get() );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -741,7 +741,7 @@ bool QgsGeos::contains( double x, double y, QString *errorMsg ) const
|
|||||||
|
|
||||||
result = ( GEOSContains_r( context, mGeos.get(), point.get() ) == 1 );
|
result = ( GEOSContains_r( context, mGeos.get(), point.get() ) == 1 );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -863,7 +863,7 @@ bool QgsGeos::intersects( const QgsAbstractGeometry *geom, QString *errorMsg ) c
|
|||||||
{
|
{
|
||||||
return GEOSPreparedIntersectsXY_r( QgsGeosContext::get(), mGeosPrepared.get(), point->x(), point->y() ) == 1;
|
return GEOSPreparedIntersectsXY_r( QgsGeosContext::get(), mGeosPrepared.get(), point->x(), point->y() ) == 1;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -916,7 +916,7 @@ bool QgsGeos::contains( const QgsAbstractGeometry *geom, QString *errorMsg ) con
|
|||||||
{
|
{
|
||||||
return GEOSPreparedContainsXY_r( QgsGeosContext::get(), mGeosPrepared.get(), point->x(), point->y() ) == 1;
|
return GEOSPreparedContainsXY_r( QgsGeosContext::get(), mGeosPrepared.get(), point->x(), point->y() ) == 1;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -961,7 +961,7 @@ QString QgsGeos::relate( const QgsAbstractGeometry *geom, QString *errorMsg ) co
|
|||||||
GEOSFree_r( context, r );
|
GEOSFree_r( context, r );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -992,7 +992,7 @@ bool QgsGeos::relatePattern( const QgsAbstractGeometry *geom, const QString &pat
|
|||||||
{
|
{
|
||||||
result = ( GEOSRelatePattern_r( context, mGeos.get(), geosGeom.get(), pattern.toLocal8Bit().constData() ) == 1 );
|
result = ( GEOSRelatePattern_r( context, mGeos.get(), geosGeom.get(), pattern.toLocal8Bit().constData() ) == 1 );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -1554,7 +1554,7 @@ geos::unique_ptr QgsGeos::createGeosCollection( int typeId, std::vector<geos::un
|
|||||||
{
|
{
|
||||||
geomRes.reset( GEOSGeom_createCollection_r( context, typeId, geomarr.data(), geomarr.size() ) );
|
geomRes.reset( GEOSGeom_createCollection_r( context, typeId, geomarr.data(), geomarr.size() ) );
|
||||||
}
|
}
|
||||||
catch ( GEOSException & )
|
catch ( QgsGeosException & )
|
||||||
{
|
{
|
||||||
for ( GEOSGeometry *geom : geomarr )
|
for ( GEOSGeometry *geom : geomarr )
|
||||||
{
|
{
|
||||||
@ -1989,7 +1989,7 @@ std::unique_ptr<QgsAbstractGeometry> QgsGeos::overlay( const QgsAbstractGeometry
|
|||||||
}
|
}
|
||||||
return fromGeos( opGeom.get() );
|
return fromGeos( opGeom.get() );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -2071,7 +2071,7 @@ bool QgsGeos::relation( const QgsAbstractGeometry *geom, Relation r, QString *er
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -3114,7 +3114,7 @@ std::unique_ptr<QgsAbstractGeometry> QgsGeos::closestPoint( const QgsGeometry &o
|
|||||||
( void )GEOSCoordSeq_getX_r( context, nearestCoord.get(), 0, &nx );
|
( void )GEOSCoordSeq_getX_r( context, nearestCoord.get(), 0, &nx );
|
||||||
( void )GEOSCoordSeq_getY_r( context, nearestCoord.get(), 0, &ny );
|
( void )GEOSCoordSeq_getY_r( context, nearestCoord.get(), 0, &ny );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -3169,7 +3169,7 @@ std::unique_ptr< QgsAbstractGeometry > QgsGeos::shortestLine( const QgsAbstractG
|
|||||||
( void )GEOSCoordSeq_getX_r( context, nearestCoord.get(), 1, &nx2 );
|
( void )GEOSCoordSeq_getX_r( context, nearestCoord.get(), 1, &nx2 );
|
||||||
( void )GEOSCoordSeq_getY_r( context, nearestCoord.get(), 1, &ny2 );
|
( void )GEOSCoordSeq_getY_r( context, nearestCoord.get(), 1, &ny2 );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -3203,7 +3203,7 @@ double QgsGeos::lineLocatePoint( const QgsPoint &point, QString *errorMsg ) cons
|
|||||||
{
|
{
|
||||||
distance = GEOSProject_r( QgsGeosContext::get(), mGeos.get(), otherGeom.get() );
|
distance = GEOSProject_r( QgsGeosContext::get(), mGeos.get(), otherGeom.get() );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -3232,7 +3232,7 @@ double QgsGeos::lineLocatePoint( double x, double y, QString *errorMsg ) const
|
|||||||
{
|
{
|
||||||
distance = GEOSProject_r( QgsGeosContext::get(), mGeos.get(), point.get() );
|
distance = GEOSProject_r( QgsGeosContext::get(), mGeos.get(), point.get() );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
logError( QStringLiteral( "GEOS" ), e.what() );
|
logError( QStringLiteral( "GEOS" ), e.what() );
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
@ -3270,7 +3270,7 @@ QgsGeometry QgsGeos::polygonize( const QVector<const QgsAbstractGeometry *> &geo
|
|||||||
delete[] lineGeosGeometries;
|
delete[] lineGeosGeometries;
|
||||||
return QgsGeometry( fromGeos( result.get() ) );
|
return QgsGeometry( fromGeos( result.get() ) );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
if ( errorMsg )
|
if ( errorMsg )
|
||||||
{
|
{
|
||||||
@ -3475,7 +3475,7 @@ geos::unique_ptr QgsGeos::reshapeLine( const GEOSGeometry *line, const GEOSGeome
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException & )
|
catch ( QgsGeosException & )
|
||||||
{
|
{
|
||||||
atLeastTwoIntersections = false;
|
atLeastTwoIntersections = false;
|
||||||
}
|
}
|
||||||
@ -3736,7 +3736,7 @@ geos::unique_ptr QgsGeos::reshapePolygon( const GEOSGeometry *polygon, const GEO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException & )
|
catch ( QgsGeosException & )
|
||||||
{
|
{
|
||||||
nIntersections = 0;
|
nIntersections = 0;
|
||||||
}
|
}
|
||||||
@ -3762,7 +3762,15 @@ geos::unique_ptr QgsGeos::reshapePolygon( const GEOSGeometry *polygon, const GEO
|
|||||||
|
|
||||||
reshapeResult.reset();
|
reshapeResult.reset();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
newRing = GEOSGeom_createLinearRing_r( context, newCoordSequence );
|
newRing = GEOSGeom_createLinearRing_r( context, newCoordSequence );
|
||||||
|
}
|
||||||
|
catch ( QgsGeosException & )
|
||||||
|
{
|
||||||
|
// nothing to do: on exception newRing will be null
|
||||||
|
}
|
||||||
|
|
||||||
if ( !newRing )
|
if ( !newRing )
|
||||||
{
|
{
|
||||||
delete [] innerRings;
|
delete [] innerRings;
|
||||||
|
@ -945,10 +945,10 @@ class CORE_EXPORT QgsGeos: public QgsGeometryEngine
|
|||||||
|
|
||||||
#ifndef SIP_RUN
|
#ifndef SIP_RUN
|
||||||
|
|
||||||
class GEOSException : public std::runtime_error
|
class QgsGeosException : public std::runtime_error
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit GEOSException( const QString &message )
|
explicit QgsGeosException( const QString &message )
|
||||||
: std::runtime_error( message.toUtf8().constData() )
|
: std::runtime_error( message.toUtf8().constData() )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ bool QgsAbstractLabelingEngineRuleDistanceFromFeature::candidateExceedsTolerance
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
@ -457,7 +457,7 @@ bool QgsLabelingEngineRuleMinimumDistanceLabelToLabel::candidatesAreConflicting(
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
@ -609,7 +609,7 @@ bool QgsLabelingEngineRuleAvoidLabelOverlapWithFeature::candidateIsIllegal( cons
|
|||||||
if ( GEOSPreparedIntersects_r( geosctxt, candidateGeos, featureCandidate.get() ) == 1 )
|
if ( GEOSPreparedIntersects_r( geosctxt, candidateGeos, featureCandidate.get() ) == 1 )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
|
@ -1135,13 +1135,13 @@ void QgsLayoutItemMap::paint( QPainter *painter, const QStyleOptionGraphicsItem
|
|||||||
{
|
{
|
||||||
// current job was invalidated - start a new one
|
// current job was invalidated - start a new one
|
||||||
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
||||||
mBackgroundUpdateTimer->start( 1 );
|
mBackgroundUpdateTimer->start( 100 );
|
||||||
}
|
}
|
||||||
else if ( !mPainterJob && !mDrawingPreview )
|
else if ( !mPainterJob && !mDrawingPreview )
|
||||||
{
|
{
|
||||||
// this is the map's very first paint - trigger a cache update
|
// this is the map's very first paint - trigger a cache update
|
||||||
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
||||||
mBackgroundUpdateTimer->start( 1 );
|
mBackgroundUpdateTimer->start( 100 );
|
||||||
}
|
}
|
||||||
renderInProgress = true;
|
renderInProgress = true;
|
||||||
}
|
}
|
||||||
@ -1151,7 +1151,7 @@ void QgsLayoutItemMap::paint( QPainter *painter, const QStyleOptionGraphicsItem
|
|||||||
{
|
{
|
||||||
// cache was invalidated - trigger a background update
|
// cache was invalidated - trigger a background update
|
||||||
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
mPreviewScaleFactor = QgsLayoutUtils::scaleFactorFromItemStyle( style, painter );
|
||||||
mBackgroundUpdateTimer->start( 1 );
|
mBackgroundUpdateTimer->start( 100 );
|
||||||
renderInProgress = true;
|
renderInProgress = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ std::unique_ptr<LabelPosition> FeaturePart::createCandidatePointOnSurface( Point
|
|||||||
GEOSCoordSeq_getXY_r( geosctxt, coordSeq, 0, &px, &py );
|
GEOSCoordSeq_getXY_r( geosctxt, coordSeq, 0, &px, &py );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -2424,7 +2424,7 @@ bool FeaturePart::isConnected( FeaturePart *p2 )
|
|||||||
return ( GEOSPreparedIntersects_r( geosctxt, preparedGeom(), p2OtherEnd.get() ) != 1 );
|
return ( GEOSPreparedIntersects_r( geosctxt, preparedGeom(), p2OtherEnd.get() ) != 1 );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -2465,7 +2465,7 @@ bool FeaturePart::mergeWithFeaturePart( FeaturePart *other )
|
|||||||
extractCoords( mGeos );
|
extractCoords( mGeos );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
|
@ -336,7 +336,7 @@ bool GeomFunction::containsCandidate( const GEOSPreparedGeometry *geom, double x
|
|||||||
const bool result = ( GEOSPreparedContainsProperly_r( geosctxt, geom, bboxGeos.get() ) == 1 );
|
const bool result = ( GEOSPreparedContainsProperly_r( geosctxt, geom, bboxGeos.get() ) == 1 );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
Q_NOWARN_UNREACHABLE_PUSH
|
Q_NOWARN_UNREACHABLE_PUSH
|
||||||
|
@ -190,7 +190,7 @@ bool LabelPosition::intersects( const GEOSPreparedGeometry *geometry )
|
|||||||
return mNextPart->intersects( geometry );
|
return mNextPart->intersects( geometry );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -217,7 +217,7 @@ bool LabelPosition::within( const GEOSPreparedGeometry *geometry )
|
|||||||
return mNextPart->within( geometry );
|
return mNextPart->within( geometry );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -301,7 +301,7 @@ bool LabelPosition::isInConflict( const LabelPosition *lp ) const
|
|||||||
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
@ -318,7 +318,7 @@ bool LabelPosition::isInConflict( const LabelPosition *lp ) const
|
|||||||
mOuterBoundsGeos ? mOuterBoundsGeos.get() : mGeos ) == 1 );
|
mOuterBoundsGeos ? mOuterBoundsGeos.get() : mGeos ) == 1 );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -364,7 +364,7 @@ bool LabelPosition::isInConflictMultiPart( const LabelPosition *lp ) const
|
|||||||
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
@ -376,7 +376,7 @@ bool LabelPosition::isInConflictMultiPart( const LabelPosition *lp ) const
|
|||||||
const bool result = ( GEOSPreparedIntersects_r( geosctxt, preparedMultiPartGeom(), lp->mMultipartGeos ) == 1 );
|
const bool result = ( GEOSPreparedIntersects_r( geosctxt, preparedMultiPartGeom(), lp->mMultipartGeos ) == 1 );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -695,7 +695,7 @@ double LabelPosition::getDistanceToPoint( double xp, double yp, bool useOuterBou
|
|||||||
geos::unique_ptr point( GEOSGeom_createPointFromXY_r( geosctxt, xp, yp ) );
|
geos::unique_ptr point( GEOSGeom_createPointFromXY_r( geosctxt, xp, yp ) );
|
||||||
contains = ( GEOSPreparedContainsProperly_r( geosctxt, mPreparedOuterBoundsGeos, point.get() ) == 1 );
|
contains = ( GEOSPreparedContainsProperly_r( geosctxt, mPreparedOuterBoundsGeos, point.get() ) == 1 );
|
||||||
}
|
}
|
||||||
catch ( GEOSException & )
|
catch ( QgsGeosException & )
|
||||||
{
|
{
|
||||||
contains = false;
|
contains = false;
|
||||||
}
|
}
|
||||||
@ -747,7 +747,7 @@ double LabelPosition::getDistanceToPoint( double xp, double yp, bool useOuterBou
|
|||||||
distance = QgsGeometryUtilsBase::sqrDistance2D( xp, yp, nx, ny );
|
distance = QgsGeometryUtilsBase::sqrDistance2D( xp, yp, nx, ny );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -788,7 +788,7 @@ bool LabelPosition::crossesLine( PointSet *line ) const
|
|||||||
return mNextPart->crossesLine( line );
|
return mNextPart->crossesLine( line );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -820,7 +820,7 @@ bool LabelPosition::crossesBoundary( PointSet *polygon ) const
|
|||||||
return mNextPart->crossesBoundary( polygon );
|
return mNextPart->crossesBoundary( polygon );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -855,7 +855,7 @@ bool LabelPosition::intersectsWithPolygon( PointSet *polygon ) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -914,7 +914,7 @@ double LabelPosition::polygonIntersectionCostForParts( PointSet *polygon ) const
|
|||||||
cost += 4;
|
cost += 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
|
@ -790,7 +790,7 @@ bool Pal::candidatesAreConflicting( const LabelPosition *lp1, const LabelPositio
|
|||||||
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
QgsMessageLog::logMessage( QStringLiteral( "label margin distance requires GEOS 3.10+" ) );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
QgsDebugError( QStringLiteral( "GEOS exception: %1" ).arg( e.what() ) );
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ bool PointSet::containsPoint( double x, double y ) const
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -617,7 +617,7 @@ void PointSet::offsetCurveByDistance( double distance )
|
|||||||
x = std::move( newX );
|
x = std::move( newX );
|
||||||
y = std::move( newY );
|
y = std::move( newY );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -907,7 +907,7 @@ double PointSet::minDistanceToPoint( double px, double py, double *rx, double *r
|
|||||||
|
|
||||||
return QgsGeometryUtilsBase::sqrDistance2D( px, py, nx, ny );
|
return QgsGeometryUtilsBase::sqrDistance2D( px, py, nx, ny );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -954,7 +954,7 @@ void PointSet::getCentroid( double &px, double &py, bool forceInside ) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -1023,7 +1023,7 @@ geos::unique_ptr PointSet::interpolatePoint( double distance ) const
|
|||||||
geos::unique_ptr res( GEOSInterpolate_r( QgsGeosContext::get(), thisGeos, distance ) );
|
geos::unique_ptr res( GEOSInterpolate_r( QgsGeosContext::get(), thisGeos, distance ) );
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -1041,7 +1041,7 @@ double PointSet::lineLocatePoint( const GEOSGeometry *point ) const
|
|||||||
{
|
{
|
||||||
distance = GEOSProject_r( QgsGeosContext::get(), thisGeos, point );
|
distance = GEOSProject_r( QgsGeosContext::get(), thisGeos, point );
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
return -1;
|
return -1;
|
||||||
@ -1076,7 +1076,7 @@ double PointSet::length() const
|
|||||||
( void )GEOSLength_r( geosctxt, mGeos, &mLength );
|
( void )GEOSLength_r( geosctxt, mGeos, &mLength );
|
||||||
return mLength;
|
return mLength;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -1103,7 +1103,7 @@ double PointSet::area() const
|
|||||||
mArea = std::fabs( mArea );
|
mArea = std::fabs( mArea );
|
||||||
return mArea;
|
return mArea;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
@ -1137,7 +1137,7 @@ QString PointSet::toWkt() const
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
qWarning( "GEOS exception: %s", e.what() );
|
qWarning( "GEOS exception: %s", e.what() );
|
||||||
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) );
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#define LEFT(x) (2*x+1)
|
#define LEFT(x) (2*x+1)
|
||||||
#define RIGHT(x) (2*x+2)
|
#define RIGHT(x) (2*x+2)
|
||||||
|
@ -830,6 +830,20 @@ void QgsOgrProvider::loadFields()
|
|||||||
QMutexLocker locker( mutex );
|
QMutexLocker locker( mutex );
|
||||||
mOGRGeomType = getOgrGeomType( mGDALDriverName, ogrLayer );
|
mOGRGeomType = getOgrGeomType( mGDALDriverName, ogrLayer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCrs = QgsCoordinateReferenceSystem();
|
||||||
|
if ( mOGRGeomType != wkbNone )
|
||||||
|
{
|
||||||
|
if ( OGRSpatialReferenceH spatialRefSys = mOgrLayer->GetSpatialRef() )
|
||||||
|
{
|
||||||
|
mCrs = QgsOgrUtils::OGRSpatialReferenceToCrs( spatialRefSys );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QgsDebugMsgLevel( QStringLiteral( "no spatial reference found" ), 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QgsOgrFeatureDefn &fdef = mOgrLayer->GetLayerDefn();
|
QgsOgrFeatureDefn &fdef = mOgrLayer->GetLayerDefn();
|
||||||
|
|
||||||
// Expose the OGR FID if it comes from a "real" column (typically GPKG)
|
// Expose the OGR FID if it comes from a "real" column (typically GPKG)
|
||||||
@ -3864,20 +3878,10 @@ QString QgsOgrProvider::description() const
|
|||||||
|
|
||||||
QgsCoordinateReferenceSystem QgsOgrProvider::crs() const
|
QgsCoordinateReferenceSystem QgsOgrProvider::crs() const
|
||||||
{
|
{
|
||||||
QgsCoordinateReferenceSystem srs;
|
|
||||||
if ( !mValid || ( mOGRGeomType == wkbNone ) )
|
if ( !mValid || ( mOGRGeomType == wkbNone ) )
|
||||||
return srs;
|
return QgsCoordinateReferenceSystem();
|
||||||
|
|
||||||
if ( OGRSpatialReferenceH spatialRefSys = mOgrLayer->GetSpatialRef() )
|
return mCrs;
|
||||||
{
|
|
||||||
srs = QgsOgrUtils::OGRSpatialReferenceToCrs( spatialRefSys );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QgsDebugMsgLevel( QStringLiteral( "no spatial reference found" ), 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
return srs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QgsOgrProvider::dataComment() const
|
QString QgsOgrProvider::dataComment() const
|
||||||
|
@ -304,6 +304,7 @@ class QgsOgrProvider final: public QgsVectorDataProvider
|
|||||||
bool mValid = false;
|
bool mValid = false;
|
||||||
|
|
||||||
OGRwkbGeometryType mOGRGeomType = wkbUnknown;
|
OGRwkbGeometryType mOGRGeomType = wkbUnknown;
|
||||||
|
QgsCoordinateReferenceSystem mCrs;
|
||||||
|
|
||||||
//! Whether the next call to featureCount() should refresh the feature count
|
//! Whether the next call to featureCount() should refresh the feature count
|
||||||
mutable bool mRefreshFeatureCount = true;
|
mutable bool mRefreshFeatureCount = true;
|
||||||
|
@ -1075,7 +1075,7 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
|
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
|
||||||
const ParseMode parseMode( mParseModeStack.isEmpty() ? None : mParseModeStack.top() );
|
const ParseMode parseMode( mParseModeStack.isEmpty() ? None : mParseModeStack.top() );
|
||||||
|
|
||||||
const int lastDimension = mDimensionStack.isEmpty() ? 0 : mDimensionStack.pop();
|
const int lastDimension = mDimensionStack.isEmpty() ? 2 : mDimensionStack.pop();
|
||||||
|
|
||||||
const bool isGMLNS = ( nsLen == mGMLNameSpaceURI.size() && mGMLNameSpaceURIPtr && memcmp( el, mGMLNameSpaceURIPtr, nsLen ) == 0 );
|
const bool isGMLNS = ( nsLen == mGMLNameSpaceURI.size() && mGMLNameSpaceURIPtr && memcmp( el, mGMLNameSpaceURIPtr, nsLen ) == 0 );
|
||||||
|
|
||||||
@ -1215,7 +1215,7 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
}
|
}
|
||||||
else if ( parseMode == LowerCorner && isGMLNS && LOCALNAME_EQUALS( "lowerCorner" ) )
|
else if ( parseMode == LowerCorner && isGMLNS && LOCALNAME_EQUALS( "lowerCorner" ) )
|
||||||
{
|
{
|
||||||
QList<QgsPointXY> points;
|
QList<QgsPoint> points;
|
||||||
pointsFromPosListString( points, mStringCash, 2 );
|
pointsFromPosListString( points, mStringCash, 2 );
|
||||||
if ( points.size() == 1 )
|
if ( points.size() == 1 )
|
||||||
{
|
{
|
||||||
@ -1226,7 +1226,7 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
}
|
}
|
||||||
else if ( parseMode == UpperCorner && isGMLNS && LOCALNAME_EQUALS( "upperCorner" ) )
|
else if ( parseMode == UpperCorner && isGMLNS && LOCALNAME_EQUALS( "upperCorner" ) )
|
||||||
{
|
{
|
||||||
QList<QgsPointXY> points;
|
QList<QgsPoint> points;
|
||||||
pointsFromPosListString( points, mStringCash, 2 );
|
pointsFromPosListString( points, mStringCash, 2 );
|
||||||
if ( points.size() == 1 )
|
if ( points.size() == 1 )
|
||||||
{
|
{
|
||||||
@ -1279,12 +1279,14 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
}
|
}
|
||||||
else if ( !mAttributeValIsNested && isGMLNS && LOCALNAME_EQUALS( "Point" ) )
|
else if ( !mAttributeValIsNested && isGMLNS && LOCALNAME_EQUALS( "Point" ) )
|
||||||
{
|
{
|
||||||
QList<QgsPointXY> pointList;
|
QList<QgsPoint> pointList;
|
||||||
if ( pointsFromString( pointList, mStringCash ) != 0 )
|
int dimension = 0;
|
||||||
|
if ( pointsFromString( pointList, mStringCash, &dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
mStringCash.clear();
|
mStringCash.clear();
|
||||||
|
mDimension = dimension;
|
||||||
|
|
||||||
if ( pointList.isEmpty() )
|
if ( pointList.isEmpty() )
|
||||||
return; // error
|
return; // error
|
||||||
@ -1292,20 +1294,21 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
if ( parseMode == QgsGmlStreamingParser::Geometry )
|
if ( parseMode == QgsGmlStreamingParser::Geometry )
|
||||||
{
|
{
|
||||||
//directly add WKB point to the feature
|
//directly add WKB point to the feature
|
||||||
if ( getPointWKB( mCurrentWKB, *( pointList.constBegin() ) ) != 0 )
|
if ( getPointWKB( mCurrentWKB, *( pointList.constBegin() ), dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mWkbType != Qgis::WkbType::MultiPoint ) //keep multitype in case of geometry type mix
|
if ( QgsWkbTypes::flatType( mWkbType ) != Qgis::WkbType::MultiPoint ) //keep multitype in case of geometry type mix
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::Point;
|
mWkbType = dimension > 2 ? Qgis::WkbType::PointZ : Qgis::WkbType::Point;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else //multipoint, add WKB as fragment
|
else //multipoint, add WKB as fragment
|
||||||
{
|
{
|
||||||
QByteArray wkbPtr;
|
QByteArray wkbPtr;
|
||||||
if ( getPointWKB( wkbPtr, *( pointList.constBegin() ) ) != 0 )
|
if ( getPointWKB( wkbPtr, *( pointList.constBegin() ), dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
@ -1324,32 +1327,40 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
{
|
{
|
||||||
//add WKB point to the feature
|
//add WKB point to the feature
|
||||||
|
|
||||||
QList<QgsPointXY> pointList;
|
QList<QgsPoint> pointList;
|
||||||
if ( pointsFromString( pointList, mStringCash ) != 0 )
|
int dimension = 0;
|
||||||
|
if ( pointsFromString( pointList, mStringCash, &dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
mStringCash.clear();
|
mStringCash.clear();
|
||||||
|
mDimension = dimension;
|
||||||
|
|
||||||
if ( parseMode == QgsGmlStreamingParser::Geometry )
|
if ( parseMode == QgsGmlStreamingParser::Geometry )
|
||||||
{
|
{
|
||||||
if ( getLineWKB( mCurrentWKB, pointList ) != 0 )
|
if ( getLineWKB( mCurrentWKB, pointList, dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mWkbType != Qgis::WkbType::MultiLineString )//keep multitype in case of geometry type mix
|
if ( QgsWkbTypes::flatType( mWkbType ) != Qgis::WkbType::MultiLineString )//keep multitype in case of geometry type mix
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::LineString;
|
mWkbType = dimension > 2 ? Qgis::WkbType::LineStringZ : Qgis::WkbType::LineString;
|
||||||
}
|
}
|
||||||
|
else if ( dimension > 2 )
|
||||||
|
{
|
||||||
|
mWkbType = Qgis::WkbType::MultiLineStringZ;
|
||||||
|
}
|
||||||
|
mDimension = dimension;
|
||||||
}
|
}
|
||||||
else //multiline, add WKB as fragment
|
else //multiline, add WKB as fragment
|
||||||
{
|
{
|
||||||
QByteArray wkbPtr;
|
QByteArray wkbPtr;
|
||||||
if ( getLineWKB( wkbPtr, pointList ) != 0 )
|
if ( getLineWKB( wkbPtr, pointList, dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
|
mDimension = dimension;
|
||||||
if ( !mCurrentWKBFragments.isEmpty() )
|
if ( !mCurrentWKBFragments.isEmpty() )
|
||||||
{
|
{
|
||||||
mCurrentWKBFragments.last().push_back( wkbPtr );
|
mCurrentWKBFragments.last().push_back( wkbPtr );
|
||||||
@ -1363,15 +1374,17 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
else if ( ( parseMode == Geometry || parseMode == MultiPolygon ) &&
|
else if ( ( parseMode == Geometry || parseMode == MultiPolygon ) &&
|
||||||
isGMLNS && LOCALNAME_EQUALS( "LinearRing" ) )
|
isGMLNS && LOCALNAME_EQUALS( "LinearRing" ) )
|
||||||
{
|
{
|
||||||
QList<QgsPointXY> pointList;
|
QList<QgsPoint> pointList;
|
||||||
if ( pointsFromString( pointList, mStringCash ) != 0 )
|
int dimension = 0;
|
||||||
|
if ( pointsFromString( pointList, mStringCash, &dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
mStringCash.clear();
|
mStringCash.clear();
|
||||||
|
mDimension = dimension;
|
||||||
|
|
||||||
QByteArray wkbPtr;
|
QByteArray wkbPtr;
|
||||||
if ( getRingWKB( wkbPtr, pointList ) != 0 )
|
if ( getRingWKB( wkbPtr, pointList, dimension ) != 0 )
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
}
|
}
|
||||||
@ -1388,9 +1401,9 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
else if ( ( parseMode == Geometry || parseMode == MultiPolygon ) && isGMLNS &&
|
else if ( ( parseMode == Geometry || parseMode == MultiPolygon ) && isGMLNS &&
|
||||||
LOCALNAME_EQUALS( "Polygon" ) )
|
LOCALNAME_EQUALS( "Polygon" ) )
|
||||||
{
|
{
|
||||||
if ( mWkbType != Qgis::WkbType::MultiPolygon )//keep multitype in case of geometry type mix
|
if ( QgsWkbTypes::flatType( mWkbType ) != Qgis::WkbType::MultiPolygon ) //keep multitype in case of geometry type mix
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::Polygon;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( parseMode == Geometry )
|
if ( parseMode == Geometry )
|
||||||
@ -1401,21 +1414,21 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
|
|||||||
else if ( parseMode == MultiPoint && isGMLNS &&
|
else if ( parseMode == MultiPoint && isGMLNS &&
|
||||||
LOCALNAME_EQUALS( "MultiPoint" ) )
|
LOCALNAME_EQUALS( "MultiPoint" ) )
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::MultiPoint;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiPointZ : Qgis::WkbType::MultiPoint;
|
||||||
mParseModeStack.pop();
|
mParseModeStack.pop();
|
||||||
createMultiPointFromFragments();
|
createMultiPointFromFragments();
|
||||||
}
|
}
|
||||||
else if ( parseMode == MultiLine && isGMLNS &&
|
else if ( parseMode == MultiLine && isGMLNS &&
|
||||||
( LOCALNAME_EQUALS( "MultiLineString" ) || LOCALNAME_EQUALS( "MultiCurve" ) ) )
|
( LOCALNAME_EQUALS( "MultiLineString" ) || LOCALNAME_EQUALS( "MultiCurve" ) ) )
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::MultiLineString;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiLineStringZ : Qgis::WkbType::MultiLineString;
|
||||||
mParseModeStack.pop();
|
mParseModeStack.pop();
|
||||||
createMultiLineFromFragments();
|
createMultiLineFromFragments();
|
||||||
}
|
}
|
||||||
else if ( parseMode == MultiPolygon && isGMLNS &&
|
else if ( parseMode == MultiPolygon && isGMLNS &&
|
||||||
( LOCALNAME_EQUALS( "MultiPolygon" ) || LOCALNAME_EQUALS( "MultiSurface" ) ) )
|
( LOCALNAME_EQUALS( "MultiPolygon" ) || LOCALNAME_EQUALS( "MultiSurface" ) ) )
|
||||||
{
|
{
|
||||||
mWkbType = Qgis::WkbType::MultiPolygon;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiPolygonZ : Qgis::WkbType::MultiPolygon;
|
||||||
mParseModeStack.pop();
|
mParseModeStack.pop();
|
||||||
createMultiPolygonFromFragments();
|
createMultiPolygonFromFragments();
|
||||||
}
|
}
|
||||||
@ -1584,7 +1597,7 @@ QString QgsGmlStreamingParser::readAttribute( const QString &attributeName, cons
|
|||||||
|
|
||||||
bool QgsGmlStreamingParser::createBBoxFromCoordinateString( QgsRectangle &r, const QString &coordString ) const
|
bool QgsGmlStreamingParser::createBBoxFromCoordinateString( QgsRectangle &r, const QString &coordString ) const
|
||||||
{
|
{
|
||||||
QList<QgsPointXY> points;
|
QList<QgsPoint> points;
|
||||||
if ( pointsFromCoordinateString( points, coordString ) != 0 )
|
if ( pointsFromCoordinateString( points, coordString ) != 0 )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -1600,18 +1613,25 @@ bool QgsGmlStreamingParser::createBBoxFromCoordinateString( QgsRectangle &r, con
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::pointsFromCoordinateString( QList<QgsPointXY> &points, const QString &coordString ) const
|
int QgsGmlStreamingParser::pointsFromCoordinateString( QList<QgsPoint> &points, const QString &coordString, int *dimension ) const
|
||||||
{
|
{
|
||||||
//tuples are separated by space, x/y by ','
|
//tuples are separated by space, x/y by ','
|
||||||
const QStringList tuples = coordString.split( mTupleSeparator, Qt::SkipEmptyParts );
|
const QStringList tuples = coordString.split( mTupleSeparator, Qt::SkipEmptyParts );
|
||||||
QStringList tuples_coordinates;
|
QStringList tuples_coordinates;
|
||||||
double x, y;
|
double x, y, z;
|
||||||
bool conversionSuccess;
|
bool conversionSuccess;
|
||||||
|
|
||||||
|
if ( dimension )
|
||||||
|
*dimension = 0;
|
||||||
|
|
||||||
QStringList::const_iterator tupleIterator;
|
QStringList::const_iterator tupleIterator;
|
||||||
for ( tupleIterator = tuples.constBegin(); tupleIterator != tuples.constEnd(); ++tupleIterator )
|
for ( tupleIterator = tuples.constBegin(); tupleIterator != tuples.constEnd(); ++tupleIterator )
|
||||||
{
|
{
|
||||||
tuples_coordinates = tupleIterator->split( mCoordinateSeparator, Qt::SkipEmptyParts );
|
tuples_coordinates = tupleIterator->split( mCoordinateSeparator, Qt::SkipEmptyParts );
|
||||||
|
if ( dimension )
|
||||||
|
{
|
||||||
|
*dimension = std::max( *dimension, static_cast<int>( tuples_coordinates.size() ) );
|
||||||
|
}
|
||||||
if ( tuples_coordinates.size() < 2 )
|
if ( tuples_coordinates.size() < 2 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -1626,12 +1646,30 @@ int QgsGmlStreamingParser::pointsFromCoordinateString( QList<QgsPointXY> &points
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
points.push_back( ( mInvertAxisOrientation ) ? QgsPointXY( y, x ) : QgsPointXY( x, y ) );
|
if ( tuples_coordinates.size() > 2 )
|
||||||
|
{
|
||||||
|
z = tuples_coordinates.at( 2 ).toDouble( &conversionSuccess );
|
||||||
|
if ( !conversionSuccess )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
z = std::numeric_limits<double>::quiet_NaN(); // no Z coordinate
|
||||||
|
}
|
||||||
|
points.push_back( ( mInvertAxisOrientation ) ? QgsPoint( y, x, z ) : QgsPoint( x, y, z ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( dimension && *dimension == 0 )
|
||||||
|
{
|
||||||
|
*dimension = 2; // default dimension is 2D
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::pointsFromPosListString( QList<QgsPointXY> &points, const QString &coordString, int dimension ) const
|
int QgsGmlStreamingParser::pointsFromPosListString( QList<QgsPoint> &points, const QString &coordString, int dimension ) const
|
||||||
{
|
{
|
||||||
// coordinates separated by spaces
|
// coordinates separated by spaces
|
||||||
const QStringList coordinates = coordString.split( ' ', Qt::SkipEmptyParts );
|
const QStringList coordinates = coordString.split( ' ', Qt::SkipEmptyParts );
|
||||||
@ -1655,66 +1693,91 @@ int QgsGmlStreamingParser::pointsFromPosListString( QList<QgsPointXY> &points, c
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
points.append( ( mInvertAxisOrientation ) ? QgsPointXY( y, x ) : QgsPointXY( x, y ) );
|
double z = std::numeric_limits<double>::quiet_NaN();
|
||||||
|
if ( dimension > 2 )
|
||||||
|
{
|
||||||
|
z = coordinates.value( i * dimension + 2 ).toDouble( &conversionSuccess );
|
||||||
|
if ( !conversionSuccess )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
points.append( mInvertAxisOrientation ? QgsPoint( y, x, z ) : QgsPoint( x, y, z ) );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::pointsFromString( QList<QgsPointXY> &points, const QString &coordString ) const
|
int QgsGmlStreamingParser::pointsFromString( QList<QgsPoint> &points, const QString &coordString, int *dimension ) const
|
||||||
{
|
{
|
||||||
if ( mCoorMode == QgsGmlStreamingParser::Coordinate )
|
if ( mCoorMode == QgsGmlStreamingParser::Coordinate )
|
||||||
{
|
{
|
||||||
return pointsFromCoordinateString( points, coordString );
|
return pointsFromCoordinateString( points, coordString, dimension );
|
||||||
}
|
}
|
||||||
else if ( mCoorMode == QgsGmlStreamingParser::PosList )
|
else if ( mCoorMode == QgsGmlStreamingParser::PosList )
|
||||||
{
|
{
|
||||||
|
if ( dimension )
|
||||||
|
{
|
||||||
|
*dimension = mDimension ? mDimension : 2; // default dimension is 2D
|
||||||
|
}
|
||||||
return pointsFromPosListString( points, coordString, mDimension ? mDimension : 2 );
|
return pointsFromPosListString( points, coordString, mDimension ? mDimension : 2 );
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::getPointWKB( QByteArray &wkbPtr, const QgsPointXY &point ) const
|
int QgsGmlStreamingParser::getPointWKB( QByteArray &wkbPtr, const QgsPoint &point, int dimension ) const
|
||||||
{
|
{
|
||||||
const int wkbSize = 1 + sizeof( int ) + 2 * sizeof( double );
|
const int wkbSize = 1 + static_cast<int>( sizeof( int ) ) + dimension * static_cast<int>( sizeof( double ) );
|
||||||
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr fillPtr( wkbPtr );
|
QgsWkbPtr fillPtr( wkbPtr );
|
||||||
fillPtr << mEndian << Qgis::WkbType::Point << point.x() << point.y();
|
fillPtr << mEndian << ( dimension > 2 ? Qgis::WkbType::PointZ : Qgis::WkbType::Point ) << point.x() << point.y();
|
||||||
|
if ( dimension > 2 )
|
||||||
|
{
|
||||||
|
fillPtr << point.z(); // add Z coordinate if available
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::getLineWKB( QByteArray &wkbPtr, const QList<QgsPointXY> &lineCoordinates ) const
|
int QgsGmlStreamingParser::getLineWKB( QByteArray &wkbPtr, const QList<QgsPoint> &lineCoordinates, int dimension ) const
|
||||||
{
|
{
|
||||||
const int wkbSize = 1 + 2 * sizeof( int ) + lineCoordinates.size() * 2 * sizeof( double );
|
const int wkbSize = 1 + 2 * static_cast<int>( sizeof( int ) ) + static_cast<int>( lineCoordinates.size() ) * dimension * static_cast<int>( sizeof( double ) );
|
||||||
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr fillPtr( wkbPtr );
|
QgsWkbPtr fillPtr( wkbPtr );
|
||||||
|
|
||||||
fillPtr << mEndian << Qgis::WkbType::LineString << lineCoordinates.size();
|
fillPtr << mEndian << ( dimension > 2 ? Qgis::WkbType::LineStringZ : Qgis::WkbType::LineString ) << lineCoordinates.size();
|
||||||
|
|
||||||
QList<QgsPointXY>::const_iterator iter;
|
QList<QgsPoint>::const_iterator iter;
|
||||||
for ( iter = lineCoordinates.constBegin(); iter != lineCoordinates.constEnd(); ++iter )
|
for ( iter = lineCoordinates.constBegin(); iter != lineCoordinates.constEnd(); ++iter )
|
||||||
{
|
{
|
||||||
fillPtr << iter->x() << iter->y();
|
fillPtr << iter->x() << iter->y();
|
||||||
|
if ( dimension > 2 )
|
||||||
|
{
|
||||||
|
fillPtr << iter->z(); // add Z coordinate if available
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::getRingWKB( QByteArray &wkbPtr, const QList<QgsPointXY> &ringCoordinates ) const
|
int QgsGmlStreamingParser::getRingWKB( QByteArray &wkbPtr, const QList<QgsPoint> &ringCoordinates, int dimension ) const
|
||||||
{
|
{
|
||||||
const int wkbSize = sizeof( int ) + ringCoordinates.size() * 2 * sizeof( double );
|
const int wkbSize = static_cast<int>( sizeof( int ) ) + static_cast<int>( ringCoordinates.size() ) * dimension * static_cast<int>( sizeof( double ) );
|
||||||
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
wkbPtr = QByteArray( wkbSize, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr fillPtr( wkbPtr );
|
QgsWkbPtr fillPtr( wkbPtr );
|
||||||
|
|
||||||
fillPtr << ringCoordinates.size();
|
fillPtr << ringCoordinates.size();
|
||||||
|
|
||||||
QList<QgsPointXY>::const_iterator iter;
|
QList<QgsPoint>::const_iterator iter;
|
||||||
for ( iter = ringCoordinates.constBegin(); iter != ringCoordinates.constEnd(); ++iter )
|
for ( iter = ringCoordinates.constBegin(); iter != ringCoordinates.constEnd(); ++iter )
|
||||||
{
|
{
|
||||||
fillPtr << iter->x() << iter->y();
|
fillPtr << iter->x() << iter->y();
|
||||||
|
if ( dimension > 2 )
|
||||||
|
{
|
||||||
|
fillPtr << iter->z(); // add Z coordinate if available
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1722,12 +1785,12 @@ int QgsGmlStreamingParser::getRingWKB( QByteArray &wkbPtr, const QList<QgsPointX
|
|||||||
|
|
||||||
int QgsGmlStreamingParser::createMultiLineFromFragments()
|
int QgsGmlStreamingParser::createMultiLineFromFragments()
|
||||||
{
|
{
|
||||||
const int size = 1 + 2 * sizeof( int ) + totalWKBFragmentSize();
|
const int size = 1 + ( mDimension > 2 ? mDimension : 2 ) * static_cast<int>( sizeof( int ) ) + totalWKBFragmentSize();
|
||||||
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr wkbPtr( mCurrentWKB );
|
QgsWkbPtr wkbPtr( mCurrentWKB );
|
||||||
|
|
||||||
wkbPtr << mEndian << Qgis::WkbType::MultiLineString << mCurrentWKBFragments.constBegin()->size();
|
wkbPtr << mEndian << ( mDimension > 2 ? Qgis::WkbType::MultiLineStringZ : Qgis::WkbType::MultiLineString ) << mCurrentWKBFragments.constBegin()->size();
|
||||||
|
|
||||||
//copy (and delete) all the wkb fragments
|
//copy (and delete) all the wkb fragments
|
||||||
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
||||||
@ -1738,17 +1801,17 @@ int QgsGmlStreamingParser::createMultiLineFromFragments()
|
|||||||
}
|
}
|
||||||
|
|
||||||
mCurrentWKBFragments.clear();
|
mCurrentWKBFragments.clear();
|
||||||
mWkbType = Qgis::WkbType::MultiLineString;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiLineStringZ : Qgis::WkbType::MultiLineString;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::createMultiPointFromFragments()
|
int QgsGmlStreamingParser::createMultiPointFromFragments()
|
||||||
{
|
{
|
||||||
const int size = 1 + 2 * sizeof( int ) + totalWKBFragmentSize();
|
const int size = 1 + ( mDimension > 2 ? mDimension : 2 ) * static_cast<int>( sizeof( int ) ) + totalWKBFragmentSize();
|
||||||
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr wkbPtr( mCurrentWKB );
|
QgsWkbPtr wkbPtr( mCurrentWKB );
|
||||||
wkbPtr << mEndian << Qgis::WkbType::MultiPoint << mCurrentWKBFragments.constBegin()->size();
|
wkbPtr << mEndian << ( mDimension > 2 ? Qgis::WkbType::MultiPointZ : Qgis::WkbType::MultiPoint ) << mCurrentWKBFragments.constBegin()->size();
|
||||||
|
|
||||||
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
||||||
for ( ; wkbIt != mCurrentWKBFragments.constBegin()->constEnd(); ++wkbIt )
|
for ( ; wkbIt != mCurrentWKBFragments.constBegin()->constEnd(); ++wkbIt )
|
||||||
@ -1758,18 +1821,18 @@ int QgsGmlStreamingParser::createMultiPointFromFragments()
|
|||||||
}
|
}
|
||||||
|
|
||||||
mCurrentWKBFragments.clear();
|
mCurrentWKBFragments.clear();
|
||||||
mWkbType = Qgis::WkbType::MultiPoint;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiPointZ : Qgis::WkbType::MultiPoint;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int QgsGmlStreamingParser::createPolygonFromFragments()
|
int QgsGmlStreamingParser::createPolygonFromFragments()
|
||||||
{
|
{
|
||||||
const int size = 1 + 2 * sizeof( int ) + totalWKBFragmentSize();
|
const int size = 1 + ( mDimension > 2 ? mDimension : 2 ) * static_cast<int>( sizeof( int ) ) + totalWKBFragmentSize();
|
||||||
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr wkbPtr( mCurrentWKB );
|
QgsWkbPtr wkbPtr( mCurrentWKB );
|
||||||
wkbPtr << mEndian << Qgis::WkbType::Polygon << mCurrentWKBFragments.constBegin()->size();
|
wkbPtr << mEndian << ( mDimension > 2 ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon ) << mCurrentWKBFragments.constBegin()->size();
|
||||||
|
|
||||||
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
auto wkbIt = mCurrentWKBFragments.constBegin()->constBegin();
|
||||||
for ( ; wkbIt != mCurrentWKBFragments.constBegin()->constEnd(); ++wkbIt )
|
for ( ; wkbIt != mCurrentWKBFragments.constBegin()->constEnd(); ++wkbIt )
|
||||||
@ -1779,21 +1842,21 @@ int QgsGmlStreamingParser::createPolygonFromFragments()
|
|||||||
}
|
}
|
||||||
|
|
||||||
mCurrentWKBFragments.clear();
|
mCurrentWKBFragments.clear();
|
||||||
mWkbType = Qgis::WkbType::Polygon;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QgsGmlStreamingParser::createMultiPolygonFromFragments()
|
int QgsGmlStreamingParser::createMultiPolygonFromFragments()
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
size += 1 + 2 * sizeof( int );
|
size += 1 + ( mDimension > 2 ? mDimension : 2 ) * static_cast<int>( sizeof( int ) );
|
||||||
size += totalWKBFragmentSize();
|
size += totalWKBFragmentSize();
|
||||||
size += mCurrentWKBFragments.size() * ( 1 + 2 * sizeof( int ) ); //fragments are just the rings
|
size += mCurrentWKBFragments.size() * ( 1 + ( mDimension > 2 ? mDimension : 2 ) * static_cast<int>( sizeof( int ) ) ); //fragments are just the rings
|
||||||
|
|
||||||
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
mCurrentWKB = QByteArray( size, Qt::Uninitialized );
|
||||||
|
|
||||||
QgsWkbPtr wkbPtr( mCurrentWKB );
|
QgsWkbPtr wkbPtr( mCurrentWKB );
|
||||||
wkbPtr << ( char ) mEndian << Qgis::WkbType::MultiPolygon << mCurrentWKBFragments.size();
|
wkbPtr << ( char ) mEndian << ( mDimension > 2 ? Qgis::WkbType::MultiPolygonZ : Qgis::WkbType::MultiPolygon ) << mCurrentWKBFragments.size();
|
||||||
|
|
||||||
//have outer and inner iterators
|
//have outer and inner iterators
|
||||||
auto outerWkbIt = mCurrentWKBFragments.constBegin();
|
auto outerWkbIt = mCurrentWKBFragments.constBegin();
|
||||||
@ -1801,7 +1864,7 @@ int QgsGmlStreamingParser::createMultiPolygonFromFragments()
|
|||||||
for ( ; outerWkbIt != mCurrentWKBFragments.constEnd(); ++outerWkbIt )
|
for ( ; outerWkbIt != mCurrentWKBFragments.constEnd(); ++outerWkbIt )
|
||||||
{
|
{
|
||||||
//new polygon
|
//new polygon
|
||||||
wkbPtr << ( char ) mEndian << Qgis::WkbType::Polygon << outerWkbIt->size();
|
wkbPtr << ( char ) mEndian << ( mDimension > 2 ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon ) << outerWkbIt->size();
|
||||||
|
|
||||||
auto innerWkbIt = outerWkbIt->constBegin();
|
auto innerWkbIt = outerWkbIt->constBegin();
|
||||||
for ( ; innerWkbIt != outerWkbIt->constEnd(); ++innerWkbIt )
|
for ( ; innerWkbIt != outerWkbIt->constEnd(); ++innerWkbIt )
|
||||||
@ -1812,7 +1875,7 @@ int QgsGmlStreamingParser::createMultiPolygonFromFragments()
|
|||||||
}
|
}
|
||||||
|
|
||||||
mCurrentWKBFragments.clear();
|
mCurrentWKBFragments.clear();
|
||||||
mWkbType = Qgis::WkbType::MultiPolygon;
|
mWkbType = mDimension > 2 ? Qgis::WkbType::MultiPolygonZ : Qgis::WkbType::MultiPolygon;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,9 +230,10 @@ class CORE_EXPORT QgsGmlStreamingParser
|
|||||||
* Creates a set of points from a coordinate string.
|
* Creates a set of points from a coordinate string.
|
||||||
* \param points list that will contain the created points
|
* \param points list that will contain the created points
|
||||||
* \param coordString the text containing the coordinates
|
* \param coordString the text containing the coordinates
|
||||||
|
* \param dimension number of dimensions determined from the coordinate string
|
||||||
* \returns 0 in case of success
|
* \returns 0 in case of success
|
||||||
*/
|
*/
|
||||||
int pointsFromCoordinateString( QList<QgsPointXY> &points, const QString &coordString ) const;
|
int pointsFromCoordinateString( QList<QgsPoint> &points, const QString &coordString, int *dimension = nullptr ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a set of points from a gml:posList or gml:pos coordinate string.
|
* Creates a set of points from a gml:posList or gml:pos coordinate string.
|
||||||
@ -241,12 +242,12 @@ class CORE_EXPORT QgsGmlStreamingParser
|
|||||||
* \param dimension number of dimensions
|
* \param dimension number of dimensions
|
||||||
* \returns 0 in case of success
|
* \returns 0 in case of success
|
||||||
*/
|
*/
|
||||||
int pointsFromPosListString( QList<QgsPointXY> &points, const QString &coordString, int dimension ) const;
|
int pointsFromPosListString( QList<QgsPoint> &points, const QString &coordString, int dimension ) const;
|
||||||
|
|
||||||
int pointsFromString( QList<QgsPointXY> &points, const QString &coordString ) const;
|
int pointsFromString( QList<QgsPoint> &points, const QString &coordString, int *dimension = nullptr ) const;
|
||||||
int getPointWKB( QByteArray &wkbPtr, const QgsPointXY & ) const;
|
int getPointWKB( QByteArray &wkbPtr, const QgsPoint &, int dimension ) const;
|
||||||
int getLineWKB( QByteArray &wkbPtr, const QList<QgsPointXY> &lineCoordinates ) const;
|
int getLineWKB( QByteArray &wkbPtr, const QList<QgsPoint> &lineCoordinates, int dimension ) const;
|
||||||
int getRingWKB( QByteArray &wkbPtr, const QList<QgsPointXY> &ringCoordinates ) const;
|
int getRingWKB( QByteArray &wkbPtr, const QList<QgsPoint> &ringCoordinates, int dimension ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a multiline from the information in mCurrentWKBFragments and
|
* Creates a multiline from the information in mCurrentWKBFragments and
|
||||||
|
@ -2657,30 +2657,46 @@ bool QgsMapLayer::deleteStyleFromDatabase( const QString &styleId, QString &msgE
|
|||||||
|
|
||||||
void QgsMapLayer::saveStyleToDatabase( const QString &name, const QString &description,
|
void QgsMapLayer::saveStyleToDatabase( const QString &name, const QString &description,
|
||||||
bool useAsDefault, const QString &uiFileContent, QString &msgError, QgsMapLayer::StyleCategories categories )
|
bool useAsDefault, const QString &uiFileContent, QString &msgError, QgsMapLayer::StyleCategories categories )
|
||||||
|
{
|
||||||
|
saveStyleToDatabaseV2( name, description, useAsDefault, uiFileContent, msgError, categories );
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsMapLayer::SaveStyleResults QgsMapLayer::saveStyleToDatabaseV2( const QString &name, const QString &description, bool useAsDefault, const QString &uiFileContent, QString &msgError, QgsMapLayer::StyleCategories categories )
|
||||||
{
|
{
|
||||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||||
|
|
||||||
|
QgsMapLayer::SaveStyleResults results;
|
||||||
|
|
||||||
QString sldStyle, qmlStyle;
|
QString sldStyle, qmlStyle;
|
||||||
QDomDocument qmlDocument;
|
QDomDocument qmlDocument;
|
||||||
QgsReadWriteContext context;
|
QgsReadWriteContext context;
|
||||||
exportNamedStyle( qmlDocument, msgError, context, categories );
|
exportNamedStyle( qmlDocument, msgError, context, categories );
|
||||||
if ( !msgError.isNull() )
|
if ( !msgError.isEmpty() )
|
||||||
{
|
{
|
||||||
return;
|
results.setFlag( QgsMapLayer::SaveStyleResult::QmlGenerationFailed );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
qmlStyle = qmlDocument.toString();
|
qmlStyle = qmlDocument.toString();
|
||||||
|
}
|
||||||
|
|
||||||
QgsSldExportContext sldContext;
|
QgsSldExportContext sldContext;
|
||||||
QDomDocument sldDocument = this->exportSldStyleV3( sldContext );
|
QDomDocument sldDocument = this->exportSldStyleV3( sldContext );
|
||||||
if ( !sldContext.errors().empty() )
|
if ( !sldContext.errors().empty() )
|
||||||
{
|
{
|
||||||
return;
|
results.setFlag( QgsMapLayer::SaveStyleResult::SldGenerationFailed );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
sldStyle = sldDocument.toString();
|
sldStyle = sldDocument.toString();
|
||||||
|
}
|
||||||
|
|
||||||
QgsProviderRegistry::instance()->saveStyle( mProviderKey,
|
if ( !QgsProviderRegistry::instance()->saveStyle( mProviderKey,
|
||||||
mDataSource, qmlStyle, sldStyle, name,
|
mDataSource, qmlStyle, sldStyle, name, description, uiFileContent, useAsDefault, msgError ) )
|
||||||
description, uiFileContent, useAsDefault, msgError );
|
{
|
||||||
|
results.setFlag( QgsMapLayer::SaveStyleResult::DatabaseWriteFailed );
|
||||||
|
}
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QgsMapLayer::loadNamedStyle( const QString &theURI, bool &resultFlag, bool loadFromLocalDB, QgsMapLayer::StyleCategories categories, Qgis::LoadStyleFlags flags )
|
QString QgsMapLayer::loadNamedStyle( const QString &theURI, bool &resultFlag, bool loadFromLocalDB, QgsMapLayer::StyleCategories categories, Qgis::LoadStyleFlags flags )
|
||||||
|
@ -758,7 +758,29 @@ class CORE_EXPORT QgsMapLayer : public QObject
|
|||||||
virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
|
virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves named and sld style of the layer to the style table in the db.
|
* Results of saving styles to database.
|
||||||
|
*
|
||||||
|
* \since QGIS 4.0
|
||||||
|
*/
|
||||||
|
enum class SaveStyleResult SIP_ENUM_BASETYPE( IntFlag )
|
||||||
|
{
|
||||||
|
Success = 0, //!< Both QML and SLD formats were successfully written to the database.
|
||||||
|
QmlGenerationFailed = 1 << 0, //!< Generation of the QML failed, and was not written to the database.
|
||||||
|
SldGenerationFailed = 1 << 1, //!< Generation of the SLD failed, and was not written to the database.
|
||||||
|
DatabaseWriteFailed = 1 << 2, //!< An error occurred when attempting to write to the database.
|
||||||
|
};
|
||||||
|
Q_ENUM( SaveStyleResult )
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Results of saving styles to database.
|
||||||
|
*
|
||||||
|
* \since QGIS 4.0
|
||||||
|
*/
|
||||||
|
Q_DECLARE_FLAGS( SaveStyleResults, SaveStyleResult )
|
||||||
|
Q_FLAG( SaveStyleResults )
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves QML and SLD representations of the layer's style to a table in the database.
|
||||||
* \param name Style name
|
* \param name Style name
|
||||||
* \param description A description of the style
|
* \param description A description of the style
|
||||||
* \param useAsDefault Set to TRUE if style should be used as the default style for the layer
|
* \param useAsDefault Set to TRUE if style should be used as the default style for the layer
|
||||||
@ -766,19 +788,37 @@ class CORE_EXPORT QgsMapLayer : public QObject
|
|||||||
* \param msgError will be set to a descriptive error message if any occurs
|
* \param msgError will be set to a descriptive error message if any occurs
|
||||||
* \param categories the style categories to be saved.
|
* \param categories the style categories to be saved.
|
||||||
*
|
*
|
||||||
*
|
|
||||||
* \note Prior to QGIS 3.24, this method would show a message box warning when a
|
* \note Prior to QGIS 3.24, this method would show a message box warning when a
|
||||||
* style with the same \a styleName already existed to confirm replacing the style with the user.
|
* style with the same \a styleName already existed to confirm replacing the style with the user.
|
||||||
* Since 3.24, calling this method will ALWAYS overwrite any existing style with the same name.
|
* Since 3.24, calling this method will ALWAYS overwrite any existing style with the same name.
|
||||||
* Use QgsProviderRegistry::styleExists() to test in advance if a style already exists and handle this appropriately
|
* Use QgsProviderRegistry::styleExists() to test in advance if a style already exists and handle this appropriately
|
||||||
* in your client code.
|
* in your client code.
|
||||||
|
*
|
||||||
|
* \deprecated QGIS 4.0. Use saveStyleToDatabaseV2() instead.
|
||||||
*/
|
*/
|
||||||
virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
Q_DECL_DEPRECATED virtual void saveStyleToDatabase( const QString &name, const QString &description,
|
||||||
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
|
QString &msgError SIP_OUT,
|
||||||
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) SIP_DEPRECATED;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves QML and SLD representations of the layer's style to a table in the database.
|
||||||
|
* \param name Style name
|
||||||
|
* \param description A description of the style
|
||||||
|
* \param useAsDefault Set to TRUE if style should be used as the default style for the layer
|
||||||
|
* \param uiFileContent
|
||||||
|
* \param msgError will be set to a descriptive error message if any occurs
|
||||||
|
* \param categories the style categories to be saved.
|
||||||
|
*
|
||||||
|
* \returns flags representing whether QML or SLD storing was successful
|
||||||
|
*
|
||||||
|
* \since QGIS 4.0
|
||||||
|
*/
|
||||||
|
QgsMapLayer::SaveStyleResults saveStyleToDatabaseV2( const QString &name, const QString &description,
|
||||||
bool useAsDefault, const QString &uiFileContent,
|
bool useAsDefault, const QString &uiFileContent,
|
||||||
QString &msgError SIP_OUT,
|
QString &msgError SIP_OUT,
|
||||||
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
|
||||||
|
|
||||||
|
|
||||||
// TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "a style WAS found but an error occurred loading it" vs "no style was found".
|
// TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "a style WAS found but an error occurred loading it" vs "no style was found".
|
||||||
// The first (style found, error occurred loading it) should trigger a user-facing warning, whereas the second (no style found) isn't reflective of an error at all.
|
// The first (style found, error occurred loading it) should trigger a user-facing warning, whereas the second (no style found) isn't reflective of an error at all.
|
||||||
|
|
||||||
|
@ -26,6 +26,9 @@
|
|||||||
#include "qgsexpressioncontextutils.h"
|
#include "qgsexpressioncontextutils.h"
|
||||||
#include "qgslogger.h"
|
#include "qgslogger.h"
|
||||||
#include "qgsstringutils.h"
|
#include "qgsstringutils.h"
|
||||||
|
#include "qgsmultipolygon.h"
|
||||||
|
#include "qgspolygon.h"
|
||||||
|
#include "qgsogrutils.h"
|
||||||
|
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@ -33,6 +36,9 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
|
||||||
|
#include "ogr_api.h"
|
||||||
|
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#else
|
#else
|
||||||
@ -92,7 +98,7 @@ QgsGeometry QgsOgcUtils::geometryFromGML( const QDomNode &geometryNode, const Co
|
|||||||
|
|
||||||
if ( !( geomType == QLatin1String( "Point" ) || geomType == QLatin1String( "LineString" ) || geomType == QLatin1String( "Polygon" ) ||
|
if ( !( geomType == QLatin1String( "Point" ) || geomType == QLatin1String( "LineString" ) || geomType == QLatin1String( "Polygon" ) ||
|
||||||
geomType == QLatin1String( "MultiPoint" ) || geomType == QLatin1String( "MultiLineString" ) || geomType == QLatin1String( "MultiPolygon" ) ||
|
geomType == QLatin1String( "MultiPoint" ) || geomType == QLatin1String( "MultiLineString" ) || geomType == QLatin1String( "MultiPolygon" ) ||
|
||||||
geomType == QLatin1String( "Box" ) || geomType == QLatin1String( "Envelope" ) ) )
|
geomType == QLatin1String( "Box" ) || geomType == QLatin1String( "Envelope" ) || geomType == QLatin1String( "MultiCurve" ) ) )
|
||||||
{
|
{
|
||||||
const QDomNode geometryChild = geometryNode.firstChild();
|
const QDomNode geometryChild = geometryNode.firstChild();
|
||||||
if ( geometryChild.isNull() )
|
if ( geometryChild.isNull() )
|
||||||
@ -105,7 +111,7 @@ QgsGeometry QgsOgcUtils::geometryFromGML( const QDomNode &geometryNode, const Co
|
|||||||
|
|
||||||
if ( !( geomType == QLatin1String( "Point" ) || geomType == QLatin1String( "LineString" ) || geomType == QLatin1String( "Polygon" ) ||
|
if ( !( geomType == QLatin1String( "Point" ) || geomType == QLatin1String( "LineString" ) || geomType == QLatin1String( "Polygon" ) ||
|
||||||
geomType == QLatin1String( "MultiPoint" ) || geomType == QLatin1String( "MultiLineString" ) || geomType == QLatin1String( "MultiPolygon" ) ||
|
geomType == QLatin1String( "MultiPoint" ) || geomType == QLatin1String( "MultiLineString" ) || geomType == QLatin1String( "MultiPolygon" ) ||
|
||||||
geomType == QLatin1String( "Box" ) || geomType == QLatin1String( "Envelope" ) ) )
|
geomType == QLatin1String( "Box" ) || geomType == QLatin1String( "Envelope" ) || geomType == QLatin1String( "MultiCurve" ) ) )
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
|
|
||||||
if ( geomType == QLatin1String( "Point" ) )
|
if ( geomType == QLatin1String( "Point" ) )
|
||||||
@ -128,6 +134,10 @@ QgsGeometry QgsOgcUtils::geometryFromGML( const QDomNode &geometryNode, const Co
|
|||||||
{
|
{
|
||||||
geometry = geometryFromGMLMultiLineString( geometryTypeElement );
|
geometry = geometryFromGMLMultiLineString( geometryTypeElement );
|
||||||
}
|
}
|
||||||
|
else if ( geomType == QLatin1String( "MultiCurve" ) )
|
||||||
|
{
|
||||||
|
geometry = geometryFromGMLMultiCurve( geometryTypeElement );
|
||||||
|
}
|
||||||
else if ( geomType == QLatin1String( "MultiPolygon" ) )
|
else if ( geomType == QLatin1String( "MultiPolygon" ) )
|
||||||
{
|
{
|
||||||
geometry = geometryFromGMLMultiPolygon( geometryTypeElement );
|
geometry = geometryFromGMLMultiPolygon( geometryTypeElement );
|
||||||
@ -142,6 +152,7 @@ QgsGeometry QgsOgcUtils::geometryFromGML( const QDomNode &geometryNode, const Co
|
|||||||
}
|
}
|
||||||
else //unknown type
|
else //unknown type
|
||||||
{
|
{
|
||||||
|
QgsDebugMsgLevel( QStringLiteral( "Unknown geometry type %1" ).arg( geomType ), 2 );
|
||||||
return geometry;
|
return geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +219,7 @@ QgsGeometry QgsOgcUtils::geometryFromGML( const QString &xmlString, const Contex
|
|||||||
|
|
||||||
QgsGeometry QgsOgcUtils::geometryFromGMLPoint( const QDomElement &geometryElement )
|
QgsGeometry QgsOgcUtils::geometryFromGMLPoint( const QDomElement &geometryElement )
|
||||||
{
|
{
|
||||||
QgsPolylineXY pointCoordinate;
|
QgsPolyline pointCoordinate;
|
||||||
|
|
||||||
const QDomNodeList coordList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
const QDomNodeList coordList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
||||||
if ( !coordList.isEmpty() )
|
if ( !coordList.isEmpty() )
|
||||||
@ -238,13 +249,14 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPoint( const QDomElement &geometryElemen
|
|||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsPolylineXY::const_iterator point_it = pointCoordinate.constBegin();
|
const bool hasZ { !std::isnan( pointCoordinate.first().z() ) };
|
||||||
char e = htonl( 1 ) != 1;
|
QgsPolyline::const_iterator point_it = pointCoordinate.constBegin();
|
||||||
double x = point_it->x();
|
const char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
double y = point_it->y();
|
const double x = point_it->x();
|
||||||
const int size = 1 + sizeof( int ) + 2 * sizeof( double );
|
const double y = point_it->y();
|
||||||
|
const int size = 1 + static_cast<int>( sizeof( int ) ) + ( hasZ ? 3 : 2 ) * static_cast<int>( sizeof( double ) );
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::Point;
|
const Qgis::WkbType type { hasZ ? Qgis::WkbType::PointZ : Qgis::WkbType::Point };
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
@ -256,6 +268,13 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPoint( const QDomElement &geometryElemen
|
|||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
|
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
double z = point_it->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
}
|
||||||
|
|
||||||
QgsGeometry g;
|
QgsGeometry g;
|
||||||
g.fromWkb( wkb, size );
|
g.fromWkb( wkb, size );
|
||||||
return g;
|
return g;
|
||||||
@ -263,7 +282,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPoint( const QDomElement &geometryElemen
|
|||||||
|
|
||||||
QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryElement )
|
QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryElement )
|
||||||
{
|
{
|
||||||
QgsPolylineXY lineCoordinates;
|
QgsPolyline lineCoordinates;
|
||||||
|
|
||||||
const QDomNodeList coordList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
const QDomNodeList coordList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
||||||
if ( !coordList.isEmpty() )
|
if ( !coordList.isEmpty() )
|
||||||
@ -288,10 +307,12 @@ QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char e = htonl( 1 ) != 1;
|
const bool hasZ { !std::isnan( lineCoordinates.first().z() ) };
|
||||||
const int size = 1 + 2 * sizeof( int ) + lineCoordinates.size() * 2 * sizeof( double );
|
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::LineString;
|
char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
|
const int size = 1 + 2 * static_cast<int>( sizeof( int ) + lineCoordinates.size() ) * ( hasZ ? 3 : 2 ) * static_cast<int>( sizeof( double ) );
|
||||||
|
|
||||||
|
const Qgis::WkbType type{ hasZ ? Qgis::WkbType::LineStringZ : Qgis::WkbType::LineString };
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
@ -306,7 +327,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryE
|
|||||||
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
|
|
||||||
QgsPolylineXY::const_iterator iter;
|
QgsPolyline::const_iterator iter;
|
||||||
for ( iter = lineCoordinates.constBegin(); iter != lineCoordinates.constEnd(); ++iter )
|
for ( iter = lineCoordinates.constBegin(); iter != lineCoordinates.constEnd(); ++iter )
|
||||||
{
|
{
|
||||||
x = iter->x();
|
x = iter->x();
|
||||||
@ -315,6 +336,14 @@ QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryE
|
|||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
|
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
double z = iter->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsGeometry g;
|
QgsGeometry g;
|
||||||
@ -325,10 +354,10 @@ QgsGeometry QgsOgcUtils::geometryFromGMLLineString( const QDomElement &geometryE
|
|||||||
QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElement )
|
QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElement )
|
||||||
{
|
{
|
||||||
//read all the coordinates (as QgsPoint) into memory. Each linear ring has an entry in the vector
|
//read all the coordinates (as QgsPoint) into memory. Each linear ring has an entry in the vector
|
||||||
QgsMultiPolylineXY ringCoordinates;
|
QgsMultiPolyline ringCoordinates;
|
||||||
|
|
||||||
//read coordinates for outer boundary
|
//read coordinates for outer boundary
|
||||||
QgsPolylineXY exteriorPointList;
|
QgsPolyline exteriorPointList;
|
||||||
const QDomNodeList outerBoundaryList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "outerBoundaryIs" ) );
|
const QDomNodeList outerBoundaryList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "outerBoundaryIs" ) );
|
||||||
if ( !outerBoundaryList.isEmpty() ) //outer ring is necessary
|
if ( !outerBoundaryList.isEmpty() ) //outer ring is necessary
|
||||||
{
|
{
|
||||||
@ -347,7 +376,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
const QDomNodeList innerBoundaryList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "innerBoundaryIs" ) );
|
const QDomNodeList innerBoundaryList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "innerBoundaryIs" ) );
|
||||||
for ( int i = 0; i < innerBoundaryList.size(); ++i )
|
for ( int i = 0; i < innerBoundaryList.size(); ++i )
|
||||||
{
|
{
|
||||||
QgsPolylineXY interiorPointList;
|
QgsPolyline interiorPointList;
|
||||||
coordinatesElement = innerBoundaryList.at( i ).firstChild().firstChild().toElement();
|
coordinatesElement = innerBoundaryList.at( i ).firstChild().firstChild().toElement();
|
||||||
if ( coordinatesElement.isNull() )
|
if ( coordinatesElement.isNull() )
|
||||||
{
|
{
|
||||||
@ -383,7 +412,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
const QDomNodeList interiorList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "interior" ) );
|
const QDomNodeList interiorList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "interior" ) );
|
||||||
for ( int i = 0; i < interiorList.size(); ++i )
|
for ( int i = 0; i < interiorList.size(); ++i )
|
||||||
{
|
{
|
||||||
QgsPolylineXY interiorPointList;
|
QgsPolyline interiorPointList;
|
||||||
const QDomElement posElement = interiorList.at( i ).firstChild().firstChild().toElement();
|
const QDomElement posElement = interiorList.at( i ).firstChild().firstChild().toElement();
|
||||||
if ( posElement.isNull() )
|
if ( posElement.isNull() )
|
||||||
{
|
{
|
||||||
@ -404,20 +433,23 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
|
|
||||||
int npoints = 0;//total number of points
|
int npoints = 0;//total number of points
|
||||||
for ( QgsMultiPolylineXY::const_iterator it = ringCoordinates.constBegin(); it != ringCoordinates.constEnd(); ++it )
|
for ( QgsMultiPolyline::const_iterator it = ringCoordinates.constBegin(); it != ringCoordinates.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
npoints += it->size();
|
npoints += it->size();
|
||||||
}
|
}
|
||||||
const int size = 1 + 2 * sizeof( int ) + nrings * sizeof( int ) + 2 * npoints * sizeof( double );
|
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::Polygon;
|
const bool hasZ { !std::isnan( ringCoordinates.first().first().z() ) };
|
||||||
|
|
||||||
|
const int size = 1 + 2 * static_cast<int>( sizeof( int ) ) + nrings * static_cast<int>( sizeof( int ) ) + ( hasZ ? 3 : 2 ) * npoints * static_cast<int>( sizeof( double ) );
|
||||||
|
|
||||||
|
const Qgis::WkbType type { hasZ ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon };
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
//char e = QgsApplication::endian();
|
//char e = QgsApplication::endian();
|
||||||
char e = htonl( 1 ) != 1;
|
char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
int nPointsInRing = 0;
|
int nPointsInRing = 0;
|
||||||
double x, y;
|
double x, y, z;
|
||||||
|
|
||||||
//fill the contents into *wkb
|
//fill the contents into *wkb
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
@ -426,13 +458,13 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
memcpy( &( wkb )[wkbPosition], &nrings, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nrings, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
for ( QgsMultiPolylineXY::const_iterator it = ringCoordinates.constBegin(); it != ringCoordinates.constEnd(); ++it )
|
for ( QgsMultiPolyline::const_iterator it = ringCoordinates.constBegin(); it != ringCoordinates.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
nPointsInRing = it->size();
|
nPointsInRing = it->size();
|
||||||
memcpy( &( wkb )[wkbPosition], &nPointsInRing, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPointsInRing, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
//iterate through the string list converting the strings to x-/y- doubles
|
//iterate through the string list converting the strings to x-/y- doubles
|
||||||
QgsPolylineXY::const_iterator iter;
|
QgsPolyline::const_iterator iter;
|
||||||
for ( iter = it->begin(); iter != it->end(); ++iter )
|
for ( iter = it->begin(); iter != it->end(); ++iter )
|
||||||
{
|
{
|
||||||
x = iter->x();
|
x = iter->x();
|
||||||
@ -442,6 +474,13 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
|
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
z = iter->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -452,8 +491,8 @@ QgsGeometry QgsOgcUtils::geometryFromGMLPolygon( const QDomElement &geometryElem
|
|||||||
|
|
||||||
QgsGeometry QgsOgcUtils::geometryFromGMLMultiPoint( const QDomElement &geometryElement )
|
QgsGeometry QgsOgcUtils::geometryFromGMLMultiPoint( const QDomElement &geometryElement )
|
||||||
{
|
{
|
||||||
QgsPolylineXY pointList;
|
QgsPolyline pointList;
|
||||||
QgsPolylineXY currentPoint;
|
QgsPolyline currentPoint;
|
||||||
const QDomNodeList pointMemberList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "pointMember" ) );
|
const QDomNodeList pointMemberList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "pointMember" ) );
|
||||||
if ( pointMemberList.size() < 1 )
|
if ( pointMemberList.size() < 1 )
|
||||||
{
|
{
|
||||||
@ -512,28 +551,30 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPoint( const QDomElement &geometryE
|
|||||||
if ( nPoints < 1 )
|
if ( nPoints < 1 )
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
|
|
||||||
//calculate the required wkb size
|
const bool hasZ { !std::isnan( pointList.first().z() ) };
|
||||||
const int size = 1 + 2 * sizeof( int ) + pointList.size() * ( 2 * sizeof( double ) + 1 + sizeof( int ) );
|
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::MultiPoint;
|
//calculate the required wkb size
|
||||||
|
const int size = 1 + 2 * static_cast<int>( sizeof( int ) ) + static_cast<int>( pointList.size() ) * ( ( hasZ ? 3 : 2 ) * static_cast<int>( sizeof( double ) ) + 1 + static_cast<int>( sizeof( int ) ) );
|
||||||
|
|
||||||
|
const Qgis::WkbType type { hasZ ? Qgis::WkbType::MultiPointZ : Qgis::WkbType::MultiPoint };
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
//fill the wkb content
|
//fill the wkb content
|
||||||
char e = htonl( 1 ) != 1;
|
char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
double x, y;
|
double x, y, z;
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
wkbPosition += 1;
|
wkbPosition += 1;
|
||||||
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
type = Qgis::WkbType::Point;
|
const Qgis::WkbType pointType { hasZ ? Qgis::WkbType::PointZ : Qgis::WkbType::Point };
|
||||||
for ( QgsPolylineXY::const_iterator it = pointList.constBegin(); it != pointList.constEnd(); ++it )
|
for ( QgsPolyline::const_iterator it = pointList.constBegin(); it != pointList.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
wkbPosition += 1;
|
wkbPosition += 1;
|
||||||
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &pointType, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
x = it->x();
|
x = it->x();
|
||||||
memcpy( &( wkb )[wkbPosition], &x, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &x, sizeof( double ) );
|
||||||
@ -541,6 +582,13 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPoint( const QDomElement &geometryE
|
|||||||
y = it->y();
|
y = it->y();
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
|
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
z = it->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsGeometry g;
|
QgsGeometry g;
|
||||||
@ -559,7 +607,8 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
//<gml:MultiLineString
|
//<gml:MultiLineString
|
||||||
//<gml:LineString
|
//<gml:LineString
|
||||||
|
|
||||||
QList< QgsPolylineXY > lineCoordinates; //first list: lines, second list: points of one line
|
|
||||||
|
QList< QgsPolyline > lineCoordinates; //first list: lines, second list: points of one line
|
||||||
QDomElement currentLineStringElement;
|
QDomElement currentLineStringElement;
|
||||||
QDomNodeList currentCoordList;
|
QDomNodeList currentCoordList;
|
||||||
QDomNodeList currentPosList;
|
QDomNodeList currentPosList;
|
||||||
@ -578,7 +627,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
currentCoordList = currentLineStringElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
currentCoordList = currentLineStringElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
||||||
if ( !currentCoordList.isEmpty() )
|
if ( !currentCoordList.isEmpty() )
|
||||||
{
|
{
|
||||||
QgsPolylineXY currentPointList;
|
QgsPolyline currentPointList;
|
||||||
if ( readGMLCoordinates( currentPointList, currentCoordList.at( 0 ).toElement() ) != 0 )
|
if ( readGMLCoordinates( currentPointList, currentCoordList.at( 0 ).toElement() ) != 0 )
|
||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
@ -592,7 +641,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
}
|
}
|
||||||
QgsPolylineXY currentPointList;
|
QgsPolyline currentPointList;
|
||||||
if ( readGMLPositions( currentPointList, currentPosList.at( 0 ).toElement() ) != 0 )
|
if ( readGMLPositions( currentPointList, currentPosList.at( 0 ).toElement() ) != 0 )
|
||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
@ -612,7 +661,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
currentCoordList = currentLineStringElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
currentCoordList = currentLineStringElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "coordinates" ) );
|
||||||
if ( !currentCoordList.isEmpty() )
|
if ( !currentCoordList.isEmpty() )
|
||||||
{
|
{
|
||||||
QgsPolylineXY currentPointList;
|
QgsPolyline currentPointList;
|
||||||
if ( readGMLCoordinates( currentPointList, currentCoordList.at( 0 ).toElement() ) != 0 )
|
if ( readGMLCoordinates( currentPointList, currentCoordList.at( 0 ).toElement() ) != 0 )
|
||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
@ -627,7 +676,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
}
|
}
|
||||||
QgsPolylineXY currentPointList;
|
QgsPolyline currentPointList;
|
||||||
if ( readGMLPositions( currentPointList, currentPosList.at( 0 ).toElement() ) != 0 )
|
if ( readGMLPositions( currentPointList, currentPosList.at( 0 ).toElement() ) != 0 )
|
||||||
{
|
{
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
@ -646,38 +695,41 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
if ( nLines < 1 )
|
if ( nLines < 1 )
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
|
|
||||||
|
const bool hasZ { !std::isnan( lineCoordinates.first().first().z() ) };
|
||||||
|
const int coordSize { hasZ ? 3 : 2 };
|
||||||
|
|
||||||
//calculate the required wkb size
|
//calculate the required wkb size
|
||||||
int size = ( lineCoordinates.size() + 1 ) * ( 1 + 2 * sizeof( int ) );
|
int size = static_cast<int>( lineCoordinates.size() + 1 ) * ( 1 + 2 * sizeof( int ) );
|
||||||
for ( QList< QgsPolylineXY >::const_iterator it = lineCoordinates.constBegin(); it != lineCoordinates.constEnd(); ++it )
|
for ( QList< QgsPolyline >::const_iterator it = lineCoordinates.constBegin(); it != lineCoordinates.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
size += it->size() * 2 * sizeof( double );
|
size += it->size() * coordSize * sizeof( double );
|
||||||
}
|
}
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::MultiLineString;
|
const Qgis::WkbType type { hasZ ? Qgis::WkbType::MultiLineStringZ : Qgis::WkbType::MultiLineString };
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
//fill the wkb content
|
//fill the wkb content
|
||||||
char e = htonl( 1 ) != 1;
|
char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
int nPoints; //number of points in a line
|
int nPoints; //number of points in a line
|
||||||
double x, y;
|
double x, y, z;
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
wkbPosition += 1;
|
wkbPosition += 1;
|
||||||
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
memcpy( &( wkb )[wkbPosition], &nLines, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nLines, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
type = Qgis::WkbType::LineString;
|
const Qgis::WkbType lineType { hasZ ? Qgis::WkbType::LineStringZ : Qgis::WkbType::LineString };
|
||||||
for ( QList< QgsPolylineXY >::const_iterator it = lineCoordinates.constBegin(); it != lineCoordinates.constEnd(); ++it )
|
for ( QList< QgsPolyline >::const_iterator it = lineCoordinates.constBegin(); it != lineCoordinates.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
wkbPosition += 1;
|
wkbPosition += 1;
|
||||||
memcpy( &( wkb )[wkbPosition], &type, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &lineType, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
nPoints = it->size();
|
nPoints = it->size();
|
||||||
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPoints, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
for ( QgsPolylineXY::const_iterator iter = it->begin(); iter != it->end(); ++iter )
|
for ( QgsPolyline::const_iterator iter = it->begin(); iter != it->end(); ++iter )
|
||||||
{
|
{
|
||||||
x = iter->x();
|
x = iter->x();
|
||||||
y = iter->y();
|
y = iter->y();
|
||||||
@ -686,6 +738,13 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
|
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
z = iter->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -697,21 +756,19 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiLineString( const QDomElement &geom
|
|||||||
QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometryElement )
|
QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometryElement )
|
||||||
{
|
{
|
||||||
//first list: different polygons, second list: different rings, third list: different points
|
//first list: different polygons, second list: different rings, third list: different points
|
||||||
QgsMultiPolygonXY multiPolygonPoints;
|
QVector<QgsMultiPolyline> multiPolygonPoints;
|
||||||
QDomElement currentPolygonMemberElement;
|
QDomElement currentPolygonMemberElement;
|
||||||
QDomNodeList polygonList;
|
QDomNodeList polygonList;
|
||||||
QDomElement currentPolygonElement;
|
QDomElement currentPolygonElement;
|
||||||
// rings in GML2
|
// rings in GML2
|
||||||
QDomNodeList outerBoundaryList;
|
QDomNodeList outerBoundaryList;
|
||||||
QDomElement currentOuterBoundaryElement;
|
QDomElement currentOuterBoundaryElement;
|
||||||
const QDomNodeList innerBoundaryList;
|
|
||||||
QDomElement currentInnerBoundaryElement;
|
QDomElement currentInnerBoundaryElement;
|
||||||
// rings in GML3
|
// rings in GML3
|
||||||
QDomNodeList exteriorList;
|
QDomNodeList exteriorList;
|
||||||
QDomElement currentExteriorElement;
|
QDomElement currentExteriorElement;
|
||||||
QDomElement currentInteriorElement;
|
QDomElement currentInteriorElement;
|
||||||
const QDomNodeList interiorList;
|
// linear ring
|
||||||
// lienar ring
|
|
||||||
QDomNodeList linearRingNodeList;
|
QDomNodeList linearRingNodeList;
|
||||||
QDomElement currentLinearRingElement;
|
QDomElement currentLinearRingElement;
|
||||||
// Coordinates or position list
|
// Coordinates or position list
|
||||||
@ -719,7 +776,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
QDomNodeList currentPosList;
|
QDomNodeList currentPosList;
|
||||||
|
|
||||||
const QDomNodeList polygonMemberList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "polygonMember" ) );
|
const QDomNodeList polygonMemberList = geometryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "polygonMember" ) );
|
||||||
QgsPolygonXY currentPolygonList;
|
QgsMultiPolyline currentPolygonList;
|
||||||
for ( int i = 0; i < polygonMemberList.size(); ++i )
|
for ( int i = 0; i < polygonMemberList.size(); ++i )
|
||||||
{
|
{
|
||||||
currentPolygonList.resize( 0 ); // preserve capacity - don't use clear
|
currentPolygonList.resize( 0 ); // preserve capacity - don't use clear
|
||||||
@ -736,7 +793,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
if ( !outerBoundaryList.isEmpty() )
|
if ( !outerBoundaryList.isEmpty() )
|
||||||
{
|
{
|
||||||
currentOuterBoundaryElement = outerBoundaryList.at( 0 ).toElement();
|
currentOuterBoundaryElement = outerBoundaryList.at( 0 ).toElement();
|
||||||
QgsPolylineXY ringCoordinates;
|
QgsPolyline ringCoordinates;
|
||||||
|
|
||||||
linearRingNodeList = currentOuterBoundaryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
linearRingNodeList = currentOuterBoundaryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
||||||
if ( linearRingNodeList.size() < 1 )
|
if ( linearRingNodeList.size() < 1 )
|
||||||
@ -759,7 +816,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
const QDomNodeList innerBoundaryList = currentPolygonElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "innerBoundaryIs" ) );
|
const QDomNodeList innerBoundaryList = currentPolygonElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "innerBoundaryIs" ) );
|
||||||
for ( int j = 0; j < innerBoundaryList.size(); ++j )
|
for ( int j = 0; j < innerBoundaryList.size(); ++j )
|
||||||
{
|
{
|
||||||
QgsPolylineXY ringCoordinates;
|
QgsPolyline ringCoordinates;
|
||||||
currentInnerBoundaryElement = innerBoundaryList.at( j ).toElement();
|
currentInnerBoundaryElement = innerBoundaryList.at( j ).toElement();
|
||||||
linearRingNodeList = currentInnerBoundaryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
linearRingNodeList = currentInnerBoundaryElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
||||||
if ( linearRingNodeList.size() < 1 )
|
if ( linearRingNodeList.size() < 1 )
|
||||||
@ -789,7 +846,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentExteriorElement = exteriorList.at( 0 ).toElement();
|
currentExteriorElement = exteriorList.at( 0 ).toElement();
|
||||||
QgsPolylineXY ringPositions;
|
QgsPolyline ringPositions;
|
||||||
|
|
||||||
linearRingNodeList = currentExteriorElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
linearRingNodeList = currentExteriorElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
||||||
if ( linearRingNodeList.size() < 1 )
|
if ( linearRingNodeList.size() < 1 )
|
||||||
@ -812,7 +869,7 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
const QDomNodeList interiorList = currentPolygonElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "interior" ) );
|
const QDomNodeList interiorList = currentPolygonElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "interior" ) );
|
||||||
for ( int j = 0; j < interiorList.size(); ++j )
|
for ( int j = 0; j < interiorList.size(); ++j )
|
||||||
{
|
{
|
||||||
QgsPolylineXY ringPositions;
|
QgsPolyline ringPositions;
|
||||||
currentInteriorElement = interiorList.at( j ).toElement();
|
currentInteriorElement = interiorList.at( j ).toElement();
|
||||||
linearRingNodeList = currentInteriorElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
linearRingNodeList = currentInteriorElement.elementsByTagNameNS( GML_NAMESPACE, QStringLiteral( "LinearRing" ) );
|
||||||
if ( linearRingNodeList.size() < 1 )
|
if ( linearRingNodeList.size() < 1 )
|
||||||
@ -839,21 +896,24 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
if ( nPolygons < 1 )
|
if ( nPolygons < 1 )
|
||||||
return QgsGeometry();
|
return QgsGeometry();
|
||||||
|
|
||||||
|
const bool hasZ { !std::isnan( multiPolygonPoints.first().first().first().z() ) };
|
||||||
|
|
||||||
int size = 1 + 2 * sizeof( int );
|
int size = 1 + 2 * sizeof( int );
|
||||||
//calculate the wkb size
|
//calculate the wkb size
|
||||||
for ( QgsMultiPolygonXY::const_iterator it = multiPolygonPoints.constBegin(); it != multiPolygonPoints.constEnd(); ++it )
|
|
||||||
|
for ( auto it = multiPolygonPoints.constBegin(); it != multiPolygonPoints.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
size += 1 + 2 * sizeof( int );
|
size += 1 + 2 * sizeof( int );
|
||||||
for ( QgsPolygonXY::const_iterator iter = it->begin(); iter != it->end(); ++iter )
|
for ( auto iter = it->begin(); iter != it->end(); ++iter )
|
||||||
{
|
{
|
||||||
size += sizeof( int ) + 2 * iter->size() * sizeof( double );
|
size += static_cast<int>( sizeof( int ) ) + ( hasZ ? 3 : 2 ) * static_cast<int>( iter->size() * sizeof( double ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Qgis::WkbType type = Qgis::WkbType::MultiPolygon;
|
Qgis::WkbType type = hasZ ? Qgis::WkbType::MultiPolygonZ : Qgis::WkbType::MultiPolygon;
|
||||||
unsigned char *wkb = new unsigned char[size];
|
unsigned char *wkb = new unsigned char[size];
|
||||||
|
|
||||||
char e = htonl( 1 ) != 1;
|
char e = static_cast<char>( htonl( 1 ) != 1 );
|
||||||
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
int wkbPosition = 0; //current offset from wkb beginning (in bytes)
|
||||||
double x, y;
|
double x, y;
|
||||||
int nRings;
|
int nRings;
|
||||||
@ -867,9 +927,9 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
memcpy( &( wkb )[wkbPosition], &nPolygons, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPolygons, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
|
|
||||||
type = Qgis::WkbType::Polygon;
|
type = hasZ ? Qgis::WkbType::PolygonZ : Qgis::WkbType::Polygon;
|
||||||
|
|
||||||
for ( QgsMultiPolygonXY::const_iterator it = multiPolygonPoints.constBegin(); it != multiPolygonPoints.constEnd(); ++it )
|
for ( auto it = multiPolygonPoints.constBegin(); it != multiPolygonPoints.constEnd(); ++it )
|
||||||
{
|
{
|
||||||
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
memcpy( &( wkb )[wkbPosition], &e, 1 );
|
||||||
wkbPosition += 1;
|
wkbPosition += 1;
|
||||||
@ -878,12 +938,12 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
nRings = it->size();
|
nRings = it->size();
|
||||||
memcpy( &( wkb )[wkbPosition], &nRings, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nRings, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
for ( QgsPolygonXY::const_iterator iter = it->begin(); iter != it->end(); ++iter )
|
for ( auto iter = it->begin(); iter != it->end(); ++iter )
|
||||||
{
|
{
|
||||||
nPointsInRing = iter->size();
|
nPointsInRing = iter->size();
|
||||||
memcpy( &( wkb )[wkbPosition], &nPointsInRing, sizeof( int ) );
|
memcpy( &( wkb )[wkbPosition], &nPointsInRing, sizeof( int ) );
|
||||||
wkbPosition += sizeof( int );
|
wkbPosition += sizeof( int );
|
||||||
for ( QgsPolylineXY::const_iterator iterator = iter->begin(); iterator != iter->end(); ++iterator )
|
for ( auto iterator = iter->begin(); iterator != iter->end(); ++iterator )
|
||||||
{
|
{
|
||||||
x = iterator->x();
|
x = iterator->x();
|
||||||
y = iterator->y();
|
y = iterator->y();
|
||||||
@ -891,6 +951,12 @@ QgsGeometry QgsOgcUtils::geometryFromGMLMultiPolygon( const QDomElement &geometr
|
|||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
memcpy( &( wkb )[wkbPosition], &y, sizeof( double ) );
|
||||||
wkbPosition += sizeof( double );
|
wkbPosition += sizeof( double );
|
||||||
|
if ( hasZ )
|
||||||
|
{
|
||||||
|
double z = iterator->z();
|
||||||
|
memcpy( &( wkb )[wkbPosition], &z, sizeof( double ) );
|
||||||
|
wkbPosition += sizeof( double );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -920,7 +986,7 @@ QDomElement QgsOgcUtils::filterElement( QDomDocument &doc, GMLVersion gmlVersion
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool QgsOgcUtils::readGMLCoordinates( QgsPolylineXY &coords, const QDomElement &elem )
|
bool QgsOgcUtils::readGMLCoordinates( QgsPolyline &coords, const QDomElement &elem )
|
||||||
{
|
{
|
||||||
QString coordSeparator = QStringLiteral( "," );
|
QString coordSeparator = QStringLiteral( "," );
|
||||||
QString tupleSeparator = QStringLiteral( " " );
|
QString tupleSeparator = QStringLiteral( " " );
|
||||||
@ -939,7 +1005,7 @@ bool QgsOgcUtils::readGMLCoordinates( QgsPolylineXY &coords, const QDomElement &
|
|||||||
|
|
||||||
const QStringList tupels = elem.text().split( tupleSeparator, Qt::SkipEmptyParts );
|
const QStringList tupels = elem.text().split( tupleSeparator, Qt::SkipEmptyParts );
|
||||||
QStringList tuple_coords;
|
QStringList tuple_coords;
|
||||||
double x, y;
|
double x, y, z;
|
||||||
bool conversionSuccess;
|
bool conversionSuccess;
|
||||||
|
|
||||||
QStringList::const_iterator it;
|
QStringList::const_iterator it;
|
||||||
@ -960,7 +1026,19 @@ bool QgsOgcUtils::readGMLCoordinates( QgsPolylineXY &coords, const QDomElement &
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
coords.push_back( QgsPointXY( x, y ) );
|
if ( tuple_coords.size() > 2 )
|
||||||
|
{
|
||||||
|
z = tuple_coords.at( 2 ).toDouble( &conversionSuccess );
|
||||||
|
if ( !conversionSuccess )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
z = std::numeric_limits<double>::quiet_NaN();
|
||||||
|
}
|
||||||
|
coords.append( QgsPoint( x, y, z ) );
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1001,12 +1079,12 @@ QgsRectangle QgsOgcUtils::rectangleFromGMLBox( const QDomNode &boxNode )
|
|||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QgsOgcUtils::readGMLPositions( QgsPolylineXY &coords, const QDomElement &elem )
|
bool QgsOgcUtils::readGMLPositions( QgsPolyline &coords, const QDomElement &elem )
|
||||||
{
|
{
|
||||||
coords.clear();
|
coords.clear();
|
||||||
|
|
||||||
const QStringList pos = elem.text().split( ' ', Qt::SkipEmptyParts );
|
const QStringList pos = elem.text().split( ' ', Qt::SkipEmptyParts );
|
||||||
double x, y;
|
double x, y, z;
|
||||||
bool conversionSuccess;
|
bool conversionSuccess;
|
||||||
const int posSize = pos.size();
|
const int posSize = pos.size();
|
||||||
|
|
||||||
@ -1040,7 +1118,19 @@ bool QgsOgcUtils::readGMLPositions( QgsPolylineXY &coords, const QDomElement &el
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
coords.push_back( QgsPointXY( x, y ) );
|
if ( srsDimension > 2 )
|
||||||
|
{
|
||||||
|
z = pos.at( i * srsDimension + 2 ).toDouble( &conversionSuccess );
|
||||||
|
if ( !conversionSuccess )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
z = std::numeric_limits<double>::quiet_NaN();
|
||||||
|
}
|
||||||
|
coords.append( QgsPoint( x, y, z ) );
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1250,7 +1340,9 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
{
|
{
|
||||||
case Qgis::WkbType::Point25D:
|
case Qgis::WkbType::Point25D:
|
||||||
case Qgis::WkbType::Point:
|
case Qgis::WkbType::Point:
|
||||||
|
case Qgis::WkbType::PointZ:
|
||||||
case Qgis::WkbType::MultiPoint25D:
|
case Qgis::WkbType::MultiPoint25D:
|
||||||
|
case Qgis::WkbType::MultiPointZ:
|
||||||
case Qgis::WkbType::MultiPoint:
|
case Qgis::WkbType::MultiPoint:
|
||||||
baseCoordElem = doc.createElement( QStringLiteral( "gml:pos" ) );
|
baseCoordElem = doc.createElement( QStringLiteral( "gml:pos" ) );
|
||||||
break;
|
break;
|
||||||
@ -1258,7 +1350,6 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
baseCoordElem = doc.createElement( QStringLiteral( "gml:posList" ) );
|
baseCoordElem = doc.createElement( QStringLiteral( "gml:posList" ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
baseCoordElem.setAttribute( QStringLiteral( "srsDimension" ), QStringLiteral( "2" ) );
|
|
||||||
cs = ' ';
|
cs = ' ';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1273,6 +1364,10 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
switch ( geometry.wkbType() )
|
switch ( geometry.wkbType() )
|
||||||
{
|
{
|
||||||
case Qgis::WkbType::Point25D:
|
case Qgis::WkbType::Point25D:
|
||||||
|
case Qgis::WkbType::PointZ:
|
||||||
|
hasZValue = true;
|
||||||
|
//intentional fall-through
|
||||||
|
[[fallthrough]];
|
||||||
case Qgis::WkbType::Point:
|
case Qgis::WkbType::Point:
|
||||||
{
|
{
|
||||||
QDomElement pointElem = doc.createElement( QStringLiteral( "gml:Point" ) );
|
QDomElement pointElem = doc.createElement( QStringLiteral( "gml:Point" ) );
|
||||||
@ -1288,13 +1383,26 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
wkbPtr >> y >> x;
|
wkbPtr >> y >> x;
|
||||||
else
|
else
|
||||||
wkbPtr >> x >> y;
|
wkbPtr >> x >> y;
|
||||||
const QDomText coordText = doc.createTextNode( qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision ) );
|
|
||||||
|
QString coordString = qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
|
||||||
|
// Add Z
|
||||||
|
if ( hasZValue && gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
|
|
||||||
coordElem.appendChild( coordText );
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
pointElem.appendChild( coordElem );
|
pointElem.appendChild( coordElem );
|
||||||
return pointElem;
|
return pointElem;
|
||||||
}
|
}
|
||||||
case Qgis::WkbType::MultiPoint25D:
|
case Qgis::WkbType::MultiPoint25D:
|
||||||
|
case Qgis::WkbType::MultiPointZ:
|
||||||
hasZValue = true;
|
hasZValue = true;
|
||||||
//intentional fall-through
|
//intentional fall-through
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -1325,21 +1433,38 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
wkbPtr >> y >> x;
|
wkbPtr >> y >> x;
|
||||||
else
|
else
|
||||||
wkbPtr >> x >> y;
|
wkbPtr >> x >> y;
|
||||||
const QDomText coordText = doc.createTextNode( qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision ) );
|
|
||||||
|
|
||||||
coordElem.appendChild( coordText );
|
|
||||||
pointElem.appendChild( coordElem );
|
|
||||||
|
|
||||||
|
QString coordString = qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
// Add Z
|
||||||
if ( hasZValue )
|
if ( hasZValue )
|
||||||
|
{
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wkbPtr += sizeof( double );
|
wkbPtr += sizeof( double );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
|
|
||||||
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
|
pointElem.appendChild( coordElem );
|
||||||
|
|
||||||
|
|
||||||
pointMemberElem.appendChild( pointElem );
|
pointMemberElem.appendChild( pointElem );
|
||||||
multiPointElem.appendChild( pointMemberElem );
|
multiPointElem.appendChild( pointMemberElem );
|
||||||
}
|
}
|
||||||
return multiPointElem;
|
return multiPointElem;
|
||||||
}
|
}
|
||||||
case Qgis::WkbType::LineString25D:
|
case Qgis::WkbType::LineString25D:
|
||||||
|
case Qgis::WkbType::LineStringZ:
|
||||||
hasZValue = true;
|
hasZValue = true;
|
||||||
//intentional fall-through
|
//intentional fall-through
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -1373,16 +1498,29 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
|
||||||
if ( hasZValue )
|
if ( hasZValue )
|
||||||
|
{
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wkbPtr += sizeof( double );
|
wkbPtr += sizeof( double );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
const QDomText coordText = doc.createTextNode( coordString );
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
coordElem.appendChild( coordText );
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
lineStringElem.appendChild( coordElem );
|
lineStringElem.appendChild( coordElem );
|
||||||
return lineStringElem;
|
return lineStringElem;
|
||||||
}
|
}
|
||||||
case Qgis::WkbType::MultiLineString25D:
|
case Qgis::WkbType::MultiLineString25D:
|
||||||
|
case Qgis::WkbType::MultiLineStringZ:
|
||||||
hasZValue = true;
|
hasZValue = true;
|
||||||
//intentional fall-through
|
//intentional fall-through
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -1428,12 +1566,23 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
|
||||||
if ( hasZValue )
|
if ( hasZValue )
|
||||||
|
{
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wkbPtr += sizeof( double );
|
wkbPtr += sizeof( double );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const QDomText coordText = doc.createTextNode( coordString );
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
coordElem.appendChild( coordText );
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
lineStringElem.appendChild( coordElem );
|
lineStringElem.appendChild( coordElem );
|
||||||
lineStringMemberElem.appendChild( lineStringElem );
|
lineStringMemberElem.appendChild( lineStringElem );
|
||||||
multiLineStringElem.appendChild( lineStringMemberElem );
|
multiLineStringElem.appendChild( lineStringMemberElem );
|
||||||
@ -1441,6 +1590,7 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
return multiLineStringElem;
|
return multiLineStringElem;
|
||||||
}
|
}
|
||||||
case Qgis::WkbType::Polygon25D:
|
case Qgis::WkbType::Polygon25D:
|
||||||
|
case Qgis::WkbType::PolygonZ:
|
||||||
hasZValue = true;
|
hasZValue = true;
|
||||||
//intentional fall-through
|
//intentional fall-through
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -1489,20 +1639,35 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
wkbPtr >> x >> y;
|
wkbPtr >> x >> y;
|
||||||
|
|
||||||
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
|
||||||
if ( hasZValue )
|
if ( hasZValue )
|
||||||
|
{
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
// Add Z
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wkbPtr += sizeof( double );
|
wkbPtr += sizeof( double );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const QDomText coordText = doc.createTextNode( coordString );
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
coordElem.appendChild( coordText );
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
ringElem.appendChild( coordElem );
|
ringElem.appendChild( coordElem );
|
||||||
boundaryElem.appendChild( ringElem );
|
boundaryElem.appendChild( ringElem );
|
||||||
polygonElem.appendChild( boundaryElem );
|
polygonElem.appendChild( boundaryElem );
|
||||||
}
|
}
|
||||||
|
|
||||||
return polygonElem;
|
return polygonElem;
|
||||||
}
|
}
|
||||||
case Qgis::WkbType::MultiPolygon25D:
|
case Qgis::WkbType::MultiPolygon25D:
|
||||||
|
case Qgis::WkbType::MultiPolygonZ:
|
||||||
hasZValue = true;
|
hasZValue = true;
|
||||||
//intentional fall-through
|
//intentional fall-through
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -1561,12 +1726,25 @@ QDomElement QgsOgcUtils::geometryToGML( const QgsGeometry &geometry,
|
|||||||
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
coordString += qgsDoubleToString( x, precision ) + cs + qgsDoubleToString( y, precision );
|
||||||
|
|
||||||
if ( hasZValue )
|
if ( hasZValue )
|
||||||
|
{
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
{
|
||||||
|
// Add Z
|
||||||
|
double z = 0;
|
||||||
|
wkbPtr >> z;
|
||||||
|
coordString += cs + qgsDoubleToString( z, precision );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
wkbPtr += sizeof( double );
|
wkbPtr += sizeof( double );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
const QDomText coordText = doc.createTextNode( coordString );
|
const QDomText coordText = doc.createTextNode( coordString );
|
||||||
coordElem.appendChild( coordText );
|
coordElem.appendChild( coordText );
|
||||||
|
if ( gmlVersion != GML_2_1_2 )
|
||||||
|
coordElem.setAttribute( QStringLiteral( "srsDimension" ), hasZValue ? QStringLiteral( "3" ) : QStringLiteral( "2" ) );
|
||||||
ringElem.appendChild( coordElem );
|
ringElem.appendChild( coordElem );
|
||||||
boundaryElem.appendChild( ringElem );
|
boundaryElem.appendChild( ringElem );
|
||||||
polygonElem.appendChild( boundaryElem );
|
polygonElem.appendChild( boundaryElem );
|
||||||
@ -3823,3 +4001,17 @@ QgsOgcCrsUtils::CRSFlavor QgsOgcCrsUtils::parseCrsName( const QString &crsName,
|
|||||||
|
|
||||||
return CRSFlavor::UNKNOWN;
|
return CRSFlavor::UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsGeometry QgsOgcUtils::geometryFromGMLUsingGdal( const QDomElement &geometryElement )
|
||||||
|
{
|
||||||
|
QString gml;
|
||||||
|
QTextStream gmlStream( &gml );
|
||||||
|
geometryElement.save( gmlStream, 0 );
|
||||||
|
gdal::ogr_geometry_unique_ptr ogrGeom { OGR_G_CreateFromGML( gml.toUtf8().constData() ) };
|
||||||
|
return QgsOgrUtils::ogrGeometryToQgsGeometry( ogrGeom.get() );
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsGeometry QgsOgcUtils::geometryFromGMLMultiCurve( const QDomElement &geometryElement )
|
||||||
|
{
|
||||||
|
return geometryFromGMLUsingGdal( geometryElement );
|
||||||
|
}
|
||||||
|
@ -311,8 +311,12 @@ class CORE_EXPORT QgsOgcUtils
|
|||||||
static QgsGeometry geometryFromGMLMultiPoint( const QDomElement &geometryElement );
|
static QgsGeometry geometryFromGMLMultiPoint( const QDomElement &geometryElement );
|
||||||
//! Static method that creates geometry from GML MultiLineString
|
//! Static method that creates geometry from GML MultiLineString
|
||||||
static QgsGeometry geometryFromGMLMultiLineString( const QDomElement &geometryElement );
|
static QgsGeometry geometryFromGMLMultiLineString( const QDomElement &geometryElement );
|
||||||
|
//! Static method that creates geometry from GML MultiCurve
|
||||||
|
static QgsGeometry geometryFromGMLMultiCurve( const QDomElement &geometryElement );
|
||||||
//! Static method that creates geometry from GML MultiPolygon
|
//! Static method that creates geometry from GML MultiPolygon
|
||||||
static QgsGeometry geometryFromGMLMultiPolygon( const QDomElement &geometryElement );
|
static QgsGeometry geometryFromGMLMultiPolygon( const QDomElement &geometryElement );
|
||||||
|
//! Static method that creates geometry from GML using GDAL GML parser
|
||||||
|
static QgsGeometry geometryFromGMLUsingGdal( const QDomElement &geometryElement );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an empty \verbatim <Filter> \endverbatim QDomElement
|
* Creates an empty \verbatim <Filter> \endverbatim QDomElement
|
||||||
@ -330,7 +334,7 @@ class CORE_EXPORT QgsOgcUtils
|
|||||||
* \param elem the \verbatim <gml:coordinates> \endverbatim element
|
* \param elem the \verbatim <gml:coordinates> \endverbatim element
|
||||||
* \returns boolean FALSE on success
|
* \returns boolean FALSE on success
|
||||||
*/
|
*/
|
||||||
static bool readGMLCoordinates( QgsPolylineXY &coords, const QDomElement &elem );
|
static bool readGMLCoordinates( QgsPolyline &coords, const QDomElement &elem );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the \verbatim <gml:pos> \endverbatim or \verbatim <gml:posList> \endverbatim
|
* Reads the \verbatim <gml:pos> \endverbatim or \verbatim <gml:posList> \endverbatim
|
||||||
@ -340,8 +344,7 @@ class CORE_EXPORT QgsOgcUtils
|
|||||||
* \verbatim <gml:posList> \endverbatim element
|
* \verbatim <gml:posList> \endverbatim element
|
||||||
* \returns boolean FALSE on success
|
* \returns boolean FALSE on success
|
||||||
*/
|
*/
|
||||||
static bool readGMLPositions( QgsPolylineXY &coords, const QDomElement &elem );
|
static bool readGMLPositions( QgsPolyline &coords, const QDomElement &elem );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a GML coordinates element from a point list.
|
* Create a GML coordinates element from a point list.
|
||||||
@ -379,6 +382,8 @@ class CORE_EXPORT QgsOgcUtils
|
|||||||
static QgsExpressionNodeBinaryOperator *nodePropertyIsNullFromOgcFilter( QDomElement &element, QString &errorMessage );
|
static QgsExpressionNodeBinaryOperator *nodePropertyIsNullFromOgcFilter( QDomElement &element, QString &errorMessage );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SIP_RUN
|
#ifndef SIP_RUN
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -579,7 +579,7 @@ bool QgsTracer::initGraph()
|
|||||||
|
|
||||||
mpl = noded.asMultiPolyline();
|
mpl = noded.asMultiPolyline();
|
||||||
}
|
}
|
||||||
catch ( GEOSException &e )
|
catch ( QgsGeosException &e )
|
||||||
{
|
{
|
||||||
// no big deal... we will just not have nicely noded linework, potentially
|
// no big deal... we will just not have nicely noded linework, potentially
|
||||||
// missing some intersections
|
// missing some intersections
|
||||||
|
@ -199,7 +199,7 @@ class CORE_EXPORT QgsTracer : public QObject
|
|||||||
//! Extent for graph building (empty extent means no limit)
|
//! Extent for graph building (empty extent means no limit)
|
||||||
QgsRectangle mExtent;
|
QgsRectangle mExtent;
|
||||||
//! If FALSE, no vertices will be added on intersections unless they exist in the original layers
|
//! If FALSE, no vertices will be added on intersections unless they exist in the original layers
|
||||||
bool mAddPointsOnIntersections = false;
|
bool mAddPointsOnIntersections = true;
|
||||||
//! Holds the input layers' intersections. Only populated when mAddPointsOnIntersections == false
|
//! Holds the input layers' intersections. Only populated when mAddPointsOnIntersections == false
|
||||||
QgsGeometry mIntersections;
|
QgsGeometry mIntersections;
|
||||||
|
|
||||||
|
@ -2162,6 +2162,33 @@ class QgsVectorFileWriterMetadataContainer
|
|||||||
QString() // Default value
|
QString() // Default value
|
||||||
) );
|
) );
|
||||||
|
|
||||||
|
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,11,0)
|
||||||
|
datasetOptions.insert( QStringLiteral( "INSUNITS" ), new QgsVectorFileWriter::SetOption(
|
||||||
|
QObject::tr( "Drawing units for the model space ($INSUNITS system variable)." ),
|
||||||
|
QStringList()
|
||||||
|
<< QStringLiteral( "AUTO" )
|
||||||
|
<< QStringLiteral( "HEADER_VALUE" )
|
||||||
|
<< QStringLiteral( "UNITLESS" )
|
||||||
|
<< QStringLiteral( "INCHES" )
|
||||||
|
<< QStringLiteral( "FEET" )
|
||||||
|
<< QStringLiteral( "MILLIMETERS" )
|
||||||
|
<< QStringLiteral( "CENTIMETERS" )
|
||||||
|
<< QStringLiteral( "METERS" )
|
||||||
|
<< QStringLiteral( "US_SURVEY_FEET" ),
|
||||||
|
QStringLiteral( "AUTO" ) // Default value
|
||||||
|
) );
|
||||||
|
|
||||||
|
datasetOptions.insert( QStringLiteral( "MEASUREMENT" ), new QgsVectorFileWriter::SetOption(
|
||||||
|
QObject::tr( "Whether the current drawing uses imperial or metric hatch "
|
||||||
|
"pattern and linetype ($MEASUREMENT system variable)." ),
|
||||||
|
QStringList()
|
||||||
|
<< QStringLiteral( "HEADER_VALUE" )
|
||||||
|
<< QStringLiteral( "IMPERIAL" )
|
||||||
|
<< QStringLiteral( "METRIC" ),
|
||||||
|
QStringLiteral( "HEADER_VALUE" ) // Default value
|
||||||
|
) );
|
||||||
|
#endif
|
||||||
|
|
||||||
driverMetadata.insert( QStringLiteral( "DXF" ),
|
driverMetadata.insert( QStringLiteral( "DXF" ),
|
||||||
QgsVectorFileWriter::MetaData(
|
QgsVectorFileWriter::MetaData(
|
||||||
QStringLiteral( "AutoCAD DXF" ),
|
QStringLiteral( "AutoCAD DXF" ),
|
||||||
|
@ -113,10 +113,9 @@ QgsRasterBlock *QgsHueSaturationFilter::block( int bandNo, QgsRectangle const &
|
|||||||
Q_UNUSED( bandNo )
|
Q_UNUSED( bandNo )
|
||||||
QgsDebugMsgLevel( QStringLiteral( "width = %1 height = %2 extent = %3" ).arg( width ).arg( height ).arg( extent.toString() ), 4 );
|
QgsDebugMsgLevel( QStringLiteral( "width = %1 height = %2 extent = %3" ).arg( width ).arg( height ).arg( extent.toString() ), 4 );
|
||||||
|
|
||||||
auto outputBlock = std::make_unique<QgsRasterBlock>();
|
|
||||||
if ( !mInput )
|
if ( !mInput )
|
||||||
{
|
{
|
||||||
return outputBlock.release();
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this moment we know that we read rendered image
|
// At this moment we know that we read rendered image
|
||||||
@ -125,7 +124,7 @@ QgsRasterBlock *QgsHueSaturationFilter::block( int bandNo, QgsRectangle const &
|
|||||||
if ( !inputBlock || inputBlock->isEmpty() )
|
if ( !inputBlock || inputBlock->isEmpty() )
|
||||||
{
|
{
|
||||||
QgsDebugError( QStringLiteral( "No raster data!" ) );
|
QgsDebugError( QStringLiteral( "No raster data!" ) );
|
||||||
return outputBlock.release();
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !mInvertColors && mSaturation == 0 && mGrayscaleMode == GrayscaleOff && !mColorizeOn )
|
if ( !mInvertColors && mSaturation == 0 && mGrayscaleMode == GrayscaleOff && !mColorizeOn )
|
||||||
@ -134,37 +133,50 @@ QgsRasterBlock *QgsHueSaturationFilter::block( int bandNo, QgsRectangle const &
|
|||||||
return inputBlock.release();
|
return inputBlock.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto outputBlock = std::make_unique<QgsRasterBlock>();
|
||||||
|
|
||||||
if ( !outputBlock->reset( Qgis::DataType::ARGB32_Premultiplied, width, height ) )
|
if ( !outputBlock->reset( Qgis::DataType::ARGB32_Premultiplied, width, height ) )
|
||||||
{
|
{
|
||||||
return outputBlock.release();
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust image
|
// adjust image
|
||||||
QRgb myNoDataColor = qRgba( 0, 0, 0, 0 );
|
const QRgb myNoDataColor = qRgba( 0, 0, 0, 0 );
|
||||||
QRgb myRgb;
|
|
||||||
QColor myColor;
|
|
||||||
int h, s, l;
|
int h, s, l;
|
||||||
int r, g, b, alpha;
|
int r, g, b;
|
||||||
double alphaFactor = 1.0;
|
double alphaFactor = 1.0;
|
||||||
|
|
||||||
for ( qgssize i = 0; i < ( qgssize )width * height; i++ )
|
const QRgb *inputColorData = inputBlock->colorData();
|
||||||
|
const int imageHeight = inputBlock->image().height();
|
||||||
|
const int imageWidth = inputBlock->image().width();
|
||||||
|
|
||||||
|
QRgb *outputColorData = outputBlock->colorData();
|
||||||
|
|
||||||
|
for ( int row = 0; row < height; ++row )
|
||||||
{
|
{
|
||||||
if ( inputBlock->color( i ) == myNoDataColor )
|
if ( feedback->isCanceled() )
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
for ( int col = 0; col < width; ++col )
|
||||||
{
|
{
|
||||||
outputBlock->setColor( i, myNoDataColor );
|
const qgssize i = static_cast< qgssize >( row ) * width + static_cast< qgssize >( col );
|
||||||
|
|
||||||
|
if ( !inputColorData || row >= imageHeight || col >= imageWidth || inputColorData[i] == myNoDataColor )
|
||||||
|
{
|
||||||
|
outputColorData[i] = myNoDataColor;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
myRgb = inputBlock->color( i );
|
const QRgb inputColor = inputColorData[i];
|
||||||
myColor = QColor( myRgb );
|
QColor myColor = QColor( inputColor );
|
||||||
|
|
||||||
// Alpha must be taken from QRgb, since conversion from QRgb->QColor loses alpha
|
// Alpha must be taken from QRgb, since conversion from QRgb->QColor loses alpha
|
||||||
alpha = qAlpha( myRgb );
|
const int alpha = qAlpha( inputColor );
|
||||||
|
|
||||||
if ( alpha == 0 )
|
if ( alpha == 0 )
|
||||||
{
|
{
|
||||||
// totally transparent, no changes required
|
// totally transparent, no changes required
|
||||||
outputBlock->setColor( i, myRgb );
|
outputColorData[i] = inputColor;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +226,8 @@ QgsRasterBlock *QgsHueSaturationFilter::block( int bandNo, QgsRectangle const &
|
|||||||
b *= alphaFactor;
|
b *= alphaFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
outputBlock->setColor( i, qRgba( r, g, b, alpha ) );
|
outputColorData[i] = qRgba( r, g, b, alpha );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return outputBlock.release();
|
return outputBlock.release();
|
||||||
|
@ -572,13 +572,22 @@ void QgsVectorLayer::selectByExpression( const QString &expression, Qgis::Select
|
|||||||
defaultContext.emplace( QgsExpressionContextUtils::globalProjectLayerScopes( this ) );
|
defaultContext.emplace( QgsExpressionContextUtils::globalProjectLayerScopes( this ) );
|
||||||
context = &defaultContext.value();
|
context = &defaultContext.value();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
context->appendScope( QgsExpressionContextUtils::layerScope( this ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsExpression exp( expression );
|
||||||
|
exp.prepare( context );
|
||||||
|
|
||||||
if ( behavior == Qgis::SelectBehavior::SetSelection || behavior == Qgis::SelectBehavior::AddToSelection )
|
if ( behavior == Qgis::SelectBehavior::SetSelection || behavior == Qgis::SelectBehavior::AddToSelection )
|
||||||
{
|
{
|
||||||
QgsFeatureRequest request = QgsFeatureRequest().setFilterExpression( expression )
|
QgsFeatureRequest request = QgsFeatureRequest().setFilterExpression( expression )
|
||||||
.setExpressionContext( *context )
|
.setExpressionContext( *context );
|
||||||
.setFlags( Qgis::FeatureRequestFlag::NoGeometry )
|
request.setSubsetOfAttributes( exp.referencedColumns(), fields() );
|
||||||
.setNoAttributes();
|
|
||||||
|
if ( !exp.needsGeometry() )
|
||||||
|
request.setFlags( Qgis::FeatureRequestFlag::NoGeometry );
|
||||||
|
|
||||||
QgsFeatureIterator features = getFeatures( request );
|
QgsFeatureIterator features = getFeatures( request );
|
||||||
|
|
||||||
@ -595,8 +604,6 @@ void QgsVectorLayer::selectByExpression( const QString &expression, Qgis::Select
|
|||||||
}
|
}
|
||||||
else if ( behavior == Qgis::SelectBehavior::IntersectSelection || behavior == Qgis::SelectBehavior::RemoveFromSelection )
|
else if ( behavior == Qgis::SelectBehavior::IntersectSelection || behavior == Qgis::SelectBehavior::RemoveFromSelection )
|
||||||
{
|
{
|
||||||
QgsExpression exp( expression );
|
|
||||||
exp.prepare( context );
|
|
||||||
|
|
||||||
QgsFeatureIds oldSelection = selectedFeatureIds();
|
QgsFeatureIds oldSelection = selectedFeatureIds();
|
||||||
QgsFeatureRequest request = QgsFeatureRequest().setFilterFids( oldSelection );
|
QgsFeatureRequest request = QgsFeatureRequest().setFilterFids( oldSelection );
|
||||||
|
@ -111,10 +111,21 @@ QgsLayoutMapWidget::QgsLayoutMapWidget( QgsLayoutItemMap *item, QgsMapCanvas *ma
|
|||||||
|
|
||||||
mDockToolbar->setIconSize( QgsGuiUtils::iconSize( true ) );
|
mDockToolbar->setIconSize( QgsGuiUtils::iconSize( true ) );
|
||||||
|
|
||||||
|
mLayersMenu = new QMenu( this );
|
||||||
|
QToolButton *btnLayers = new QToolButton( this );
|
||||||
|
btnLayers->setAutoRaise( true );
|
||||||
|
btnLayers->setToolTip( tr( "Set Map Extent to Layer Extent" ) );
|
||||||
|
btnLayers->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionLayers.svg" ) ) );
|
||||||
|
btnLayers->setPopupMode( QToolButton::InstantPopup );
|
||||||
|
btnLayers->setMenu( mLayersMenu );
|
||||||
|
|
||||||
|
mDockToolbar->insertWidget( mActionMoveContent, btnLayers );
|
||||||
|
connect( mLayersMenu, &QMenu::aboutToShow, this, &QgsLayoutMapWidget::aboutToShowLayersMenu );
|
||||||
|
|
||||||
mBookmarkMenu = new QMenu( this );
|
mBookmarkMenu = new QMenu( this );
|
||||||
QToolButton *btnBookmarks = new QToolButton( this );
|
QToolButton *btnBookmarks = new QToolButton( this );
|
||||||
btnBookmarks->setAutoRaise( true );
|
btnBookmarks->setAutoRaise( true );
|
||||||
btnBookmarks->setToolTip( tr( "Bookmarks" ) );
|
btnBookmarks->setToolTip( tr( "Set Map Extent to Bookmark Extent" ) );
|
||||||
btnBookmarks->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionShowBookmarks.svg" ) ) );
|
btnBookmarks->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionShowBookmarks.svg" ) ) );
|
||||||
btnBookmarks->setPopupMode( QToolButton::InstantPopup );
|
btnBookmarks->setPopupMode( QToolButton::InstantPopup );
|
||||||
btnBookmarks->setMenu( mBookmarkMenu );
|
btnBookmarks->setMenu( mBookmarkMenu );
|
||||||
@ -459,6 +470,44 @@ void QgsLayoutMapWidget::switchToMoveContentTool()
|
|||||||
mInterface->activateTool( QgsLayoutDesignerInterface::ToolMoveItemContent );
|
mInterface->activateTool( QgsLayoutDesignerInterface::ToolMoveItemContent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsLayoutMapWidget::aboutToShowLayersMenu()
|
||||||
|
{
|
||||||
|
mLayersMenu->clear();
|
||||||
|
|
||||||
|
if ( !mMapLayerModel )
|
||||||
|
{
|
||||||
|
mMapLayerModel = new QgsMapLayerProxyModel( this );
|
||||||
|
mMapLayerModel->setFilters( Qgis::LayerFilter::SpatialLayer );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( mMapLayerModel->rowCount() == 0 )
|
||||||
|
{
|
||||||
|
QAction *action = new QAction( tr( "No spatial layers available" ) );
|
||||||
|
action->setEnabled( false );
|
||||||
|
mLayersMenu->addAction( action );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < mMapLayerModel->rowCount(); ++i )
|
||||||
|
{
|
||||||
|
const QModelIndex index = mMapLayerModel->index( i, 0 );
|
||||||
|
const QIcon icon = qvariant_cast<QIcon>( mMapLayerModel->data( index, Qt::DecorationRole ) );
|
||||||
|
const QString text = mMapLayerModel->data( index, Qt::DisplayRole ).toString();
|
||||||
|
const QString tooltip = mMapLayerModel->data( index, Qt::ToolTipRole ).toString();
|
||||||
|
const QString layerId = mMapLayerModel->data( index, static_cast<int>( QgsMapLayerModel::CustomRole::LayerId ) ).toString();
|
||||||
|
|
||||||
|
QAction *action = new QAction( icon, text, mLayersMenu );
|
||||||
|
action->setToolTip( tooltip );
|
||||||
|
connect( action, &QAction::triggered, this, [this, layerId] {
|
||||||
|
if ( QgsMapLayer *layer = QgsProject::instance()->mapLayer( layerId ) )
|
||||||
|
{
|
||||||
|
setToCustomExtent( QgsReferencedRectangle( layer->extent(), layer->crs() ) );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
mLayersMenu->addAction( action );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QgsLayoutMapWidget::aboutToShowBookmarkMenu()
|
void QgsLayoutMapWidget::aboutToShowBookmarkMenu()
|
||||||
{
|
{
|
||||||
mBookmarkMenu->clear();
|
mBookmarkMenu->clear();
|
||||||
@ -466,7 +515,17 @@ void QgsLayoutMapWidget::aboutToShowBookmarkMenu()
|
|||||||
// query the bookmarks now? or once during widget creation... Hmm. Either way, there's potentially a
|
// query the bookmarks now? or once during widget creation... Hmm. Either way, there's potentially a
|
||||||
// delay if there's LOTS of bookmarks. Let's avoid the cost until bookmarks are actually required.
|
// delay if there's LOTS of bookmarks. Let's avoid the cost until bookmarks are actually required.
|
||||||
if ( !mBookmarkModel )
|
if ( !mBookmarkModel )
|
||||||
|
{
|
||||||
mBookmarkModel = new QgsBookmarkManagerProxyModel( QgsApplication::bookmarkManager(), QgsProject::instance()->bookmarkManager(), this );
|
mBookmarkModel = new QgsBookmarkManagerProxyModel( QgsApplication::bookmarkManager(), QgsProject::instance()->bookmarkManager(), this );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( mBookmarkModel->rowCount() == 0 )
|
||||||
|
{
|
||||||
|
QAction *action = new QAction( tr( "No bookmarks available" ) );
|
||||||
|
action->setEnabled( false );
|
||||||
|
mBookmarkMenu->addAction( action );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QMap<QString, QMenu *> groupMenus;
|
QMap<QString, QMenu *> groupMenus;
|
||||||
for ( int i = 0; i < mBookmarkModel->rowCount(); ++i )
|
for ( int i = 0; i < mBookmarkModel->rowCount(); ++i )
|
||||||
@ -485,32 +544,7 @@ void QgsLayoutMapWidget::aboutToShowBookmarkMenu()
|
|||||||
QAction *action = new QAction( mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Name ) ).toString(), mBookmarkMenu );
|
QAction *action = new QAction( mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Name ) ).toString(), mBookmarkMenu );
|
||||||
const QgsReferencedRectangle extent = mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Extent ) ).value<QgsReferencedRectangle>();
|
const QgsReferencedRectangle extent = mBookmarkModel->data( mBookmarkModel->index( i, 0 ), static_cast<int>( QgsBookmarkManagerModel::CustomRole::Extent ) ).value<QgsReferencedRectangle>();
|
||||||
connect( action, &QAction::triggered, this, [=] {
|
connect( action, &QAction::triggered, this, [=] {
|
||||||
if ( !mMapItem )
|
setToCustomExtent( extent );
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QgsRectangle newExtent = extent;
|
|
||||||
|
|
||||||
//transform?
|
|
||||||
if ( extent.crs() != mMapItem->crs() )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
QgsCoordinateTransform xForm( extent.crs(), mMapItem->crs(), QgsProject::instance() );
|
|
||||||
xForm.setBallparkTransformsAreAppropriate( true );
|
|
||||||
newExtent = xForm.transformBoundingBox( newExtent );
|
|
||||||
}
|
|
||||||
catch ( QgsCsException & )
|
|
||||||
{
|
|
||||||
//transform failed, better not proceed
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mMapItem->layout()->undoStack()->beginCommand( mMapItem, tr( "Change Map Extent" ) );
|
|
||||||
mMapItem->zoomToExtent( newExtent );
|
|
||||||
mMapItem->layout()->undoStack()->endCommand();
|
|
||||||
} );
|
} );
|
||||||
destMenu->addAction( action );
|
destMenu->addAction( action );
|
||||||
}
|
}
|
||||||
@ -526,6 +560,34 @@ void QgsLayoutMapWidget::aboutToShowBookmarkMenu()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsLayoutMapWidget::setToCustomExtent( const QgsReferencedRectangle &referencedExtent )
|
||||||
|
{
|
||||||
|
if ( !mMapItem || referencedExtent.isEmpty() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsRectangle extent = referencedExtent;
|
||||||
|
if ( referencedExtent.crs() != mMapItem->crs() )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
QgsCoordinateTransform coordinateTransform( referencedExtent.crs(), mMapItem->crs(), QgsProject::instance() );
|
||||||
|
coordinateTransform.setBallparkTransformsAreAppropriate( true );
|
||||||
|
extent = coordinateTransform.transformBoundingBox( extent );
|
||||||
|
}
|
||||||
|
catch ( QgsCsException & )
|
||||||
|
{
|
||||||
|
//transform failed, better not proceed
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mMapItem->layout()->undoStack()->beginCommand( mMapItem, tr( "Change Map Extent" ) );
|
||||||
|
mMapItem->zoomToExtent( extent );
|
||||||
|
mMapItem->layout()->undoStack()->endCommand();
|
||||||
|
}
|
||||||
|
|
||||||
void QgsLayoutMapWidget::mTemporalCheckBox_toggled( bool checked )
|
void QgsLayoutMapWidget::mTemporalCheckBox_toggled( bool checked )
|
||||||
{
|
{
|
||||||
if ( !mMapItem )
|
if ( !mMapItem )
|
||||||
|
@ -34,6 +34,7 @@ class QgsLayoutItemMapOverview;
|
|||||||
class QgsLayoutMapLabelingWidget;
|
class QgsLayoutMapLabelingWidget;
|
||||||
class QgsLayoutMapClippingWidget;
|
class QgsLayoutMapClippingWidget;
|
||||||
class QgsBookmarkManagerProxyModel;
|
class QgsBookmarkManagerProxyModel;
|
||||||
|
class QgsReferencedRectangle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup gui
|
* \ingroup gui
|
||||||
@ -144,6 +145,7 @@ class GUI_EXPORT QgsLayoutMapWidget : public QgsLayoutItemBaseWidget, private Ui
|
|||||||
void showLabelSettings();
|
void showLabelSettings();
|
||||||
void showClipSettings();
|
void showClipSettings();
|
||||||
void switchToMoveContentTool();
|
void switchToMoveContentTool();
|
||||||
|
void aboutToShowLayersMenu();
|
||||||
void aboutToShowBookmarkMenu();
|
void aboutToShowBookmarkMenu();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -153,7 +155,9 @@ class GUI_EXPORT QgsLayoutMapWidget : public QgsLayoutItemBaseWidget, private Ui
|
|||||||
QgsLayoutDesignerInterface *mInterface = nullptr;
|
QgsLayoutDesignerInterface *mInterface = nullptr;
|
||||||
QPointer<QgsLayoutMapLabelingWidget> mLabelWidget;
|
QPointer<QgsLayoutMapLabelingWidget> mLabelWidget;
|
||||||
QPointer<QgsLayoutMapClippingWidget> mClipWidget;
|
QPointer<QgsLayoutMapClippingWidget> mClipWidget;
|
||||||
|
QMenu *mLayersMenu = nullptr;
|
||||||
QMenu *mBookmarkMenu = nullptr;
|
QMenu *mBookmarkMenu = nullptr;
|
||||||
|
QgsMapLayerProxyModel *mMapLayerModel = nullptr;
|
||||||
QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
|
QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
|
||||||
QString mReportTypeString;
|
QString mReportTypeString;
|
||||||
int mBlockThemeComboChanges = 0;
|
int mBlockThemeComboChanges = 0;
|
||||||
@ -190,6 +194,8 @@ class GUI_EXPORT QgsLayoutMapWidget : public QgsLayoutItemBaseWidget, private Ui
|
|||||||
* The order will match the layer order from the map canvas
|
* The order will match the layer order from the map canvas
|
||||||
*/
|
*/
|
||||||
QList<QgsMapLayer *> orderedPresetVisibleLayers( const QString &name ) const;
|
QList<QgsMapLayer *> orderedPresetVisibleLayers( const QString &name ) const;
|
||||||
|
|
||||||
|
void setToCustomExtent( const QgsReferencedRectangle &extent );
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,6 +50,8 @@ void QgsMapToolShapeAbstract::clean()
|
|||||||
|
|
||||||
void QgsMapToolShapeAbstract::undo()
|
void QgsMapToolShapeAbstract::undo()
|
||||||
{
|
{
|
||||||
if ( mPoints.count() > 0 )
|
if ( mPoints.count() == 1 )
|
||||||
|
clean();
|
||||||
|
else if ( mPoints.count() > 1 )
|
||||||
mPoints.removeLast();
|
mPoints.removeLast();
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@ void QgsLayerPropertiesDialog::saveDefaultStyle()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mLayer->saveStyleToDatabase( QString(), QString(), true, QString(), errorMsg );
|
mLayer->saveStyleToDatabaseV2( QString(), QString(), true, QString(), errorMsg );
|
||||||
if ( errorMsg.isNull() )
|
if ( errorMsg.isNull() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -457,7 +457,7 @@ void QgsLayerPropertiesDialog::saveStyleAs()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mLayer->saveStyleToDatabase( dbSettings.name, dbSettings.description, dbSettings.isDefault, dbSettings.uiFileContent, errorMessage, dlg.styleCategories() );
|
mLayer->saveStyleToDatabaseV2( dbSettings.name, dbSettings.description, dbSettings.isDefault, dbSettings.uiFileContent, errorMessage, dlg.styleCategories() );
|
||||||
|
|
||||||
if ( !errorMessage.isNull() )
|
if ( !errorMessage.isNull() )
|
||||||
{
|
{
|
||||||
|
@ -1073,7 +1073,7 @@ void QgsVectorLayerProperties::saveMultipleStylesAs()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mLayer->saveStyleToDatabase( name, dbSettings.description, dbSettings.isDefault, dbSettings.uiFileContent, msgError, dlg.styleCategories() );
|
mLayer->saveStyleToDatabaseV2( name, dbSettings.description, dbSettings.isDefault, dbSettings.uiFileContent, msgError, dlg.styleCategories() );
|
||||||
|
|
||||||
if ( !msgError.isNull() )
|
if ( !msgError.isNull() )
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "qgstest.h"
|
#include "qgstest.h"
|
||||||
|
|
||||||
#include "qgs3d.h"
|
#include "qgs3d.h"
|
||||||
|
#include "qgs3dmapcanvas.h"
|
||||||
#include "qgs3dmapscene.h"
|
#include "qgs3dmapscene.h"
|
||||||
#include "qgs3dmapsettings.h"
|
#include "qgs3dmapsettings.h"
|
||||||
#include "qgs3dutils.h"
|
#include "qgs3dutils.h"
|
||||||
@ -29,6 +30,8 @@
|
|||||||
#include "qgsvectorlayer.h"
|
#include "qgsvectorlayer.h"
|
||||||
#include "qgsvectorlayer3drenderer.h"
|
#include "qgsvectorlayer3drenderer.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
class TestQgs3DCameraController : public QgsTest
|
class TestQgs3DCameraController : public QgsTest
|
||||||
{
|
{
|
||||||
@ -54,6 +57,7 @@ class TestQgs3DCameraController : public QgsTest
|
|||||||
void testRotationCenterRotationCameraRotationCenter();
|
void testRotationCenterRotationCameraRotationCenter();
|
||||||
void testResetViewRaster();
|
void testResetViewRaster();
|
||||||
void testResetViewPointCloud();
|
void testResetViewPointCloud();
|
||||||
|
void testChangeNavigationMode();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void waitForNearPlane( QgsOffscreen3DEngine &engine, Qgs3DMapScene *scene, float atLeast ); //#spellok
|
void waitForNearPlane( QgsOffscreen3DEngine &engine, Qgs3DMapScene *scene, float atLeast ); //#spellok
|
||||||
@ -1213,6 +1217,9 @@ void TestQgs3DCameraController::testResetViewRaster()
|
|||||||
Qgs3DMapScene *scene = new Qgs3DMapScene( *mapSettings, &engine );
|
Qgs3DMapScene *scene = new Qgs3DMapScene( *mapSettings, &engine );
|
||||||
engine.setRootEntity( scene );
|
engine.setRootEntity( scene );
|
||||||
|
|
||||||
|
// This ensures that the OpenGL context is properly created
|
||||||
|
Qgs3DUtils::captureSceneImage( engine, scene );
|
||||||
|
|
||||||
// compare raster layer + vector layer
|
// compare raster layer + vector layer
|
||||||
scene->viewZoomFull();
|
scene->viewZoomFull();
|
||||||
QGSCOMPARENEAR( scene->cameraController()->distance(), 2172, 1 );
|
QGSCOMPARENEAR( scene->cameraController()->distance(), 2172, 1 );
|
||||||
@ -1243,6 +1250,9 @@ void TestQgs3DCameraController::testResetViewPointCloud()
|
|||||||
Qgs3DMapScene *scene = new Qgs3DMapScene( *mapSettings, &engine );
|
Qgs3DMapScene *scene = new Qgs3DMapScene( *mapSettings, &engine );
|
||||||
engine.setRootEntity( scene );
|
engine.setRootEntity( scene );
|
||||||
|
|
||||||
|
// This ensures that the OpenGL context is properly created
|
||||||
|
Qgs3DUtils::captureSceneImage( engine, scene );
|
||||||
|
|
||||||
// compare virtual point cloud layer
|
// compare virtual point cloud layer
|
||||||
scene->viewZoomFull();
|
scene->viewZoomFull();
|
||||||
QGSCOMPARENEAR( scene->cameraController()->distance(), 86, 1 );
|
QGSCOMPARENEAR( scene->cameraController()->distance(), 86, 1 );
|
||||||
@ -1264,5 +1274,28 @@ void TestQgs3DCameraController::testResetViewPointCloud()
|
|||||||
delete pcLayer;
|
delete pcLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgs3DCameraController::testChangeNavigationMode()
|
||||||
|
{
|
||||||
|
auto canvas3D = std::unique_ptr<Qgs3DMapCanvas>( new Qgs3DMapCanvas() );
|
||||||
|
canvas3D->show();
|
||||||
|
QVERIFY( QTest::qWaitForWindowExposed( canvas3D.get() ) );
|
||||||
|
|
||||||
|
Qgs3DMapSettings *mapSettings = new Qgs3DMapSettings;
|
||||||
|
canvas3D->setMapSettings( mapSettings );
|
||||||
|
|
||||||
|
QCOMPARE( mapSettings->cameraNavigationMode(), Qgis::NavigationMode::TerrainBased );
|
||||||
|
QCOMPARE( canvas3D->cameraController()->cameraNavigationMode(), Qgis::NavigationMode::TerrainBased );
|
||||||
|
|
||||||
|
QKeyEvent changeNavigationModeEvent( QEvent::ShortcutOverride, Qt::Key_QuoteLeft, Qt::ControlModifier );
|
||||||
|
QApplication::sendEvent( canvas3D.get(), &changeNavigationModeEvent );
|
||||||
|
|
||||||
|
QCOMPARE( canvas3D->cameraController()->cameraNavigationMode(), Qgis::NavigationMode::Walk );
|
||||||
|
QCOMPARE( mapSettings->cameraNavigationMode(), Qgis::NavigationMode::Walk );
|
||||||
|
|
||||||
|
QApplication::sendEvent( canvas3D.get(), &changeNavigationModeEvent );
|
||||||
|
QCOMPARE( canvas3D->cameraController()->cameraNavigationMode(), Qgis::NavigationMode::TerrainBased );
|
||||||
|
QCOMPARE( mapSettings->cameraNavigationMode(), Qgis::NavigationMode::TerrainBased );
|
||||||
|
}
|
||||||
|
|
||||||
QGSTEST_MAIN( TestQgs3DCameraController )
|
QGSTEST_MAIN( TestQgs3DCameraController )
|
||||||
#include "testqgs3dcameracontroller.moc"
|
#include "testqgs3dcameracontroller.moc"
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include "qgsmapcanvastracer.h"
|
#include "qgsmapcanvastracer.h"
|
||||||
#include "testqgsmaptoolutils.h"
|
#include "testqgsmaptoolutils.h"
|
||||||
|
|
||||||
|
#include <QSignalSpy>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup UnitTests
|
* \ingroup UnitTests
|
||||||
@ -42,14 +44,18 @@ class TestQgsMapToolReshape : public QObject
|
|||||||
void initTestCase(); // will be called before the first testfunction is executed.
|
void initTestCase(); // will be called before the first testfunction is executed.
|
||||||
void cleanupTestCase(); // will be called after the last testfunction was executed.
|
void cleanupTestCase(); // will be called after the last testfunction was executed.
|
||||||
|
|
||||||
|
void testReshapeNotEnoughPoints();
|
||||||
void testReshapeNoChange();
|
void testReshapeNoChange();
|
||||||
void testReshapeZ();
|
void testReshapeZ();
|
||||||
void testTopologicalEditing();
|
void testTopologicalEditing();
|
||||||
void testTopologicalEditingNoSnap();
|
void testTopologicalEditingNoSnap();
|
||||||
void testAvoidIntersectionAndTopoEdit();
|
void testAvoidIntersectionAndTopoEdit();
|
||||||
|
void testAvoidIntersectionAndTopoEditSameLayer();
|
||||||
|
void testAvoidIntersectionAndTopoEditSameLayerSelection();
|
||||||
void reshapeWithBindingLine();
|
void reshapeWithBindingLine();
|
||||||
void testWithTracing();
|
void testWithTracing();
|
||||||
void testKeepDirection();
|
void testKeepDirection();
|
||||||
|
void testWithSnapToSegment();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QgisApp *mQgisApp = nullptr;
|
QgisApp *mQgisApp = nullptr;
|
||||||
@ -220,6 +226,27 @@ void TestQgsMapToolReshape::cleanupTestCase()
|
|||||||
QgsApplication::exitQgis();
|
QgsApplication::exitQgis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsMapToolReshape::testReshapeNotEnoughPoints()
|
||||||
|
{
|
||||||
|
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
||||||
|
// no snapping for this test
|
||||||
|
QgsSnappingConfig cfg = mCanvas->snappingUtils()->config();
|
||||||
|
cfg.setEnabled( false );
|
||||||
|
mCanvas->snappingUtils()->setConfig( cfg );
|
||||||
|
|
||||||
|
const QSignalSpy editCommandSpy( mLayerLineZ, &QgsVectorLayer::editCommandStarted );
|
||||||
|
|
||||||
|
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||||
|
utils.mouseClick( 3, 2, Qt::RightButton );
|
||||||
|
|
||||||
|
// activate back snapping
|
||||||
|
cfg.setEnabled( true );
|
||||||
|
mCanvas->snappingUtils()->setConfig( cfg );
|
||||||
|
|
||||||
|
QCOMPARE( editCommandSpy.count(), 0 );
|
||||||
|
QCOMPARE( mLayerLineZ->undoStack()->index(), 0 );
|
||||||
|
}
|
||||||
|
|
||||||
void TestQgsMapToolReshape::testReshapeNoChange()
|
void TestQgsMapToolReshape::testReshapeNoChange()
|
||||||
{
|
{
|
||||||
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
||||||
@ -385,6 +412,97 @@ void TestQgsMapToolReshape::testAvoidIntersectionAndTopoEdit()
|
|||||||
mCaptureTool->setAutoSnapEnabled( isAutoSnapEnabled );
|
mCaptureTool->setAutoSnapEnabled( isAutoSnapEnabled );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsMapToolReshape::testAvoidIntersectionAndTopoEditSameLayer()
|
||||||
|
{
|
||||||
|
QList<QgsMapLayer *> layers = { mLayerTopo, mLayerTopo2 };
|
||||||
|
QgsProject::instance()->addMapLayers( layers );
|
||||||
|
mCanvas->setLayers( layers );
|
||||||
|
|
||||||
|
// backup project settings
|
||||||
|
const bool topologicalEditing = QgsProject::instance()->topologicalEditing();
|
||||||
|
const Qgis::AvoidIntersectionsMode mode( QgsProject::instance()->avoidIntersectionsMode() );
|
||||||
|
const QList<QgsVectorLayer *> vlayers = QgsProject::instance()->avoidIntersectionsLayers();
|
||||||
|
const bool isAutoSnapEnabled = mCaptureTool->isAutoSnapEnabled();
|
||||||
|
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsMode( Qgis::AvoidIntersectionsMode::AvoidIntersectionsLayers );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsLayers( { mLayerTopo, mLayerTopo2 } );
|
||||||
|
QgsProject::instance()->setTopologicalEditing( true );
|
||||||
|
mCanvas->setCurrentLayer( mLayerTopo );
|
||||||
|
mCaptureTool->setAutoSnapEnabled( false );
|
||||||
|
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
||||||
|
|
||||||
|
// reshape mLayerTopo feature 1 with two points inside mLayerTopo feature 2, both features should be reshaped
|
||||||
|
utils.mouseClick( 4, 4, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7, 4, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7.5, 3, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7.5, 1, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7, 0, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 4, 0, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 4, 0, Qt::RightButton );
|
||||||
|
|
||||||
|
QCOMPARE( mLayerTopo2->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 5, 4 5, 4 7, 0 7, 0 5))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((4 0, 7 0, 7.5 1, 7.5 3, 7 4, 4 4, 0 4, 0 0, 4 0))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 2 ).geometry().asWkt(), QStringLiteral( "Polygon ((7 0, 8 0, 8 4, 7 4, 7.5 3, 7.5 1, 7 0))" ) );
|
||||||
|
|
||||||
|
mLayerTopo->undoStack()->undo();
|
||||||
|
|
||||||
|
QCOMPARE( mLayerTopo2->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 5, 4 5, 4 7, 0 7, 0 5))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 0, 4 0, 4 4, 0 4, 0 0))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 2 ).geometry().asWkt(), QStringLiteral( "Polygon ((7 0, 8 0, 8 4, 7 4, 7 0))" ) );
|
||||||
|
|
||||||
|
QgsProject::instance()->setTopologicalEditing( topologicalEditing );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsMode( mode );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsLayers( vlayers );
|
||||||
|
mCaptureTool->setAutoSnapEnabled( isAutoSnapEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsMapToolReshape::testAvoidIntersectionAndTopoEditSameLayerSelection()
|
||||||
|
{
|
||||||
|
QList<QgsMapLayer *> layers = { mLayerTopo, mLayerTopo2 };
|
||||||
|
QgsProject::instance()->addMapLayers( layers );
|
||||||
|
mCanvas->setLayers( layers );
|
||||||
|
|
||||||
|
// backup project settings
|
||||||
|
const bool topologicalEditing = QgsProject::instance()->topologicalEditing();
|
||||||
|
const Qgis::AvoidIntersectionsMode mode( QgsProject::instance()->avoidIntersectionsMode() );
|
||||||
|
const QList<QgsVectorLayer *> vlayers = QgsProject::instance()->avoidIntersectionsLayers();
|
||||||
|
const bool isAutoSnapEnabled = mCaptureTool->isAutoSnapEnabled();
|
||||||
|
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsMode( Qgis::AvoidIntersectionsMode::AvoidIntersectionsLayers );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsLayers( { mLayerTopo, mLayerTopo2 } );
|
||||||
|
QgsProject::instance()->setTopologicalEditing( true );
|
||||||
|
mCanvas->setCurrentLayer( mLayerTopo );
|
||||||
|
mCaptureTool->setAutoSnapEnabled( false );
|
||||||
|
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
||||||
|
|
||||||
|
mLayerTopo->selectByIds( { 1 } );
|
||||||
|
|
||||||
|
// reshape mLayerTopo feature 1 with two points inside mLayerTopo feature 2, only the selected feature should be reshaped
|
||||||
|
utils.mouseClick( 4, 4, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7, 4, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7.5, 3, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7.5, 1, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 7, 0, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 4, 0, Qt::LeftButton, Qt::KeyboardModifiers() );
|
||||||
|
utils.mouseClick( 4, 0, Qt::RightButton );
|
||||||
|
|
||||||
|
QCOMPARE( mLayerTopo2->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 5, 4 5, 4 7, 0 7, 0 5))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((4 0, 0 0, 0 4, 4 4, 7 4, 7 0, 4 0))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 2 ).geometry().asWkt(), QStringLiteral( "Polygon ((7 0, 8 0, 8 4, 7 4, 7 0))" ) );
|
||||||
|
|
||||||
|
mLayerTopo->undoStack()->undo();
|
||||||
|
|
||||||
|
QCOMPARE( mLayerTopo2->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 5, 4 5, 4 7, 0 7, 0 5))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon ((0 0, 4 0, 4 4, 0 4, 0 0))" ) );
|
||||||
|
QCOMPARE( mLayerTopo->getFeature( 2 ).geometry().asWkt(), QStringLiteral( "Polygon ((7 0, 8 0, 8 4, 7 4, 7 0))" ) );
|
||||||
|
|
||||||
|
mLayerTopo->removeSelection();
|
||||||
|
QgsProject::instance()->setTopologicalEditing( topologicalEditing );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsMode( mode );
|
||||||
|
QgsProject::instance()->setAvoidIntersectionsLayers( vlayers );
|
||||||
|
mCaptureTool->setAutoSnapEnabled( isAutoSnapEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
void TestQgsMapToolReshape::reshapeWithBindingLine()
|
void TestQgsMapToolReshape::reshapeWithBindingLine()
|
||||||
{
|
{
|
||||||
// prepare vector layer
|
// prepare vector layer
|
||||||
@ -531,11 +649,42 @@ void TestQgsMapToolReshape::testKeepDirection()
|
|||||||
QString wkt3 = QStringLiteral( "LineString (13 1, 12 1, 12 3, 13 3, 14 3, 14 5, 13 5, 12 5, 12 7, 13 7, 13 8, 19 11, 25 8, 25 0, 13 0, 13 1)" );
|
QString wkt3 = QStringLiteral( "LineString (13 1, 12 1, 12 3, 13 3, 14 3, 14 5, 13 5, 12 5, 12 7, 13 7, 13 8, 19 11, 25 8, 25 0, 13 0, 13 1)" );
|
||||||
QCOMPARE( mLayerLine->getFeature( 3 ).geometry().asWkt(), wkt3 );
|
QCOMPARE( mLayerLine->getFeature( 3 ).geometry().asWkt(), wkt3 );
|
||||||
|
|
||||||
|
// undo the three changes
|
||||||
|
mLayerLine->undoStack()->undo();
|
||||||
|
mLayerLine->undoStack()->undo();
|
||||||
|
mLayerLine->undoStack()->undo();
|
||||||
|
|
||||||
// activate back snapping
|
// activate back snapping
|
||||||
cfg.setEnabled( true );
|
cfg.setEnabled( true );
|
||||||
mCanvas->snappingUtils()->setConfig( cfg );
|
mCanvas->snappingUtils()->setConfig( cfg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsMapToolReshape::testWithSnapToSegment()
|
||||||
|
{
|
||||||
|
TestQgsMapToolAdvancedDigitizingUtils utils( mCaptureTool );
|
||||||
|
mCanvas->setLayers( { mLayerPolygonZ } );
|
||||||
|
mCanvas->setCurrentLayer( mLayerPolygonZ );
|
||||||
|
mCanvas->setDestinationCrs( mLayerPolygonZ->crs() );
|
||||||
|
|
||||||
|
QgsSnappingConfig cfg = mCanvas->snappingUtils()->config();
|
||||||
|
cfg.setTypeFlag( static_cast<Qgis::SnappingTypes>( Qgis::SnappingType::Segment ) );
|
||||||
|
mCanvas->snappingUtils()->setConfig( cfg );
|
||||||
|
|
||||||
|
QCOMPARE( mLayerPolygonZ->getFeature( 1 ).geometry().asWkt(), QStringLiteral( "Polygon Z ((7 5 4, 3 2 1, 0 1 2, 7 5 4))" ) );
|
||||||
|
|
||||||
|
// snap to segment on a diagonal
|
||||||
|
utils.mouseClick( 5.5, 4.5, Qt::LeftButton, {}, true );
|
||||||
|
utils.mouseClick( 1, 5, Qt::LeftButton );
|
||||||
|
utils.mouseClick( 1, 2, Qt::LeftButton, {}, true );
|
||||||
|
utils.mouseClick( 1, 2, Qt::RightButton );
|
||||||
|
|
||||||
|
QCOMPARE( mLayerPolygonZ->getFeature( 1 ).geometry().asWkt( 1 ), QStringLiteral( "Polygon Z ((1.2 1.7 333, 1 5 333, 5.7 4.2 333, 7 5 4, 3 2 1, 0 1 2, 1.2 1.7 333))" ) );
|
||||||
|
|
||||||
|
mLayerLine->undoStack()->undo();
|
||||||
|
|
||||||
|
cfg.setTypeFlag( static_cast<Qgis::SnappingTypes>( Qgis::SnappingType::Vertex | Qgis::SnappingType::Segment ) );
|
||||||
|
mCanvas->snappingUtils()->setConfig( cfg );
|
||||||
|
}
|
||||||
|
|
||||||
QGSTEST_MAIN( TestQgsMapToolReshape )
|
QGSTEST_MAIN( TestQgsMapToolReshape )
|
||||||
#include "testqgsmaptoolreshape.moc"
|
#include "testqgsmaptoolreshape.moc"
|
||||||
|
@ -64,6 +64,9 @@ void TestQgsAuthCertUtils::cleanupTestCase()
|
|||||||
|
|
||||||
void TestQgsAuthCertUtils::testValidationUtils()
|
void TestQgsAuthCertUtils::testValidationUtils()
|
||||||
{
|
{
|
||||||
|
// FIXME
|
||||||
|
QSKIP( "Broken test. See https://github.com/qgis/QGIS/issues/62373", SkipSingle );
|
||||||
|
|
||||||
// null cert
|
// null cert
|
||||||
QSslCertificate cert;
|
QSslCertificate cert;
|
||||||
QVERIFY( !QgsAuthCertUtils::certIsCurrent( cert ) );
|
QVERIFY( !QgsAuthCertUtils::certIsCurrent( cert ) );
|
||||||
|
@ -125,6 +125,9 @@ void TestQgsAuthConfig::testMethodConfig()
|
|||||||
|
|
||||||
void TestQgsAuthConfig::testPkiBundle()
|
void TestQgsAuthConfig::testPkiBundle()
|
||||||
{
|
{
|
||||||
|
// FIXME
|
||||||
|
QSKIP( "Broken test. See https://github.com/qgis/QGIS/issues/62373", SkipSingle );
|
||||||
|
|
||||||
QgsPkiBundle bundle;
|
QgsPkiBundle bundle;
|
||||||
QVERIFY( bundle.isNull() );
|
QVERIFY( bundle.isNull() );
|
||||||
QVERIFY( !bundle.isValid() );
|
QVERIFY( !bundle.isValid() );
|
||||||
|
@ -53,6 +53,7 @@ class TestQgsGML : public QObject
|
|||||||
void testStreamingParser();
|
void testStreamingParser();
|
||||||
void testStreamingParserInvalidGML();
|
void testStreamingParserInvalidGML();
|
||||||
void testPointGML2();
|
void testPointGML2();
|
||||||
|
void testPointZGML2();
|
||||||
void testLineStringGML2();
|
void testLineStringGML2();
|
||||||
void testPolygonGML2();
|
void testPolygonGML2();
|
||||||
void testMultiPointGML2();
|
void testMultiPointGML2();
|
||||||
@ -90,6 +91,8 @@ class TestQgsGML : public QObject
|
|||||||
void testUnknownEncoding();
|
void testUnknownEncoding();
|
||||||
void testUnhandledEncoding();
|
void testUnhandledEncoding();
|
||||||
void testXPath();
|
void testXPath();
|
||||||
|
void testZ();
|
||||||
|
void testZ_data();
|
||||||
};
|
};
|
||||||
|
|
||||||
const QString data1( "<myns:FeatureCollection "
|
const QString data1( "<myns:FeatureCollection "
|
||||||
@ -225,6 +228,34 @@ void TestQgsGML::testPointGML2()
|
|||||||
delete features[0].first;
|
delete features[0].first;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsGML::testPointZGML2()
|
||||||
|
{
|
||||||
|
const QgsFields fields;
|
||||||
|
QgsGmlStreamingParser gmlParser( QStringLiteral( "mytypename" ), QStringLiteral( "mygeom" ), fields );
|
||||||
|
QCOMPARE( gmlParser.processData( QByteArray( "<myns:FeatureCollection "
|
||||||
|
"xmlns:myns='http://myns' "
|
||||||
|
"xmlns:gml='http://www.opengis.net/gml'>"
|
||||||
|
"<gml:featureMember>"
|
||||||
|
"<myns:mytypename fid='mytypename.1'>"
|
||||||
|
"<myns:mygeom>"
|
||||||
|
"<gml:Point srsName='EPSG:4326'>"
|
||||||
|
"<gml:coordinates>1,2,3</gml:coordinates>"
|
||||||
|
"</gml:Point>"
|
||||||
|
"</myns:mygeom>"
|
||||||
|
"</myns:mytypename>"
|
||||||
|
"</gml:featureMember>"
|
||||||
|
"</myns:FeatureCollection>" ),
|
||||||
|
true ),
|
||||||
|
true );
|
||||||
|
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::PointZ );
|
||||||
|
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
||||||
|
QCOMPARE( features.size(), 1 );
|
||||||
|
QVERIFY( features[0].first->hasGeometry() );
|
||||||
|
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::PointZ );
|
||||||
|
QCOMPARE( features[0].first->geometry().asPoint(), QgsPoint( 1, 2, 3 ) );
|
||||||
|
delete features[0].first;
|
||||||
|
}
|
||||||
|
|
||||||
void TestQgsGML::testLineStringGML2()
|
void TestQgsGML::testLineStringGML2()
|
||||||
{
|
{
|
||||||
const QgsFields fields;
|
const QgsFields fields;
|
||||||
@ -749,11 +780,11 @@ void TestQgsGML::testPolygonGML3_srsDimension_on_Polygon()
|
|||||||
"</myns:FeatureCollection>" ),
|
"</myns:FeatureCollection>" ),
|
||||||
true ),
|
true ),
|
||||||
true );
|
true );
|
||||||
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
||||||
QCOMPARE( features.size(), 1 );
|
QCOMPARE( features.size(), 1 );
|
||||||
QVERIFY( features[0].first->hasGeometry() );
|
QVERIFY( features[0].first->hasGeometry() );
|
||||||
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
||||||
QCOMPARE( poly.size(), 1 );
|
QCOMPARE( poly.size(), 1 );
|
||||||
QCOMPARE( poly[0].size(), 5 );
|
QCOMPARE( poly[0].size(), 5 );
|
||||||
@ -783,11 +814,11 @@ void TestQgsGML::testPolygonGML3_srsDimension_on_posList()
|
|||||||
"</myns:FeatureCollection>" ),
|
"</myns:FeatureCollection>" ),
|
||||||
true ),
|
true ),
|
||||||
true );
|
true );
|
||||||
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
||||||
QCOMPARE( features.size(), 1 );
|
QCOMPARE( features.size(), 1 );
|
||||||
QVERIFY( features[0].first->hasGeometry() );
|
QVERIFY( features[0].first->hasGeometry() );
|
||||||
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
||||||
QCOMPARE( poly.size(), 1 );
|
QCOMPARE( poly.size(), 1 );
|
||||||
QCOMPARE( poly[0].size(), 5 );
|
QCOMPARE( poly[0].size(), 5 );
|
||||||
@ -821,11 +852,11 @@ void TestQgsGML::testPolygonGML3_pos()
|
|||||||
"</myns:FeatureCollection>" ),
|
"</myns:FeatureCollection>" ),
|
||||||
true ),
|
true ),
|
||||||
true );
|
true );
|
||||||
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( gmlParser.wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
||||||
QCOMPARE( features.size(), 1 );
|
QCOMPARE( features.size(), 1 );
|
||||||
QVERIFY( features[0].first->hasGeometry() );
|
QVERIFY( features[0].first->hasGeometry() );
|
||||||
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::Polygon );
|
QCOMPARE( features[0].first->geometry().wkbType(), Qgis::WkbType::PolygonZ );
|
||||||
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
QgsPolygonXY poly = features[0].first->geometry().asPolygon();
|
||||||
QCOMPARE( poly.size(), 1 );
|
QCOMPARE( poly.size(), 1 );
|
||||||
QCOMPARE( poly[0].size(), 5 );
|
QCOMPARE( poly[0].size(), 5 );
|
||||||
@ -1604,5 +1635,90 @@ void TestQgsGML::testXPath()
|
|||||||
QCOMPARE( f.attribute( QStringLiteral( "complex_repeated" ) ).toString(), QStringLiteral( "[\"foo\",\"bar\"]" ) );
|
QCOMPARE( f.attribute( QStringLiteral( "complex_repeated" ) ).toString(), QStringLiteral( "[\"foo\",\"bar\"]" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsGML::testZ_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>( "xml" );
|
||||||
|
QTest::addColumn<int>( "expectedWkbType" );
|
||||||
|
QTest::addColumn<QString>( "expectedWkt" );
|
||||||
|
|
||||||
|
QTest::newRow( "point with z gml 2" ) << QStringLiteral( R"gml(<gml:Point srsName="EPSG:4326"><gml:coordinates>0,1,2</gml:coordinates></gml:Point>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::PointZ )
|
||||||
|
<< QStringLiteral( "POINT Z (0 1 2)" );
|
||||||
|
|
||||||
|
QTest::newRow( "point with z gml 3" ) << QStringLiteral( R"gml(<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="3">0 1 2</gml:pos></gml:Point>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::PointZ )
|
||||||
|
<< QStringLiteral( "POINT Z (0 1 2)" );
|
||||||
|
|
||||||
|
// Note: this is not supported "point with z gml 3 no srsDimension" <gml:Point srsName="EPSG:4326"><gml:pos>0 1 2</gml:pos></gml:Point>
|
||||||
|
|
||||||
|
QTest::newRow( "linestring with z gml 2" ) << QStringLiteral( R"gml(<gml:LineString srsName="EPSG:4326"><gml:coordinates>0,1,2 3,4,5</gml:coordinates></gml:LineString>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::LineStringZ )
|
||||||
|
<< QStringLiteral( "LINESTRING Z (0 1 2, 3 4 5)" );
|
||||||
|
|
||||||
|
QTest::newRow( "linestring with z gml 3" ) << QStringLiteral( R"gml(<gml:Curve srsName="EPSG:4326"><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::LineStringZ )
|
||||||
|
<< QStringLiteral( "LINESTRING Z (0 1 2, 3 4 5)" );
|
||||||
|
|
||||||
|
QTest::newRow( "polygon with z gml 2" ) << QStringLiteral( R"gml(<gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1,2 3,4,5 6,7,8 0,1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::PolygonZ )
|
||||||
|
<< QStringLiteral( "POLYGON Z ((0 1 2, 3 4 5, 6 7 8, 0 1 2))" );
|
||||||
|
|
||||||
|
QTest::newRow( "polygon with z gml 3" ) << QStringLiteral( R"gml(<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">0 1 2 3 4 5 6 7 8 0 1 2</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::PolygonZ )
|
||||||
|
<< QStringLiteral( "POLYGON Z ((0 1 2, 3 4 5, 6 7 8, 0 1 2))" );
|
||||||
|
|
||||||
|
// Multi-geometries
|
||||||
|
QTest::newRow( "multipoint with z gml 2" ) << QStringLiteral( R"gml(<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,1,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,4,5</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiPointZ )
|
||||||
|
<< QStringLiteral( "MULTIPOINT Z ((0 1 2),(3 4 5))" );
|
||||||
|
|
||||||
|
QTest::newRow( "multipoint with z gml 3" ) << QStringLiteral( R"gml(<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:pos srsDimension="3">0 1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos srsDimension="3">3 4 5</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiPointZ )
|
||||||
|
<< QStringLiteral( "MULTIPOINT Z ((0 1 2),(3 4 5))" );
|
||||||
|
|
||||||
|
QTest::newRow( "multilinestring with z gml 2" ) << QStringLiteral( R"gml(<gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>0,1,2 3,4,5</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>6,7,8 9,10,11</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiLineStringZ )
|
||||||
|
<< QStringLiteral( "MULTILINESTRING Z ((0 1 2, 3 4 5),(6 7 8, 9 10 11))" );
|
||||||
|
|
||||||
|
QTest::newRow( "multilinestring with z gml 3" ) << QStringLiteral( R"gml(<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">0 1 2 3 4 5</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">6 7 8 9 10 11</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiLineStringZ )
|
||||||
|
<< QStringLiteral( "MULTILINESTRING Z ((0 1 2, 3 4 5),(6 7 8, 9 10 11))" );
|
||||||
|
|
||||||
|
QTest::newRow( "multipolygon with z gml 2" ) << QStringLiteral( R"gml(<gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1,2 3,4,5 6,7,8 0,1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>9,10,11 12,13,14 15,16,17 9,10,11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiPolygonZ )
|
||||||
|
<< QStringLiteral( "MULTIPOLYGON Z (((0 1 2, 3 4 5, 6 7 8, 0 1 2)),((9 10 11, 12 13 14, 15 16 17, 9 10 11)))" );
|
||||||
|
|
||||||
|
QTest::newRow( "multipolygon with z gml 3" ) << QStringLiteral( R"gml(<gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>0,1,2 3,4,5 6,7,8 0,1,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>9,10,11 12,13,14 15,16,17 9,10,11</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon>)gml" )
|
||||||
|
<< static_cast<int>( Qgis::WkbType::MultiPolygonZ )
|
||||||
|
<< QStringLiteral( "MULTIPOLYGON Z (((0 1 2, 3 4 5, 6 7 8, 0 1 2)),((9 10 11, 12 13 14, 15 16 17, 9 10 11)))" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsGML::testZ()
|
||||||
|
{
|
||||||
|
QFETCH( QString, xml );
|
||||||
|
QFETCH( int, expectedWkbType );
|
||||||
|
QFETCH( QString, expectedWkt );
|
||||||
|
|
||||||
|
const QString wrappedXml = QStringLiteral( R"gml(
|
||||||
|
<myns:FeatureCollection xmlns:myns="http://myns" xmlns:gml="http://www.opengis.net/gml">
|
||||||
|
<gml:featureMember>
|
||||||
|
<myns:mytypename fid="mytypename.1">
|
||||||
|
<myns:mygeom>%1</myns:mygeom>
|
||||||
|
</myns:mytypename>
|
||||||
|
</gml:featureMember>
|
||||||
|
</myns:FeatureCollection>)gml" )
|
||||||
|
.arg( xml );
|
||||||
|
|
||||||
|
const QgsFields fields;
|
||||||
|
QgsGmlStreamingParser gmlParser( QString::fromUtf8( QByteArray( "mytypename" ) ), QString::fromUtf8( QByteArray( "mygeom" ) ), fields );
|
||||||
|
QCOMPARE( gmlParser.processData( wrappedXml.toUtf8(), true ), true );
|
||||||
|
QCOMPARE( gmlParser.wkbType(), static_cast<Qgis::WkbType>( expectedWkbType ) );
|
||||||
|
QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures();
|
||||||
|
QCOMPARE( features.size(), 1 );
|
||||||
|
QVERIFY( features[0].first->hasGeometry() );
|
||||||
|
QCOMPARE( features[0].first->geometry().wkbType(), static_cast<Qgis::WkbType>( expectedWkbType ) );
|
||||||
|
QCOMPARE( features[0].first->geometry().asWkt().toUpper(), expectedWkt );
|
||||||
|
}
|
||||||
|
|
||||||
QGSTEST_MAIN( TestQgsGML )
|
QGSTEST_MAIN( TestQgsGML )
|
||||||
#include "testqgsgml.moc"
|
#include "testqgsgml.moc"
|
||||||
|
@ -54,8 +54,15 @@ class TestQgsOgcUtils : public QObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
void testGeometryFromGML();
|
void testGeometryFromGML();
|
||||||
|
|
||||||
|
void testGeometryFromGMLWithZ_data();
|
||||||
|
void testGeometryFromGMLWithZ();
|
||||||
|
|
||||||
void testGeometryToGML();
|
void testGeometryToGML();
|
||||||
|
|
||||||
|
void testGeometryZToGML();
|
||||||
|
void testGeometryZToGML_data();
|
||||||
|
|
||||||
void testExpressionFromOgcFilter();
|
void testExpressionFromOgcFilter();
|
||||||
void testExpressionFromOgcFilter_data();
|
void testExpressionFromOgcFilter_data();
|
||||||
|
|
||||||
@ -108,6 +115,82 @@ void TestQgsOgcUtils::testGeometryFromGML()
|
|||||||
geomBox = QgsOgcUtils::geometryFromGML( QStringLiteral( "<gml:Envelope srsName=\"foo\"><gml:lowerCorner>135.2239 34.4879</gml:lowerCorner><gml:upperCorner>135.8578 34.8471</gml:upperCorner></gml:Envelope>" ) );
|
geomBox = QgsOgcUtils::geometryFromGML( QStringLiteral( "<gml:Envelope srsName=\"foo\"><gml:lowerCorner>135.2239 34.4879</gml:lowerCorner><gml:upperCorner>135.8578 34.8471</gml:upperCorner></gml:Envelope>" ) );
|
||||||
QVERIFY( !geomBox.isNull() );
|
QVERIFY( !geomBox.isNull() );
|
||||||
QVERIFY( geomBox.wkbType() == Qgis::WkbType::Polygon );
|
QVERIFY( geomBox.wkbType() == Qgis::WkbType::Polygon );
|
||||||
|
|
||||||
|
// Test point GML3 Z
|
||||||
|
geom = QgsOgcUtils::geometryFromGML( QStringLiteral( "<gml:Point srsName=\"EPSG:4326\"><gml:pos srsDimension=\"3\">0 1 2</gml:pos></gml:Point>" ) );
|
||||||
|
QVERIFY( !geom.isNull() );
|
||||||
|
QVERIFY( geom.wkbType() == Qgis::WkbType::PointZ );
|
||||||
|
QVERIFY( geom.equals( QgsGeometry::fromWkt( QStringLiteral( "POINTZ(0 1 2)" ) ) ) );
|
||||||
|
|
||||||
|
// Test polygon GML3 Z
|
||||||
|
geom = QgsOgcUtils::geometryFromGML( QStringLiteral( R"GML(<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210 0 0 1200</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>)GML" ) );
|
||||||
|
QVERIFY( !geom.isNull() );
|
||||||
|
QVERIFY( geom.wkbType() == Qgis::WkbType::PolygonZ );
|
||||||
|
QVERIFY( geom.equals( QgsGeometry::fromWkt( QStringLiteral( "POLYGONZ((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210, 0 0 1200))" ) ) ) );
|
||||||
|
|
||||||
|
// Test linestring GML3 Z
|
||||||
|
geom = QgsOgcUtils::geometryFromGML( QStringLiteral( R"GML(<gml:LineString srsName="EPSG:4326"><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210</gml:posList></gml:LineString>)GML" ) );
|
||||||
|
QVERIFY( !geom.isNull() );
|
||||||
|
QVERIFY( geom.wkbType() == Qgis::WkbType::LineStringZ );
|
||||||
|
QVERIFY( geom.equals( QgsGeometry::fromWkt( QStringLiteral( "LINESTRINGZ(0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210)" ) ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsOgcUtils::testGeometryFromGMLWithZ_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>( "xmlText" );
|
||||||
|
QTest::addColumn<Qgis::WkbType>( "type" );
|
||||||
|
QTest::addColumn<QString>( "WKT" );
|
||||||
|
|
||||||
|
QTest::newRow( "PointZ" )
|
||||||
|
<< QStringLiteral( "<gml:Point srsName=\"EPSG:4326\"><gml:pos srsDimension=\"3\">0 1 2</gml:pos></gml:Point>" )
|
||||||
|
<< Qgis::WkbType::PointZ
|
||||||
|
<< QStringLiteral( "POINTZ( 0 1 2)" );
|
||||||
|
|
||||||
|
QTest::newRow( "LineStringZ" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:LineString srsName="EPSG:4326"><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210</gml:posList></gml:LineString>)GML" )
|
||||||
|
<< Qgis::WkbType::LineStringZ
|
||||||
|
<< QStringLiteral( "LINESTRINGZ(0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210)" );
|
||||||
|
|
||||||
|
QTest::newRow( "PolygonZ" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210 0 0 1200</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>)GML" )
|
||||||
|
<< Qgis::WkbType::PolygonZ
|
||||||
|
<< QStringLiteral( "POLYGONZ((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210, 0 0 1200))" );
|
||||||
|
|
||||||
|
// Test multipoint GML3 Z
|
||||||
|
QTest::newRow( "MultiPointZ" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:pos srsDimension="3">0 1 2</gml:pos></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:pos srsDimension="3">3 4 5</gml:pos></gml:Point></gml:pointMember></gml:MultiPoint>)GML" )
|
||||||
|
<< Qgis::WkbType::MultiPointZ
|
||||||
|
<< QStringLiteral( "MULTIPOINTZ((0 1 2), (3 4 5))" );
|
||||||
|
|
||||||
|
// Test multilinestring GML2 Z
|
||||||
|
QTest::newRow( "MultiLineStringZ GML2" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>0,0,1200 0,1,1250 1,1,1230 1,0,1210</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>2,2,2200 2,3,2250 3,3,2230 3,2,2210</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString>)GML" )
|
||||||
|
<< Qgis::WkbType::MultiLineStringZ
|
||||||
|
<< QStringLiteral( "MULTILINESTRINGZ((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210), (2 2 2200, 2 3 2250, 3 3 2230, 3 2 2210))" );
|
||||||
|
|
||||||
|
QTest::newRow( "MultiLineStringZ no curve" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:LineString><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210</gml:posList></gml:LineString></gml:curveMember><gml:curveMember><gml:LineString><gml:posList srsDimension="3">2 2 2200 2 3 2250 3 3 2230 3 2 2210</gml:posList></gml:LineString></gml:curveMember></gml:MultiCurve>)GML" )
|
||||||
|
<< Qgis::WkbType::MultiLineStringZ
|
||||||
|
<< QStringLiteral( "MULTILINESTRINGZ((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210), (2 2 2200, 2 3 2250, 3 3 2230, 3 2 2210))" );
|
||||||
|
|
||||||
|
// Test multilinestring GML3 Z
|
||||||
|
QTest::newRow( "MultiLineStringZ" )
|
||||||
|
<< QStringLiteral( R"GML(<gml:MultiCurve srsName="EPSG:4326"><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">0 0 1200 0 1 1250 1 1 1230 1 0 1210</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember><gml:curveMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="3">2 2 2200 2 3 2250 3 3 2230 3 2 2210</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:curveMember></gml:MultiCurve>)GML" )
|
||||||
|
<< Qgis::WkbType::MultiLineStringZ
|
||||||
|
<< QStringLiteral( "MULTILINESTRINGZ((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210), (2 2 2200, 2 3 2250, 3 3 2230, 3 2 2210))" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestQgsOgcUtils::testGeometryFromGMLWithZ()
|
||||||
|
{
|
||||||
|
QFETCH( QString, xmlText );
|
||||||
|
QFETCH( Qgis::WkbType, type );
|
||||||
|
QFETCH( QString, WKT );
|
||||||
|
|
||||||
|
QgsGeometry geom = QgsOgcUtils::geometryFromGML( xmlText );
|
||||||
|
QVERIFY( !geom.isNull() );
|
||||||
|
QCOMPARE( geom.wkbType(), type );
|
||||||
|
QVERIFY( geom.equals( QgsGeometry::fromWkt( WKT ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDomElement comparableElement( const QString &xmlText )
|
static QDomElement comparableElement( const QString &xmlText )
|
||||||
@ -174,6 +257,44 @@ void TestQgsOgcUtils::testGeometryToGML()
|
|||||||
doc.removeChild( elemLine );
|
doc.removeChild( elemLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestQgsOgcUtils::testGeometryZToGML_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>( "wkt" );
|
||||||
|
|
||||||
|
QTest::newRow( "PointZ" ) << QStringLiteral( "POINT Z(0 1 2)" );
|
||||||
|
QTest::newRow( "LineStringZ" ) << QStringLiteral( "LINESTRING Z(0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210)" );
|
||||||
|
QTest::newRow( "PolygonZ" ) << QStringLiteral( "POLYGON Z((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210, 0 0 1200))" );
|
||||||
|
|
||||||
|
// Multi
|
||||||
|
QTest::newRow( "MultiPointZ" ) << QStringLiteral( "MULTIPOINT Z((0 1 2), (3 4 5))" );
|
||||||
|
QTest::newRow( "MultiLineStringZ" ) << QStringLiteral( "MULTILINESTRING Z((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210), (2 2 2200, 2 3 2250, 3 3 2230, 3 2 2210))" );
|
||||||
|
QTest::newRow( "MultiPolygonZ" ) << QStringLiteral( "MULTIPOLYGON Z(((0 0 1200, 0 1 1250, 1 1 1230, 1 0 1210, 0 0 1200)), ((2 2 2200, 2 3 2250, 3 3 2230, 3 2 2210, 2 2 2200)))" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestQgsOgcUtils::testGeometryZToGML()
|
||||||
|
{
|
||||||
|
// Round trip test
|
||||||
|
|
||||||
|
QFETCH( QString, wkt );
|
||||||
|
|
||||||
|
const QgsGeometry geom( QgsGeometry::fromWkt( wkt ) );
|
||||||
|
|
||||||
|
QVERIFY( !geom.isNull() );
|
||||||
|
QVERIFY( QgsWkbTypes::hasZ( geom.wkbType() ) );
|
||||||
|
|
||||||
|
// Test GML3
|
||||||
|
QDomDocument doc;
|
||||||
|
QDomElement elem = QgsOgcUtils::geometryToGML( geom, doc, QStringLiteral( "GML3" ) );
|
||||||
|
QVERIFY( !elem.isNull() );
|
||||||
|
|
||||||
|
// Dump element to string
|
||||||
|
QString str;
|
||||||
|
QTextStream stream( &str );
|
||||||
|
elem.save( stream, 0 /*indent*/ );
|
||||||
|
|
||||||
|
QCOMPARE( QgsOgcUtils::geometryFromGML( str ).asWkt(), geom.asWkt() );
|
||||||
|
}
|
||||||
|
|
||||||
void TestQgsOgcUtils::testExpressionFromOgcFilterWFS20_data()
|
void TestQgsOgcUtils::testExpressionFromOgcFilterWFS20_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>( "xmlText" );
|
QTest::addColumn<QString>( "xmlText" );
|
||||||
@ -227,8 +348,8 @@ void TestQgsOgcUtils::testExpressionFromOgcFilterWFS20()
|
|||||||
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, QgsOgcUtils::FILTER_FES_2_0, &layer ) );
|
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, QgsOgcUtils::FILTER_FES_2_0, &layer ) );
|
||||||
QVERIFY( expr.get() );
|
QVERIFY( expr.get() );
|
||||||
|
|
||||||
qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
//qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
||||||
qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
//qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
||||||
|
|
||||||
if ( expr->hasParserError() )
|
if ( expr->hasParserError() )
|
||||||
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
||||||
@ -432,8 +553,8 @@ void TestQgsOgcUtils::testExpressionFromOgcFilter()
|
|||||||
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, &layer ) );
|
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, &layer ) );
|
||||||
QVERIFY( expr.get() );
|
QVERIFY( expr.get() );
|
||||||
|
|
||||||
qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
//qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
||||||
qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
//qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
||||||
|
|
||||||
if ( expr->hasParserError() )
|
if ( expr->hasParserError() )
|
||||||
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
||||||
@ -485,8 +606,8 @@ void TestQgsOgcUtils::testExpressionFromOgcFilterWithLongLong()
|
|||||||
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, &layer ) );
|
std::unique_ptr<QgsExpression> expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, &layer ) );
|
||||||
QVERIFY( expr.get() );
|
QVERIFY( expr.get() );
|
||||||
|
|
||||||
qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
//qDebug( "OGC XML : %s", xmlText.toLatin1().data() );
|
||||||
qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
//qDebug( "EXPR-DUMP: %s", expr->expression().toLatin1().data() );
|
||||||
|
|
||||||
if ( expr->hasParserError() )
|
if ( expr->hasParserError() )
|
||||||
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
qDebug( "ERROR: %s ", expr->parserErrorString().toLatin1().data() );
|
||||||
@ -514,8 +635,8 @@ void TestQgsOgcUtils::testExpressionToOgcFilter()
|
|||||||
|
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
|
|
||||||
qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
//qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
//qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
|
||||||
|
|
||||||
QDomElement xmlElem = comparableElement( xmlText );
|
QDomElement xmlElem = comparableElement( xmlText );
|
||||||
@ -702,9 +823,9 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS11()
|
|||||||
|
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
|
|
||||||
qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
//qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
||||||
qDebug( "SRSNAME: %s", srsName.toLatin1().data() );
|
//qDebug( "SRSNAME: %s", srsName.toLatin1().data() );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
//qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
|
||||||
|
|
||||||
QDomElement xmlElem = comparableElement( xmlText );
|
QDomElement xmlElem = comparableElement( xmlText );
|
||||||
@ -771,9 +892,9 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS20()
|
|||||||
|
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
|
|
||||||
qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
//qDebug( "EXPR: %s", exp.expression().toLatin1().data() );
|
||||||
qDebug( "SRSNAME: %s", srsName.toLatin1().data() );
|
//qDebug( "SRSNAME: %s", srsName.toLatin1().data() );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
//qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
|
||||||
QDomElement xmlElem = comparableElement( xmlText );
|
QDomElement xmlElem = comparableElement( xmlText );
|
||||||
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
||||||
@ -920,7 +1041,7 @@ void TestQgsOgcUtils::testSQLStatementToOgcFilter()
|
|||||||
const QgsSQLStatement statement( statementText );
|
const QgsSQLStatement statement( statementText );
|
||||||
if ( !statement.hasParserError() )
|
if ( !statement.hasParserError() )
|
||||||
{
|
{
|
||||||
qDebug( "%s", statement.parserErrorString().toLatin1().data() );
|
//qDebug( "%s", statement.parserErrorString().toLatin1().data() );
|
||||||
QVERIFY( !statement.hasParserError() );
|
QVERIFY( !statement.hasParserError() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -940,6 +1061,7 @@ void TestQgsOgcUtils::testSQLStatementToOgcFilter()
|
|||||||
|
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
|
|
||||||
|
#if 0
|
||||||
qDebug( "SQL: %s", statement.statement().toLatin1().data() );
|
qDebug( "SQL: %s", statement.statement().toLatin1().data() );
|
||||||
qDebug( "GML: %s", gmlVersion == QgsOgcUtils::GML_2_1_2 ? "2.1.2" : gmlVersion == QgsOgcUtils::GML_3_1_0 ? "3.1.0"
|
qDebug( "GML: %s", gmlVersion == QgsOgcUtils::GML_2_1_2 ? "2.1.2" : gmlVersion == QgsOgcUtils::GML_3_1_0 ? "3.1.0"
|
||||||
: gmlVersion == QgsOgcUtils::GML_3_2_1 ? "3.2.1"
|
: gmlVersion == QgsOgcUtils::GML_3_2_1 ? "3.2.1"
|
||||||
@ -948,6 +1070,7 @@ void TestQgsOgcUtils::testSQLStatementToOgcFilter()
|
|||||||
: filterVersion == QgsOgcUtils::FILTER_FES_2_0 ? "FES 2.0"
|
: filterVersion == QgsOgcUtils::FILTER_FES_2_0 ? "FES 2.0"
|
||||||
: "unknown" );
|
: "unknown" );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
#endif
|
||||||
|
|
||||||
QDomElement xmlElem = comparableElement( xmlText );
|
QDomElement xmlElem = comparableElement( xmlText );
|
||||||
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
||||||
@ -1245,7 +1368,7 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWithXPath()
|
|||||||
|
|
||||||
QDomElement xmlElem = comparableElement( QStringLiteral( "<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\"><fes:PropertyIsEqualTo><fes:ValueReference xmlns:otherns=\"https://otherns\" xmlns:myns=\"https://myns\">myns:foo/myns:bar/otherns:a</fes:ValueReference><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>" ) );
|
QDomElement xmlElem = comparableElement( QStringLiteral( "<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\"><fes:PropertyIsEqualTo><fes:ValueReference xmlns:otherns=\"https://otherns\" xmlns:myns=\"https://myns\">myns:foo/myns:bar/otherns:a</fes:ValueReference><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>" ) );
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
//qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
|
||||||
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
||||||
QVERIFY( QgsTestUtils::compareDomElements( xmlElem, ogcElem ) );
|
QVERIFY( QgsTestUtils::compareDomElements( xmlElem, ogcElem ) );
|
||||||
@ -1283,7 +1406,7 @@ void TestQgsOgcUtils::testSQLStatementToOgcFilterWithXPath()
|
|||||||
|
|
||||||
QDomElement xmlElem = comparableElement( QStringLiteral( "<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\"><fes:PropertyIsEqualTo><fes:ValueReference xmlns:otherns=\"https://otherns\" xmlns:myns=\"https://myns\">myns:foo/myns:bar/otherns:a</fes:ValueReference><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>" ) );
|
QDomElement xmlElem = comparableElement( QStringLiteral( "<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\"><fes:PropertyIsEqualTo><fes:ValueReference xmlns:otherns=\"https://otherns\" xmlns:myns=\"https://myns\">myns:foo/myns:bar/otherns:a</fes:ValueReference><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>" ) );
|
||||||
doc.appendChild( filterElem );
|
doc.appendChild( filterElem );
|
||||||
qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
//qDebug( "OGC : %s", doc.toString( -1 ).toLatin1().data() );
|
||||||
|
|
||||||
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
QDomElement ogcElem = comparableElement( doc.toString( -1 ) );
|
||||||
QVERIFY( QgsTestUtils::compareDomElements( xmlElem, ogcElem ) );
|
QVERIFY( QgsTestUtils::compareDomElements( xmlElem, ogcElem ) );
|
||||||
|
@ -1057,18 +1057,18 @@ void TestQgsOgrUtils::testOgrUtilsStoredStyle()
|
|||||||
|
|
||||||
symbol->setColor( QColor( 255, 0, 0 ) );
|
symbol->setColor( QColor( 255, 0, 0 ) );
|
||||||
renderer->setSymbol( symbol );
|
renderer->setSymbol( symbol );
|
||||||
vl.saveStyleToDatabase( "style1", "style1", false, QString(), error );
|
vl.saveStyleToDatabaseV2( "style1", "style1", false, QString(), error );
|
||||||
|
|
||||||
// Default
|
// Default
|
||||||
symbol = renderer->symbol()->clone();
|
symbol = renderer->symbol()->clone();
|
||||||
symbol->setColor( QColor( 0, 255, 0 ) );
|
symbol->setColor( QColor( 0, 255, 0 ) );
|
||||||
renderer->setSymbol( symbol );
|
renderer->setSymbol( symbol );
|
||||||
vl.saveStyleToDatabase( "style2", "style2", true, QString(), error );
|
vl.saveStyleToDatabaseV2( "style2", "style2", true, QString(), error );
|
||||||
|
|
||||||
symbol = renderer->symbol()->clone();
|
symbol = renderer->symbol()->clone();
|
||||||
symbol->setColor( QColor( 0, 0, 255 ) );
|
symbol->setColor( QColor( 0, 0, 255 ) );
|
||||||
renderer->setSymbol( symbol );
|
renderer->setSymbol( symbol );
|
||||||
vl.saveStyleToDatabase( "style3", "style3", false, QString(), error );
|
vl.saveStyleToDatabaseV2( "style3", "style3", false, QString(), error );
|
||||||
}
|
}
|
||||||
|
|
||||||
gdal::ogr_datasource_unique_ptr hDS( OGROpen( testFile.toUtf8().constData(), false, nullptr ) );
|
gdal::ogr_datasource_unique_ptr hDS( OGROpen( testFile.toUtf8().constData(), false, nullptr ) );
|
||||||
|
@ -322,6 +322,7 @@ void TestQgsTracer::testAddPointsOnIntersections()
|
|||||||
|
|
||||||
QgsTracer tracer;
|
QgsTracer tracer;
|
||||||
tracer.setLayers( QList<QgsVectorLayer *>() << vl );
|
tracer.setLayers( QList<QgsVectorLayer *>() << vl );
|
||||||
|
tracer.setAddPointsOnIntersectionsEnabled( false );
|
||||||
|
|
||||||
QgsPolylineXY points = tracer.findShortestPath( QgsPointXY( 0, 0 ), QgsPointXY( 10, 10 ) );
|
QgsPolylineXY points = tracer.findShortestPath( QgsPointXY( 0, 0 ), QgsPointXY( 10, 10 ) );
|
||||||
|
|
||||||
|
@ -147,6 +147,9 @@ class TestQgsAuthManager(QgisTestCase):
|
|||||||
|
|
||||||
def test_040_authorities(self):
|
def test_040_authorities(self):
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
self.skipTest("Broken test. See https://github.com/qgis/QGIS/issues/62373")
|
||||||
|
|
||||||
def rebuild_caches():
|
def rebuild_caches():
|
||||||
m = "Authorities cache could not be rebuilt"
|
m = "Authorities cache could not be rebuilt"
|
||||||
self.assertTrue(self.authm.rebuildCaCertsCache(), m)
|
self.assertTrue(self.authm.rebuildCaCertsCache(), m)
|
||||||
@ -660,6 +663,9 @@ class TestQgsAuthManager(QgisTestCase):
|
|||||||
def test_150_verify_keychain(self):
|
def test_150_verify_keychain(self):
|
||||||
"""Test the verify keychain function"""
|
"""Test the verify keychain function"""
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
self.skipTest("Broken test. See https://github.com/qgis/QGIS/issues/62373")
|
||||||
|
|
||||||
def testChain(path):
|
def testChain(path):
|
||||||
|
|
||||||
# Test that a chain with an untrusted CA is not valid
|
# Test that a chain with an untrusted CA is not valid
|
||||||
@ -736,6 +742,9 @@ class TestQgsAuthManager(QgisTestCase):
|
|||||||
def test_validate_pki_bundle(self):
|
def test_validate_pki_bundle(self):
|
||||||
"""Text the pki bundle validation"""
|
"""Text the pki bundle validation"""
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
self.skipTest("Broken test. See https://github.com/qgis/QGIS/issues/62373")
|
||||||
|
|
||||||
# Valid bundle:
|
# Valid bundle:
|
||||||
bundle = self.mkPEMBundle(
|
bundle = self.mkPEMBundle(
|
||||||
"fra_cert.pem", "fra_key.pem", "password", "chain_subissuer-issuer-root.pem"
|
"fra_cert.pem", "fra_key.pem", "password", "chain_subissuer-issuer-root.pem"
|
||||||
@ -927,6 +936,9 @@ class TestQgsAuthManager(QgisTestCase):
|
|||||||
def test_160_cert_viable(self):
|
def test_160_cert_viable(self):
|
||||||
"""Text the viability of a given certificate"""
|
"""Text the viability of a given certificate"""
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
self.skipTest("Broken test. See https://github.com/qgis/QGIS/issues/62373")
|
||||||
|
|
||||||
# null cert
|
# null cert
|
||||||
cert = QSslCertificate()
|
cert = QSslCertificate()
|
||||||
self.assertFalse(QgsAuthCertUtils.certIsCurrent(cert))
|
self.assertFalse(QgsAuthCertUtils.certIsCurrent(cert))
|
||||||
@ -956,6 +968,9 @@ class TestQgsAuthManager(QgisTestCase):
|
|||||||
def test_170_pki_key_encoding(self):
|
def test_170_pki_key_encoding(self):
|
||||||
"""Test that a DER/PEM RSA/DSA/EC keys can be opened whatever the extension is"""
|
"""Test that a DER/PEM RSA/DSA/EC keys can be opened whatever the extension is"""
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
self.skipTest("Broken test. See https://github.com/qgis/QGIS/issues/62373")
|
||||||
|
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
QgsAuthCertUtils.keyFromFile(PKIDATA + "/" + "ptolemy_key.pem").isNull()
|
QgsAuthCertUtils.keyFromFile(PKIDATA + "/" + "ptolemy_key.pem").isNull()
|
||||||
)
|
)
|
||||||
|
@ -4527,6 +4527,21 @@ class TestQgsGeometry(QgisTestCase):
|
|||||||
f"testReshape failed: mismatch Expected:\n{expWkt}\nGot:\n{wkt}\n",
|
f"testReshape failed: mismatch Expected:\n{expWkt}\nGot:\n{wkt}\n",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# test should not raise exception
|
||||||
|
expWkt = "Polygon ((0 0, 5 0, 5 2, 0 2, 0 0))"
|
||||||
|
g = QgsGeometry.fromWkt(expWkt)
|
||||||
|
self.assertEqual(
|
||||||
|
g.reshapeGeometry(
|
||||||
|
QgsLineString([QgsPoint(0, 0), QgsPoint(5, 0), QgsPoint(5, 2)])
|
||||||
|
),
|
||||||
|
QgsGeometry.OperationResult.NothingHappened,
|
||||||
|
)
|
||||||
|
wkt = g.asWkt()
|
||||||
|
self.assertTrue(
|
||||||
|
compareWkt(expWkt, wkt),
|
||||||
|
f"testReshape failed: mismatch Expected:\n{expWkt}\nGot:\n{wkt}\n",
|
||||||
|
)
|
||||||
|
|
||||||
def testConvertToMultiType(self):
|
def testConvertToMultiType(self):
|
||||||
"""Test converting geometries to multi type"""
|
"""Test converting geometries to multi type"""
|
||||||
point = QgsGeometry.fromWkt("Point (1 2)")
|
point = QgsGeometry.fromWkt("Point (1 2)")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user