我正在尝试正确地将我从使用 GeoTools 的启用 PostGIS 的数据库的功能表中读取的一些功能呈现到图像中。
我的配置:
- PostgreSQL 8.4
- 地理信息系统 1.5
- 渗透 0.40.1
- OSMembrane 构建 845
- 地理工具 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
-object 上应用的相同转换作为渲染器的paint
-method 的方法参数?
例如
//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 网站上的教程,但我错过了一些将所有东西放在一起的地方。
我期待任何有用的提示。