QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ShapeFileHelper.cc
Go to the documentation of this file.
1#include "ShapeFileHelper.h"
2#include "KMLHelper.h"
3#include "SHPFileHelper.h"
5
6QGC_LOGGING_CATEGORY(ShapeFileHelperLog, "Utilities.ShapeFileHelper")
7
8namespace {
9 constexpr const char *_errorPrefix = QT_TR_NOOP("Shape file load failed. %1");
10}
11
12ShapeFileHelper::ShapeFileType ShapeFileHelper::_getShapeFileType(const QString &file, QString &errorString)
13{
14 errorString.clear();
15
16 if (file.endsWith(kmlFileExtension, Qt::CaseInsensitive)) {
17 return ShapeFileType::KML;
18 } else if (file.endsWith(shpFileExtension, Qt::CaseInsensitive)) {
19 return ShapeFileType::SHP;
20 } else {
21 // Strip leading dots for user-friendly error message
22 const QString kmlExt = QString(kmlFileExtension).mid(1);
23 const QString shpExt = QString(shpFileExtension).mid(1);
24 errorString = QString(_errorPrefix).arg(tr("Unsupported file type. Only %1 and %2 are supported.").arg(kmlExt, shpExt));
25 }
26
27 return ShapeFileType::None;
28}
29
30ShapeFileHelper::ShapeType ShapeFileHelper::determineShapeType(const QString &file, QString &errorString)
31{
32 errorString.clear();
33
34 switch (_getShapeFileType(file, errorString)) {
35 case ShapeFileType::KML:
37 case ShapeFileType::SHP:
39 case ShapeFileType::None:
40 default:
41 return ShapeType::Error;
42 }
43}
44
45int ShapeFileHelper::getEntityCount(const QString &file, QString &errorString)
46{
47 errorString.clear();
48
49 switch (_getShapeFileType(file, errorString)) {
50 case ShapeFileType::KML:
52 case ShapeFileType::SHP:
54 case ShapeFileType::None:
55 default:
56 return 0;
57 }
58}
59
60bool ShapeFileHelper::loadPolygonsFromFile(const QString &file, QList<QList<QGeoCoordinate>> &polygons, QString &errorString, double filterMeters)
61{
62 errorString.clear();
63 polygons.clear();
64
65 switch (_getShapeFileType(file, errorString)) {
66 case ShapeFileType::KML:
67 return KMLHelper::loadPolygonsFromFile(file, polygons, errorString, filterMeters);
68 case ShapeFileType::SHP:
69 return SHPFileHelper::loadPolygonsFromFile(file, polygons, errorString, filterMeters);
70 case ShapeFileType::None:
71 default:
72 return false;
73 }
74}
75
76bool ShapeFileHelper::loadPolylinesFromFile(const QString &file, QList<QList<QGeoCoordinate>> &polylines, QString &errorString, double filterMeters)
77{
78 errorString.clear();
79 polylines.clear();
80
81 switch (_getShapeFileType(file, errorString)) {
82 case ShapeFileType::KML:
83 return KMLHelper::loadPolylinesFromFile(file, polylines, errorString, filterMeters);
84 case ShapeFileType::SHP:
85 return SHPFileHelper::loadPolylinesFromFile(file, polylines, errorString, filterMeters);
86 case ShapeFileType::None:
87 default:
88 return false;
89 }
90}
91
92bool ShapeFileHelper::loadPointsFromFile(const QString &file, QList<QGeoCoordinate> &points, QString &errorString)
93{
94 errorString.clear();
95 points.clear();
96
97 switch (_getShapeFileType(file, errorString)) {
98 case ShapeFileType::KML:
99 return KMLHelper::loadPointsFromFile(file, points, errorString);
100 case ShapeFileType::SHP:
102 case ShapeFileType::None:
103 default:
104 return false;
105 }
106}
107
108QStringList ShapeFileHelper::fileDialogKMLFilters()
109{
110 static const QStringList filters = QStringList(tr("KML Files (*%1)").arg(kmlFileExtension));
111 return filters;
112}
113
114QStringList ShapeFileHelper::fileDialogKMLOrSHPFilters()
115{
116 static const QStringList filters = QStringList(tr("KML/SHP Files (*%1 *%2)").arg(kmlFileExtension, shpFileExtension));
117 return filters;
118}
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
constexpr const char * _errorPrefix
ShapeFileHelper::ShapeType determineShapeType(const QString &file, QString &errorString)
Definition KMLHelper.cc:133
bool loadPolygonsFromFile(const QString &kmlFile, QList< QList< QGeoCoordinate > > &polygons, QString &errorString, double filterMeters=ShapeFileHelper::kDefaultVertexFilterMeters)
Definition KMLHelper.cc:175
bool loadPointsFromFile(const QString &kmlFile, QList< QGeoCoordinate > &points, QString &errorString)
Load all point entities.
Definition KMLHelper.cc:298
bool loadPolylinesFromFile(const QString &kmlFile, QList< QList< QGeoCoordinate > > &polylines, QString &errorString, double filterMeters=ShapeFileHelper::kDefaultVertexFilterMeters)
Definition KMLHelper.cc:245
int getEntityCount(const QString &kmlFile, QString &errorString)
Get the number of geometry entities in the KML file.
Definition KMLHelper.cc:161
ShapeFileHelper::ShapeType determineShapeType(const QString &file, QString &errorString)
bool loadPointsFromFile(const QString &shpFile, QList< QGeoCoordinate > &points, QString &errorString)
Load all point entities.
int getEntityCount(const QString &shpFile, QString &errorString)
Get the number of entities in the shapefile.
bool loadPolygonsFromFile(const QString &shpFile, QList< QList< QGeoCoordinate > > &polygons, QString &errorString, double filterMeters=ShapeFileHelper::kDefaultVertexFilterMeters)
bool loadPolylinesFromFile(const QString &shpFile, QList< QList< QGeoCoordinate > > &polylines, QString &errorString, double filterMeters=ShapeFileHelper::kDefaultVertexFilterMeters)