IntersectionOp.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file IntersectionOp.cpp
22  */
23 #include "../dataaccess/dataset/DataSetType.h"
24 #include "../dataaccess/dataset/DataSetTypeConverter.h"
25 #include "../dataaccess/datasource/DataSource.h"
26 #include "../dataaccess/datasource/DataSourceCapabilities.h"
27 #include "../dataaccess/utils/Utils.h"
28 
29 #include "../datatype/Property.h"
30 #include "../datatype/StringProperty.h"
31 
32 #include "../geometry/GeometryProperty.h"
33 
34 #include "../statistics/core/Utils.h"
35 
36 #include "IntersectionOp.h"
37 
39  : m_firstOidSet(0),
40  m_secondOidSet(0),
41  m_copyInputColumns(false)
42 {
43 }
44 
46  std::string inFirstDsetName,
47  std::auto_ptr<te::da::DataSetTypeConverter> firstConverter,
48  te::da::DataSourcePtr inSecondDsrc,
49  std::string inSecondDsetName,
50  std::auto_ptr<te::da::DataSetTypeConverter> secondConverter,
51  const te::da::ObjectIdSet* firstOidSet,
52  const te::da::ObjectIdSet* secondOidSet)
53 {
54  m_inFirstDsrc = inFirstDsrc;
55  m_inFirstDsetName = inFirstDsetName;
56  m_firstConverter = firstConverter;
57  m_inSecondDsrc = inSecondDsrc;
58  m_inSecondDsetName = inSecondDsetName;
59  m_secondConverter = secondConverter;
60 
61  m_firstOidSet = firstOidSet;
62  m_secondOidSet = secondOidSet;
63 }
64 
65 void te::vp::IntersectionOp::setParams( const bool& copyInputColumns)
66 {
67  m_copyInputColumns = copyInputColumns;
68 }
69 
71 {
72  m_outDsrc = outDsrc;
73  m_outDsetName = dsname;
74 }
75 
77 {
78  if ((firstGeom == te::gm::PointType) ||
79  (firstGeom == te::gm::PointZType) ||
80  (firstGeom == te::gm::PointMType) ||
81  (firstGeom == te::gm::PointZMType) ||
82  (firstGeom == te::gm::PointKdType) ||
83 
84  (secondGeom == te::gm::PointType) ||
85  (secondGeom == te::gm::PointZType) ||
86  (secondGeom == te::gm::PointMType) ||
87  (secondGeom == te::gm::PointZMType) ||
88  (secondGeom == te::gm::PointKdType) ||
89 
90  (firstGeom == te::gm::MultiPointType) ||
91  (firstGeom == te::gm::MultiPointZType) ||
92  (firstGeom == te::gm::MultiPointMType) ||
93  (firstGeom == te::gm::MultiPointZMType) ||
94 
95  (secondGeom == te::gm::MultiPointType) ||
96  (secondGeom == te::gm::MultiPointZType) ||
97  (secondGeom == te::gm::MultiPointMType) ||
98  (secondGeom == te::gm::MultiPointZMType))
99 
100  return te::gm::MultiPointType;
101 
102  else if ((firstGeom == te::gm::LineStringType) ||
103  (firstGeom == te::gm::LineStringZType) ||
104  (firstGeom == te::gm::LineStringMType) ||
105  (firstGeom == te::gm::LineStringZMType) ||
106 
107  (secondGeom == te::gm::LineStringType) ||
108  (secondGeom == te::gm::LineStringZType) ||
109  (secondGeom == te::gm::LineStringMType) ||
110  (secondGeom == te::gm::LineStringZMType) ||
111 
112  (firstGeom == te::gm::MultiLineStringType) ||
113  (firstGeom == te::gm::MultiLineStringZType) ||
114  (firstGeom == te::gm::MultiLineStringMType) ||
115  (firstGeom == te::gm::MultiLineStringZMType) ||
116 
117  (secondGeom == te::gm::MultiLineStringType) ||
118  (secondGeom == te::gm::MultiLineStringZType) ||
119  (secondGeom == te::gm::MultiLineStringMType) ||
120  (secondGeom == te::gm::MultiLineStringZMType))
121 
123 
124  else
126 }
127 
129 {
130  if (!m_firstConverter->getResult())
131  return false;
132 
133  if (!m_firstConverter->getResult()->hasGeom())
134  return false;
135 
136  if (!m_secondConverter->getResult())
137  return false;
138 
139  if (!m_secondConverter->getResult()->hasGeom())
140  return false;
141 
142  if (m_outDsetName.empty() || !m_outDsrc.get())
143  return false;
144 
145  return true;
146 }
147 
148 std::vector<te::dt::Property*> te::vp::IntersectionOp::getTabularProps(te::da::DataSetType* dsType)
149 {
150  std::vector<te::dt::Property*> props;
151  te::dt::Property* prop;
152 
153  for(std::size_t i = 0; i < dsType->getProperties().size(); ++i)
154  {
155  prop = dsType->getProperty(i);
156 
157  if(prop->getType() != te::dt::GEOMETRY_TYPE && prop->getType() != te::dt::NUMERIC_TYPE)
158  {
159  props.push_back(prop);
160  }
161  }
162 
163  return props;
164 }
165 
166 
std::vector< te::dt::Property * > getTabularProps(te::da::DataSetType *dsType)
Property * getProperty(std::size_t i) const
It returns the i-th property.
GeomType
Each enumerated type is compatible with a Well-known Binary (WKB) type code.
Definition: Enums.h:41
boost::shared_ptr< DataSource > DataSourcePtr
Definition: DataSource.h:1435
A class that models the description of a dataset.
Definition: DataSetType.h:72
virtual bool paramsAreValid()
It models a property definition.
Definition: Property.h:59
const std::vector< Property * > & getProperties() const
It returns the list of properties describing the CompositeProperty.
This class represents a set of unique ids created in the same context. i.e. from the same data set...
Definition: ObjectIdSet.h:55
void setOutput(te::da::DataSourcePtr outDsrc, std::string dsname)
Intersection operation.
void setInput(te::da::DataSourcePtr inFirstDsrc, std::string inFirstDsetName, std::auto_ptr< te::da::DataSetTypeConverter > firstConverter, te::da::DataSourcePtr inSecondDsrc, std::string inSecondDsetName, std::auto_ptr< te::da::DataSetTypeConverter > secondConverter, const te::da::ObjectIdSet *firstOidSet=0, const te::da::ObjectIdSet *secondOidSet=0)
int getType() const
It returns the property data type.
Definition: Property.h:161
void setParams(const bool &copyInputColumns)
te::gm::GeomType setGeomResultType(te::gm::GeomType firstGeom, te::gm::GeomType secondGeom)