如何通过gov.ca.maps.tiles.TileCreator节省瓷砖(图像)时减少时间?

时间:2015-02-11 08:39:19

标签: java mongodb

我正在尝试使用TileCreator生成多边形集合的图块。我正在使用像tileCreator.renderData(),tileCreator.saveAll()这样的方法。这两个都很好。但saveAll()方法需要花费大量时间将图像放入文件系统中。

TileCreator tileCreator= new TileCreator(
                    directory,
                    zoomLevel,
                    new TileRenderer[] { new ValueAsColoredShapeRenderer(color) {
                    } });

            Double [][]kmllatlonbounds=new Double[][]{{1000.0,1000.0},{-1000.0,-1000.0}};
            tileCreator.kmllatlon=new ArrayList<ArrayList<Double>>();
            for(int i=0;i<jsArray2.length();i++){

                JSONArray bound = jsArray2.getJSONArray(i);
                //System.out.println("Zoom Level: "+zoomLevel+" Bound[0]: "+bound.getDouble(0)+"Bound[1]: "+bound.getDouble(1));
                Double lon = bound.getDouble(0);
                Double lat = bound.getDouble(1);
                if(lat>kmllatlonbounds[1][0])
                {
                    kmllatlonbounds[1][0]=lat;
                }
                if(lat<kmllatlonbounds[0][0])
                {
                    kmllatlonbounds[0][0]=lat;
                }
                if(lon>kmllatlonbounds[1][1])
                {
                    kmllatlonbounds[1][1]=lon;
                }
                if(lon<kmllatlonbounds[0][1])
                {
                    kmllatlonbounds[0][1]=lon;      
                }

                double[] meters = tileCreator.getMercator().LatLonToMeters(lat, lon);
                int[] metersToPixels = tileCreator.getMercator().MetersToPixels(meters[0],meters[1], zoomLevel);

                ArrayList<Double> tmplatlon=new ArrayList<Double>();
                tmplatlon.add((double)metersToPixels[1]);
                tmplatlon.add((double)metersToPixels[0]);
                tileCreator.kmllatlon.add(tmplatlon);
                }
            tileCreator.renderData(kmllatlonbounds);
            tileCreator.saveAll();

我在内部使用ImageIo类进行读/写操作。我认为问题出在ImageIo上,但无法解决。 谁能帮帮我吗?因为我需要100%的优化,因为它需要花费数小时的时间来生成瓷砖......

1 个答案:

答案 0 :(得分:1)

如果您没有任何内存限制,可以通过增加ImageCache.java中的缓存大小来降低SaveAll()的频率