2014-12-26 2 views
0

OSM 경로 데이터에서 생성 된 모양 파일을 줄이려고합니다. VTS에서 DouglasPeuckerSimplifier 구현을 사용하고 있습니다. 특정 GTFS (일반 대중 교통 피드 사양)에 대한 루틴 맵의 geojson을 구축하고 싶습니다. 너무 무겁기 때문에지도에서 바로 세트를 사용할 수 없습니다. 멀티 메가 바이트 크기의 json 파일로 끝납니다.DouglasPeuckerSimplifier 사용법

내 코드는 다음과 같이 보입니다. 유효한 입력 배열을 가지고 있다는 확신을주기 위해 입력을 채우기 위해 루프가 삽입되어 있습니다. 제가 질의하는 것은 실제로 마지막 3 행이며, OSM에서 경로를 가져 와서 점의 수를 줄이는 일반적인 개념입니다. Douglas-Peucker가 정확히 생각한 것입니다.

   ArrayList<Geometry> points = new ArrayList <Geometry>(); 
       GeometryFactory gf= new GeometryFactory(); 
       for (Object sh : shape_points){ 
        double thisShapeLat=((Shapes)sh).getshapePtLat(); 
        double thisShapeLon=((Shapes)sh).getshapePtLon(); 
        // void identical consecutive points 
        if (lastShapeLat == thisShapeLat && lastShapeLon == thisShapeLon) continue; 
        lastShapeLat = thisShapeLat; 
        lastShapeLon = thisShapeLon; 
        Coordinate coord= new Coordinate(thisShapeLon,thisShapeLat); 
        // System.err.println("added coord="+coord); 
        points.add(gf.createPoint(coord)); 
       } 

       Geometry[] points_ar = (Geometry [])points.toArray(new Geometry[points.size()]); 
       GeometryCollection geometries = new GeometryCollection(points_ar, gf); 
       DouglasPeuckerSimplifier simplifier = new DouglasPeuckerSimplifier(geometries); 
       simplifier.setDistanceTolerance(0.00001); 
       Geometry result=simplifier.getResultGeometry(); 

은 아무리 공차 설정 어떤 값을, I는 출력 (결과) (점)에서 동일한 포인트를 얻을 수 없습니다. 전혀 아무것도하지 않습니다. 또한 같은 결과 (즉, 아무 것도없는)로 simplify()를 정적으로 호출했습니다.

답변

1

단순화하기 위해 매개 변수에 GeometryCollection이 아닌 LineString을 사용해야합니다.

   Coordinate list2[] = new Coordinate[coords.size()]; 
       list2 = coords.toArray(list2); 
       CoordinateArraySequence cas=new CoordinateArraySequence(list2); 

       LineString ls = new LineString(cas,gf); 
       Geometry result=DouglasPeuckerSimplifier.simplify(ls,0.001);