From 2e0486440c57de306353f5554df82d001c184134 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 24 Sep 2015 11:37:27 +0100 Subject: [PATCH] remove shp_index.hpp and update shape.input --- .../input/shape/shape_index_featureset.cpp | 22 ++-- plugins/input/shape/shp_index.hpp | 103 ------------------ 2 files changed, 9 insertions(+), 116 deletions(-) delete mode 100644 plugins/input/shape/shp_index.hpp diff --git a/plugins/input/shape/shape_index_featureset.cpp b/plugins/input/shape/shape_index_featureset.cpp index fdd75137c..efc698702 100644 --- a/plugins/input/shape/shape_index_featureset.cpp +++ b/plugins/input/shape/shape_index_featureset.cpp @@ -36,10 +36,9 @@ #include #endif #pragma GCC diagnostic pop - #include "shape_index_featureset.hpp" #include "shape_utils.hpp" -#include "shp_index.hpp" +#include using mapnik::feature_factory; @@ -52,11 +51,11 @@ shape_index_featureset::shape_index_featureset(filterT const& filter, int row_limit) : filter_(filter), ctx_(std::make_shared()), - shape_ptr_(std::move(shape_ptr)), - tr_(new mapnik::transcoder(encoding)), - row_limit_(row_limit), - count_(0), - feature_bbox_() + shape_ptr_(std::move(shape_ptr)), + tr_(new mapnik::transcoder(encoding)), + row_limit_(row_limit), + count_(0), + feature_bbox_() { shape_ptr_->shp().skip(100); setup_attributes(ctx_, attribute_names, shape_name, *shape_ptr_,attr_ids_); @@ -65,17 +64,14 @@ shape_index_featureset::shape_index_featureset(filterT const& filter, if (index) { #ifdef SHAPE_MEMORY_MAPPED_FILE - //shp_index >::query(filter, index->file(), offsets_); - shp_index::query(filter, index->file(), offsets_); + //spatial_index >::query(filter, index->file(), offsets_); + mapnik::util::spatial_index::query(filter, index->file(), offsets_); #else - shp_index::query(filter, index->file(), offsets_); + mapnik::util::spatial_index::query(filter, index->file(), offsets_); #endif } - std::sort(offsets_.begin(), offsets_.end()); - MAPNIK_LOG_DEBUG(shape) << "shape_index_featureset: Query size=" << offsets_.size(); - itr_ = offsets_.begin(); } diff --git a/plugins/input/shape/shp_index.hpp b/plugins/input/shape/shp_index.hpp deleted file mode 100644 index 6c32305b8..000000000 --- a/plugins/input/shape/shp_index.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/***************************************************************************** - * - * This file is part of Mapnik (c++ mapping toolkit) - * - * Copyright (C) 2015 Artem Pavlenko - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - *****************************************************************************/ - -#ifndef SHP_INDEX_HPP -#define SHP_INDEX_HPP - -// stl -#include -#include - -// mapnik -#include -#include - -using mapnik::box2d; -using mapnik::query; - -template -class shp_index -{ -public: - static void query(filterT const& filter, IStream& file,std::vector& pos); -private: - shp_index(); - ~shp_index(); - shp_index(const shp_index&); - shp_index& operator=(const shp_index&); - static int read_ndr_integer(IStream& in); - static void read_envelope(IStream& in, box2d& envelope); - static void query_node(const filterT& filter, IStream& in, std::vector& pos); -}; - -template -void shp_index::query(const filterT& filter, IStream& file, std::vector& pos) -{ - file.seekg(16, std::ios::beg); - query_node(filter, file, pos); -} - -template -void shp_index::query_node(const filterT& filter, IStream& file, std::vector& ids) -{ - int offset = read_ndr_integer(file); - - box2d node_ext; - read_envelope(file, node_ext); - - int num_shapes = read_ndr_integer(file); - - if (! filter.pass(node_ext)) - { - file.seekg(offset + num_shapes * 4 + 4, std::ios::cur); - return; - } - - for (int i = 0; i < num_shapes; ++i) - { - int id = read_ndr_integer(file); - ids.push_back(id); - } - - int children = read_ndr_integer(file); - - for (int j = 0; j < children; ++j) - { - query_node(filter, file, ids); - } -} - -template -int shp_index::read_ndr_integer(IStream& file) -{ - char b[4]; - file.read(b, 4); - return (b[0] & 0xff) | (b[1] & 0xff) << 8 | (b[2] & 0xff) << 16 | (b[3] & 0xff) << 24; -} - -template -void shp_index::read_envelope(IStream& file, box2d& envelope) -{ - file.read(reinterpret_cast(&envelope), sizeof(envelope)); -} - -#endif // SHP_INDEX_HPP