Я пытаюсь правильно отобразить некоторые функции, которые я прочитал из таблицы возможностей базы данных PostGIS с GeoTools, в изображение.
Моя конфигурация:
- PostgreSQL 8.4
- PostGIS 1.5
- Осмос 0,40,1
- ОСМембранная сборка 845
- GeoTools 2.7.4
Визуализация некоторых функций внутри ограничительной рамки пока работает нормально.
Проблема: Я получаю результат, равный
- повернуто на 90 ° (по часовой стрелке)
- отражено по оси Y
Функции, которые я хочу отобразить, основаны на этом CoordinateReferenceSystem
GEOGCS["WGS 84",
DATUM["World Geodetic System 1984",
SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic latitude", NORTH],
AXIS["Geodetic longitude", EAST],
AUTHORITY["EPSG","4326"]]
Мне известно об исключении аффинного преобразования, поэтому я написал следующий фрагмент кода:
public void render(final MapContext mapContext, final Graphics2D graphics) throws IOException
{
Rectangle renderingArea = new Rectangle(this.mapWidth, this.mapHeight);
GTRenderer renderer = new StreamingRenderer();
renderer.setContext(mapContext);
//move the result to a visisble area
AffineTransform translate = AffineTransform.getTranslateInstance(mapHeight, mapWidth);
//rotate 180° anti-clockwise
AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI);
//exchange x and y
AffineTransform mirror = new AffineTransform(0, 1, 1, 0, 0, 0);
AffineTransform transform = new AffineTransform(translate);
transform.concatenate(rotate);
transform.concatenate(mirror);
graphics.transform(transform);
renderer.paint(graphics, renderingArea, mapContext.getAreaOfInterest());
}
Это работает и заставляет функции выглядеть отлично! С другой стороны, это не совсем правильно. Вопрос в том, почему я не могу использовать то же преобразование, которое применялось к graphics
-объекту, в качестве параметра метода paint
-метода рендерера?
, например
//move the result to a visisble area
AffineTransform translate = AffineTransform.getTranslateInstance(mapHeight, mapWidth);
//rotate 180° anti-clockwise
AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI);
//exchange x and y
AffineTransform mirror = new AffineTransform(0, 1, 1, 0, 0, 0);
AffineTransform transform = new AffineTransform(translate);
transform.concatenate(rotate);
transform.concatenate(mirror);
renderer.paint(graphics, renderingArea, mapContext.getAreaOfInterest(), transform);
Это всегда приводит к пустому экрану. Я думаю, это отображается где-то за пределами видимой области. Я знаю об уроках на сайте geotools, но мне не хватает места, где все собрано.
Я с нетерпением жду любых полезных советов.