examples/vp/Intersection.cpp
Go to the documentation of this file.
1 
2 #include "../Config.h"
3 #include <terralib/common.h>
4 #include <terralib/dataaccess.h>
5 //#include <terralib/vp/Intersection.h>
9 
10 // STL
11 #include <iostream>
12 
13 //ORG to OGR
15 {
16  std::string data_dir = TERRALIB_DATA_DIR;
17 
18  std::string filename1(data_dir + "shp/Intersection/rodovias.shp");
19 
20  std::string srcInfo1("file://" + filename1);
21 
23  srcDs1->open();
24 
25  std::string inDsetName1 = "rodovias";
26  if (!srcDs1->dataSetExists(inDsetName1))
27  {
28  std::cout << "Input dataset not found: " << inDsetName1 << std::endl;
29  return false;
30  }
31 
32  std::unique_ptr<te::da::DataSet> inDset1 = srcDs1->getDataSet(inDsetName1);
33  std::unique_ptr<te::da::DataSetType> inDsetType1 = srcDs1->getDataSetType(inDsetName1);
34 
35  std::string filename2(data_dir + "/shape/Intersection/SP_meso.shp");
36  std::string srcInfo2 ("file://" + srcInfo1);
37 
39  srcDs2->open();
40 
41  std::string inDsetName2 = "SP_meso";
42  if (!srcDs2->dataSetExists(inDsetName2))
43  {
44  std::cout << "Input dataset not found: " << inDsetName2 << std::endl;
45  return false;
46  }
47 
48  std::unique_ptr<te::da::DataSet> inDset2 = srcDs2->getDataSet(inDsetName2);
49  std::unique_ptr<te::da::DataSetType> inDsetType2 = srcDs2->getDataSetType(inDsetName2);
50 
51  std::vector<int> inSRID;
52 
53  std::string filenameResult(data_dir + "/shape/Intersection/intersectionOGR2OGR.shp");
54 
55  std::string tgrInfo("file://" + filenameResult);
56 
58  trgDs->open();
59 
60  std::string outDS = "intersectionOGR2OGR";
61 
62  if (trgDs->dataSetExists(outDS))
63  {
64  std::cout << "A dataset with the same requested output dataset name already exists: " << outDS << std::endl;
65  return false;
66  }
67 
68  std::unique_ptr<te::da::DataSetTypeConverter> firstConverter(new te::da::DataSetTypeConverter(inDsetType1.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
69  std::unique_ptr<te::da::DataSetTypeConverter> secondConverter(new te::da::DataSetTypeConverter(inDsetType2.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
70 
71  // sera feito por algum tipo de factory
72  te::vp::IntersectionOp* intersectionOp = new te::vp::IntersectionMemory();
73 
74  intersectionOp->setInput(srcDs1, inDsetName1, std::move(firstConverter), srcDs2, inDsetName2, std::move(secondConverter));
75  intersectionOp->setOutput(trgDs, outDS);
76 
77  bool result;
78 
79  if (!intersectionOp->paramsAreValid())
80  result = false;
81  else
82  result = intersectionOp->run();
83 
84  delete intersectionOp;
85 
86  return result;
87 }
88 
89 //OGR to Postgis
91 {
92  std::string data_dir = TERRALIB_DATA_DIR;
93 
94  std::string filename1(data_dir + "/shape/Intersection/rodovias.shp");
95  std::string srcInfo1 ("file://" + filename1);
96 
98  srcDs1->open();
99 
100  std::string inDsetName1 = "rodovias";
101  if (!srcDs1->dataSetExists(inDsetName1))
102  {
103  std::cout << "Input dataset not found: " << inDsetName1 << std::endl;
104  return false;
105  }
106 
107  std::unique_ptr<te::da::DataSet> inDset1 = srcDs1->getDataSet(inDsetName1);
108  std::unique_ptr<te::da::DataSetType> inDsetType1 = srcDs1->getDataSetType(inDsetName1);
109 
110 
111  std::string filename2(data_dir + "/shape/Intersection/SP_meso.shp");
112  std::string srcInfo2("file://" + filename2);
113 
115  srcDs2->open();
116 
117  std::string inDsetName2 = "SP_meso";
118  if (!srcDs2->dataSetExists(inDsetName2))
119  {
120  std::cout << "Input dataset not found: " << inDsetName2 << std::endl;
121  return false;
122  }
123 
124  std::unique_ptr<te::da::DataSet> inDset2 = srcDs2->getDataSet(inDsetName2);
125  std::unique_ptr<te::da::DataSetType> inDsetType2 = srcDs2->getDataSetType(inDsetName2);
126 
127  std::vector<int> inSRID;
128  std::string connInfo("ppgsql://postgres:postgres@atlas.dpi.inpe.br:5433/testPostGIS");
129 
130  te::da::DataSourcePtr trgDs(te::da::DataSourceFactory::make("POSTGIS", connInfo));
131  trgDs->open();
132 
133  std::string outDS = "intersectionOGR2PGIS";
134 
135  if (trgDs->dataSetExists(outDS))
136  {
137  std::cout << "A dataset with the same requested output dataset name already exists: " << outDS << std::endl;
138  return false;
139  }
140 
141  std::unique_ptr<te::da::DataSetTypeConverter> firstConverter(new te::da::DataSetTypeConverter(inDsetType1.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
142  std::unique_ptr<te::da::DataSetTypeConverter> secondConverter(new te::da::DataSetTypeConverter(inDsetType2.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
143 
144  // sera feito por algum tipo de factory
145  te::vp::IntersectionOp* intersectionOp = new te::vp::IntersectionMemory();
146 
147  intersectionOp->setInput(srcDs1, inDsetName1, std::move(firstConverter), srcDs2, inDsetName2, std::move(secondConverter));
148  intersectionOp->setOutput(trgDs, outDS);
149  //intersectionOp->setParams(copyInputColumns);
150 
151  bool result;
152 
153  if (!intersectionOp->paramsAreValid())
154  result = false;
155  else
156  result = intersectionOp->run();
157 
158  delete intersectionOp;
159 
160  return result;
161 }
162 
163 //Postgis to Postgis
165 {
166  std::string connInfo("ppgsql://postgres:postgres@atlas.dpi.inpe.br:5433/testPostGIS");
167  te::da::DataSourcePtr srcDs1(te::da::DataSourceFactory::make("POSTGIS", connInfo));
168  srcDs1->open();
169 
170  std::string inDsetName1 = "rodovias";
171  if (!srcDs1->dataSetExists(inDsetName1))
172  {
173  std::cout << "Input dataset not found: " << inDsetName1 << std::endl;
174  return false;
175  }
176 
177  std::unique_ptr<te::da::DataSet> inDset1 = srcDs1->getDataSet(inDsetName1);
178  std::unique_ptr<te::da::DataSetType> inDsetType1 = srcDs1->getDataSetType(inDsetName1);
179 
180  te::da::DataSourcePtr srcDs2(te::da::DataSourceFactory::make("POSTGIS", connInfo));
181  srcDs2->open();
182 
183  std::string inDsetName2 = "sp_nomemeso";
184  if (!srcDs2->dataSetExists(inDsetName2))
185  {
186  std::cout << "Input dataset not found: " << inDsetName2 << std::endl;
187  return false;
188  }
189 
190  std::unique_ptr<te::da::DataSet> inDset2 = srcDs2->getDataSet(inDsetName2);
191  std::unique_ptr<te::da::DataSetType> inDsetType2 = srcDs2->getDataSetType(inDsetName2);
192 
193  std::vector<int> inSRID;
194 
195  te::da::DataSourcePtr trgDs(te::da::DataSourceFactory::make("POSTGIS", connInfo));
196  trgDs->open();
197 
198  std::string outDS = "intersectionPGIS2PGIS";
199 
200  if (trgDs->dataSetExists(outDS))
201  {
202  std::cout << "A dataset with the same requested output dataset name already exists: " << outDS << std::endl;
203  return false;
204  }
205 
206  std::unique_ptr<te::da::DataSetTypeConverter> firstConverter(new te::da::DataSetTypeConverter(inDsetType1.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
207  std::unique_ptr<te::da::DataSetTypeConverter> secondConverter(new te::da::DataSetTypeConverter(inDsetType2.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
208 
209  // sera feito por algum tipo de factory
210  te::vp::IntersectionOp* intersectionOp = new te::vp::IntersectionMemory();
211 
212  intersectionOp->setInput(srcDs1, inDsetName1, std::move(firstConverter), srcDs2, inDsetName2, std::move(secondConverter));
213  intersectionOp->setOutput(trgDs, outDS);
214 
215  bool result;
216 
217  if (!intersectionOp->paramsAreValid())
218  result = false;
219  else
220  result = intersectionOp->run();
221 
222  delete intersectionOp;
223 
224  return result;
225 }
226 
227 //Postgis to OGR
229 {
230  std::string connInfo("ppgsql://postgres:postgres@atlas.dpi.inpe.br:5433/testPostGIS");
231 
232  te::da::DataSourcePtr srcDs1(te::da::DataSourceFactory::make("POSTGIS", connInfo));
233  srcDs1->open();
234 
235  std::string inDsetName1 = "rodovias";
236  if (!srcDs1->dataSetExists(inDsetName1))
237  {
238  std::cout << "Input dataset not found: " << inDsetName1 << std::endl;
239  return false;
240  }
241 
242  std::unique_ptr<te::da::DataSet> inDset1 = srcDs1->getDataSet(inDsetName1);
243  std::unique_ptr<te::da::DataSetType> inDsetType1 = srcDs1->getDataSetType(inDsetName1);
244 
245  te::da::DataSourcePtr srcDs2(te::da::DataSourceFactory::make("POSTGIS", connInfo));
246  srcDs2->open();
247 
248  std::string inDsetName2 = "sp_meso";
249  if (!srcDs2->dataSetExists(inDsetName2))
250  {
251  std::cout << "Input dataset not found: " << inDsetName2 << std::endl;
252  return false;
253  }
254 
255  std::unique_ptr<te::da::DataSet> inDset2 = srcDs2->getDataSet(inDsetName2);
256  std::unique_ptr<te::da::DataSetType> inDsetType2 = srcDs2->getDataSetType(inDsetName2);
257 
258  std::vector<int> inSRID;
259 
260  std::string outDSet = "intersectionPGIS2OGR";
261 
262  std::string data_dir = TERRALIB_DATA_DIR;
263 
264  std::string uriResult(data_dir + "/shape/Intersection/intersectionPGIS2OGR.shp");
265 
266  std::string tgrInfo ("file://" + uriResult);
267 
269  trgDs->open();
270 
271  if (trgDs->dataSetExists(outDSet))
272  {
273  std::cout << "A dataset with the same requested output dataset name already exists: " << outDSet << std::endl;
274  return false;
275  }
276 
277  std::unique_ptr<te::da::DataSetTypeConverter> firstConverter(new te::da::DataSetTypeConverter(inDsetType1.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
278  std::unique_ptr<te::da::DataSetTypeConverter> secondConverter(new te::da::DataSetTypeConverter(inDsetType2.get(), trgDs->getCapabilities(), trgDs->getEncoding()));
279 
280  // sera feito por algum tipo de factory
281  te::vp::IntersectionOp* intersectionOp = new te::vp::IntersectionQuery();
282 
283  intersectionOp->setInput(srcDs1, inDsetName1, std::move(firstConverter), srcDs2, inDsetName2, std::move(secondConverter));
284  intersectionOp->setOutput(trgDs, outDSet);
285  //intersectionOp->setParams(copyInputColumns);
286 
287  bool result;
288 
289  if (!intersectionOp->paramsAreValid())
290  result = false;
291  else
292  result = intersectionOp->run();
293 
294  delete intersectionOp;
295 
296  return result;
297 }
static std::unique_ptr< DataSource > make(const std::string &driver, const te::core::URI &connInfo)
boost::shared_ptr< DataSource > DataSourcePtr
Intersection Vector Processing functions.
void setInput(te::da::DataSourcePtr inFirstDsrc, std::string inFirstDsetName, std::unique_ptr< te::da::DataSetTypeConverter > firstConverter, te::da::DataSourcePtr inSecondDsrc, std::string inSecondDsetName, std::unique_ptr< te::da::DataSetTypeConverter > secondConverter, const te::da::ObjectIdSet *firstOidSet=0, const te::da::ObjectIdSet *secondOidSet=0)
virtual bool paramsAreValid()
An converter for DataSetType.
Intersection Vector Processing functions.
virtual bool run()=0
bool IntersectionOGRToOGR()
void setOutput(te::da::DataSourcePtr outDsrc, std::string dsname)
Intersection operation.
bool IntersectionOGRToPGIS()
bool IntersectionPGISToOGR()
This file contains include headers for the TerraLib Common Runtime module.
This file contains include headers for the Data Access module of TerraLib.
bool IntersectionPGISToPGIS()