Angenommen, ich möchte eine SHP-Datei laden, meine Daten darauf speichern und die Karte als Bild speichern.Zoom speichern Bildlevel in Datei
Um ein Bild zu speichern Ich verwende:
public void saveImage(final MapContent map, final String file, final int imageWidth) {
GTRenderer renderer = new StreamingRenderer();
renderer.setMapContent(map);
Rectangle imageBounds = null;
ReferencedEnvelope mapBounds = null;
try {
mapBounds = map.getMaxBounds();
double heightToWidth = mapBounds.getSpan(1)/mapBounds.getSpan(0);
imageBounds = new Rectangle(0, 0, imageWidth, (int) Math.round(imageWidth * heightToWidth));
} catch (Exception e) {
// Failed to access map layers
throw new RuntimeException(e);
}
BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
Graphics2D gr = image.createGraphics();
gr.setPaint(Color.WHITE);
gr.fill(imageBounds);
try {
renderer.paint(gr, imageBounds, mapBounds);
File fileToSave = new File(file);
ImageIO.write(image, "png", fileToSave);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Aber lassen Sie uns sagen, dass ich so etwas wie dies tue:
...
MapContent map = new MapContent();
map.setTitle("TEST");
map.addLayer(layer);
map.addLayer(shpLayer);
// zoom into the line
MapViewport viewport = new MapViewport(featureCollection.getBounds());
map.setViewport(viewport);
saveImage(map, "/tmp/img.png", 800);
1) Das Problem ist, dass die Zoomstufe isn‘ t in der Bilddatei gespeichert. Gibt es eine Möglichkeit, es zu speichern?
2) Wenn ich tue MapViewport(featureCollection.getBounds());
gibt es eine Möglichkeit, ein wenig die Grenzen zu erweitern, um eine bessere visuelle Darstellung zu haben?
...
Nizza, dank Was auch immer Wert Ich habe versucht, zu dividieren mit ('double delta = bounds.getWidth()/20.0'), hatte keinen Effekt.So, ich benutze einfach' delta delta = bounds.getWidth() 'und es funktioniert gut (es zoomt aus). Auch, wie soll ich 'JMapPane' in meinem Fall verwenden? Weil ich' MapContent' verwende.Danke! (Upv) – George
Prüfe im Debugger, was der Wert von getwidth ist? Division durch 20 sollte 5% ergeben, was vielleicht zu klein ist, um aufzutauchen. –
Wenn Sie einen JMapFrame haben, können Sie den mapPane daraus erhalten, wenn nicht, machen Sie sich keine Sorgen. –