GeoTools가 포함 된 PostGIS 사용 데이터베이스의 기능 테이블에서 이미지로 읽은 일부 기능을 올바르게 렌더링하려고합니다.AffineTransformation을 사용하여 이미지에 GeoTools의 기능을 올바르게 렌더링하는 방법은 무엇입니까?
내 구성 :
- PostgreSQL의 8.4
- PostGIS와 1.5
- 투 0.40.1
- OSMembrane 845
- GeoTools 일부를 렌더링 2.7.4
를 구축 기능 나는 바운딩 박스 옆면은 지금까지 잘 작동합니다.
문제 : 나는
- 회전하는 결과를 얻을 수 (시계 방향)
- 가 y 축
내가 렌더링하려는 기능에 미러링이 기반으로 90 ° 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"]]
나는 아핀 변환을 수행하고 있으므로 writt 다음 코드 조각 :
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());
}
이 기능을 사용하면 기능이 좋아집니다. 반면에, 이것은 꽤 옳다고 느끼지 않습니다. 문제는 렌더러 paint
-method의 메소드 매개 변수로 graphics
-object에 적용한 것과 동일한 변환을 사용할 수없는 이유는 무엇입니까?
//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 웹 사이트의 튜토리얼에 대해 알고 있지만, 모든 것이 함께 쓰여지는 곳이 그리워요.
나는 도움이 될만한 정보를 기다리고 있습니다.
'System.setProperty ("org.geotools.referencing.forceXY", "true");가 추가되었습니다. IMHO이 정보는 [GeoTools Quickstart tutorials] (http://docs.geotools.org/latest/userguide/tutorial/quickstart/index.html)에 추가되어야합니다. 고마워요! – pmoule
세계가 실제로 데이터를 올바르게 저장하기 시작할 때까지 우리를 조종 할 수있는 해킹이 더 많습니다. –
이 해킹을 완료하는 데는 지금 매우 유용합니다. :) – pmoule