File: vtkGeoJSONFeature.h

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (130 lines) | stat: -rw-r--r-- 4,029 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
 * @class   vtkGeoJSONFeature
 * @brief   Represents GeoJSON feature geometry & properties
 *
 * This class is used by the vtkGeoJSONReader when parsing GeoJSON input.
 * It is not intended to be instantiated by applications directly.
 */

#ifndef vtkGeoJSONFeature_h
#define vtkGeoJSONFeature_h

// VTK Includes
#include "vtkDataObject.h"
#include "vtkIOGeoJSONModule.h" // For export macro
#include "vtk_jsoncpp.h"        // For json parser

VTK_ABI_NAMESPACE_BEGIN
class vtkPolyData;

// Currently implemented geoJSON compatible Geometries
#define GeoJSON_POINT "Point"
#define GeoJSON_MULTI_POINT "MultiPoint"
#define GeoJSON_LINE_STRING "LineString"
#define GeoJSON_MULTI_LINE_STRING "MultiLineString"
#define GeoJSON_POLYGON "Polygon"
#define GeoJSON_MULTI_POLYGON "MultiPolygon"
#define GeoJSON_GEOMETRY_COLLECTION "GeometryCollection"

class VTKIOGEOJSON_EXPORT vtkGeoJSONFeature : public vtkDataObject
{
public:
  static vtkGeoJSONFeature* New();
  void PrintSelf(ostream& os, vtkIndent indent) override;
  vtkTypeMacro(vtkGeoJSONFeature, vtkDataObject);

  /**
   * Returns `VTK_GEO_JSON_FEATURE`.
   */
  int GetDataObjectType() override { return VTK_GEO_JSON_FEATURE; }

  ///@{
  /**
   * Set/get option to generate the border outlining each polygon,
   * so that resulting cells are vtkPolyLine instead of vtkPolygon.
   * The default is off
   */
  vtkSetMacro(OutlinePolygons, bool);
  vtkGetMacro(OutlinePolygons, bool);
  vtkBooleanMacro(OutlinePolygons, bool);
  ///@}

  /**
   * Extract the geometry corresponding to the geoJSON feature stored at root
   * Assign any feature properties passed as cell data
   */
  void ExtractGeoJSONFeature(const Json::Value& root, vtkPolyData* outputData);

protected:
  vtkGeoJSONFeature();
  ~vtkGeoJSONFeature() override;

  /**
   * Json::Value featureRoot corresponds to the root of the geoJSON feature
   * from which the geometry and properties are to be extracted
   */
  Json::Value featureRoot;

  /**
   * Id of current GeoJSON feature being parsed
   */
  char* FeatureId;

  /**
   * Set/get option to generate the border outlining each polygon,
   * so that the output cells are polyine data.
   */
  bool OutlinePolygons;

  /**
   * Extract geoJSON geometry into vtkPolyData *
   */
  void ExtractGeoJSONFeatureGeometry(const Json::Value& root, vtkPolyData* outputData);

  ///@{
  /**
   * In extractXXXX() Extract geoJSON geometries XXXX into outputData
   */
  vtkPolyData* ExtractPoint(const Json::Value& coordinates, vtkPolyData* outputData);
  vtkPolyData* ExtractLineString(const Json::Value& coordinates, vtkPolyData* outputData);
  vtkPolyData* ExtractPolygon(const Json::Value& coordinates, vtkPolyData* outputData);
  ///@}

  ///@{
  /**
   * extractMultiXXXX extracts an array of geometries XXXX into the outputData
   */
  vtkPolyData* ExtractMultiPoint(const Json::Value& coordinates, vtkPolyData* outputData);
  vtkPolyData* ExtractMultiLineString(const Json::Value& coordinates, vtkPolyData* outputData);
  vtkPolyData* ExtractMultiPolygon(const Json::Value& coordinates, vtkPolyData* outputData);
  ///@}

  ///@{
  /**
   * Check if the root contains corresponding appropriate geometry in the
   * Jsoncpp root
   */
  bool IsPoint(const Json::Value& root);
  bool IsMultiPoint(const Json::Value& root);
  bool IsLineString(const Json::Value& root);      // To Do.
  bool IsMultiLineString(const Json::Value& root); // To Do.
  bool IsPolygon(const Json::Value& root);         // To Do.
  bool IsMultiPolygon(const Json::Value& root);    // To Do.
  ///@}

  /**
   * Point[] from its JSON equivalent
   */
  bool CreatePoint(const Json::Value& coordinates, double point[3]);

  void InsertFeatureProperties(vtkPolyData* outputData);

private:
  vtkGeoJSONFeature(const vtkGeoJSONFeature&) = delete;
  void operator=(const vtkGeoJSONFeature&) = delete;
};

VTK_ABI_NAMESPACE_END
#endif // vtkGeoJSONFeature_h