From fb8e6dab20a5afc9ca23e3e42f8b605250745dc7 Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Tue, 19 Mar 2019 14:40:45 +0100 Subject: [PATCH] GeometryBuffer: add removeLastPoint (#702) --- .../source/geojson/GeoJsonTileDecoder.java | 7 +--- .../source/overpass/OverpassTileDecoder.java | 7 +--- .../tiling/source/geojson/TileDecoder.java | 7 +--- .../org/oscim/core/GeometryBufferTest.java | 35 +++++++++++++++++++ vtm/src/org/oscim/core/GeometryBuffer.java | 10 ++++++ 5 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 vtm-tests/test/org/oscim/core/GeometryBufferTest.java diff --git a/vtm-extras/src/org/oscim/tiling/source/geojson/GeoJsonTileDecoder.java b/vtm-extras/src/org/oscim/tiling/source/geojson/GeoJsonTileDecoder.java index e7e40082..4f2fda4d 100644 --- a/vtm-extras/src/org/oscim/tiling/source/geojson/GeoJsonTileDecoder.java +++ b/vtm-extras/src/org/oscim/tiling/source/geojson/GeoJsonTileDecoder.java @@ -259,7 +259,7 @@ public class GeoJsonTileDecoder implements ITileDecoder { ring++; parseCoordSequence(jp); - removeLastPoint(); + mMapElement.removeLastPoint(); continue; } @@ -268,11 +268,6 @@ public class GeoJsonTileDecoder implements ITileDecoder { } } - private void removeLastPoint() { - mMapElement.pointNextPos -= 2; - mMapElement.index[mMapElement.indexCurrentPos] -= 2; - } - private void parseLineString(JsonParser jp) throws JsonParseException, IOException { mMapElement.startLine(); diff --git a/vtm-extras/src/org/oscim/tiling/source/overpass/OverpassTileDecoder.java b/vtm-extras/src/org/oscim/tiling/source/overpass/OverpassTileDecoder.java index 40283025..1baba026 100644 --- a/vtm-extras/src/org/oscim/tiling/source/overpass/OverpassTileDecoder.java +++ b/vtm-extras/src/org/oscim/tiling/source/overpass/OverpassTileDecoder.java @@ -127,15 +127,10 @@ public class OverpassTileDecoder implements ITileDecoder { //ring++; parseCoordSequence(element); - removeLastPoint(); + mMapElement.removeLastPoint(); //} } - private void removeLastPoint() { - mMapElement.pointNextPos -= 2; - mMapElement.index[mMapElement.indexCurrentPos] -= 2; - } - private void parseLine(OsmWay element) { mMapElement.startLine(); parseCoordSequence(element); diff --git a/vtm-json/src/org/oscim/tiling/source/geojson/TileDecoder.java b/vtm-json/src/org/oscim/tiling/source/geojson/TileDecoder.java index 25289f55..9b94f350 100644 --- a/vtm-json/src/org/oscim/tiling/source/geojson/TileDecoder.java +++ b/vtm-json/src/org/oscim/tiling/source/geojson/TileDecoder.java @@ -256,7 +256,7 @@ public class TileDecoder implements ITileDecoder { ring++; parseCoordSequence(jp); - removeLastPoint(); + mMapElement.removeLastPoint(); continue; } @@ -265,11 +265,6 @@ public class TileDecoder implements ITileDecoder { } } - private void removeLastPoint() { - mMapElement.pointNextPos -= 2; - mMapElement.index[mMapElement.indexCurrentPos] -= 2; - } - private void parseLineString(JsonParser jp) throws IOException { mMapElement.startLine(); parseCoordSequence(jp); diff --git a/vtm-tests/test/org/oscim/core/GeometryBufferTest.java b/vtm-tests/test/org/oscim/core/GeometryBufferTest.java new file mode 100644 index 00000000..ebf3cb8a --- /dev/null +++ b/vtm-tests/test/org/oscim/core/GeometryBufferTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2019 Gustl22 + * + * This program 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 3 of the License, or (at your option) any later version. + * + * This program 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 program. If not, see . + */ +package org.oscim.core; + +import org.junit.Assert; +import org.junit.Test; + +public class GeometryBufferTest { + + @Test + public void removeLastPointPolyTest() { + GeometryBuffer buffer = new GeometryBuffer(4, 1); + buffer.startPolygon(); + buffer.addPoint(0, 0); + buffer.addPoint(10, 0); + buffer.addPoint(10, 10); + buffer.addPoint(0, 10); + + buffer.removeLastPoint(); + System.out.println(buffer.toString()); + Assert.assertEquals(buffer.getNumPoints(), 3); + } +} diff --git a/vtm/src/org/oscim/core/GeometryBuffer.java b/vtm/src/org/oscim/core/GeometryBuffer.java index 3e1ebf1f..0a5f63f1 100644 --- a/vtm/src/org/oscim/core/GeometryBuffer.java +++ b/vtm/src/org/oscim/core/GeometryBuffer.java @@ -468,6 +468,16 @@ public class GeometryBuffer { return GeometryUtils.isClockwise(points, index[0]); } + /** + * Remove the last point. + */ + public void removeLastPoint() { + if (!isTris()) { + pointNextPos -= 2; + index[indexCurrentPos] -= 2; + } + } + /** * Reverse the order of points for lines and polygons. */