Skip to content

v0.2.52..v0.2.53 changeset PoiPolygonDistanceExtractor.cpp

Garret Voltz edited this page Feb 12, 2020 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/poi-polygon/PoiPolygonDistanceExtractor.cpp b/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/poi-polygon/PoiPolygonDistanceExtractor.cpp
index ef52316..52f183d 100644
--- a/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/poi-polygon/PoiPolygonDistanceExtractor.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/poi-polygon/PoiPolygonDistanceExtractor.cpp
@@ -22,18 +22,17 @@
  * This will properly maintain the copyright information. DigitalGlobe
  * copyrights will be updated automatically.
  *
- * @copyright Copyright (C) 2016, 2017, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2016, 2017, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
  */
 #include "PoiPolygonDistanceExtractor.h"
 
 // hoot
-#include <hoot/core/elements/ElementConverter.h>
+//#include <hoot/core/elements/ElementConverter.h>
 #include <hoot/core/util/Factory.h>
 #include <hoot/core/util/Log.h>
 
 // geos
 #include <geos/util/TopologyException.h>
-#include <geos/geom/Geometry.h>
 
 using namespace geos::geom;
 
@@ -42,26 +41,28 @@ namespace hoot
 
 HOOT_FACTORY_REGISTER(FeatureExtractor, PoiPolygonDistanceExtractor)
 
-PoiPolygonDistanceExtractor::PoiPolygonDistanceExtractor()
+PoiPolygonDistanceExtractor::PoiPolygonDistanceExtractor(PoiPolygonInfoCachePtr infoCache) :
+_infoCache(infoCache)
 {
 }
 
-double PoiPolygonDistanceExtractor::extract(const OsmMap& map, const ConstElementPtr& poi,
+double PoiPolygonDistanceExtractor::extract(const OsmMap& /*map*/, const ConstElementPtr& poi,
                                             const ConstElementPtr& poly) const
 {
+  if (!_infoCache)
+  {
+    throw HootException("No cache passed to extractor.");
+  }
+
   try
   {
+    LOG_VART(poi->getElementId());
+    LOG_VART(poly->getElementId());
+
     //to suppress the ElementConverter poly warnings...warnings worth looking into at some point
     DisableLog dl(Log::Warn);
 
-    ElementConverter elementConverter(map.shared_from_this());
-    std::shared_ptr<Geometry> polyGeom = elementConverter.convertToGeometry(poly);
-    if (QString::fromStdString(polyGeom->toString()).toUpper().contains("EMPTY"))
-    {
-      throw geos::util::TopologyException();
-    }
-    std::shared_ptr<Geometry> poiGeom = elementConverter.convertToGeometry(poi);
-    return polyGeom->distance(poiGeom.get());
+    return _infoCache->getDistance(poly, poi);
   }
   catch (const geos::util::TopologyException& e)
   {
Clone this wiki locally