지도에 lon-lat 원점이있는 (x, y) 점을 넣으려고합니다. 내 원점을 중심으로 사용자 정의 가로 메카 토르 투영법을 설정하고이를 사용하여 내 포인트를 경도로 투영하고 싶습니다.사용자 지정 가로 메르카토르와 WGS84 Lon-Lat 간의 좌표 변환
이것은 GeoToolkit (또는 GeoTools)이 할 수있는 일종의 것으로 보이지만 참조 라이브러리를 사용하는 가장 좋은 방법을 결정하는 데 큰 어려움을 겪고 있습니다.
때때로 작동하는 코드를 작성했지만 GeoToolkit이 MathTransformFactory를로드하려고 시도 할 때마다 ClassCast 예외가 발생합니다. 어떤 도움이라도 대단히 감사 할 것입니다. 여기에 내 코드입니다 :
public class LonLatConverter {
private static final double WGS84_AXIS_MINOR = 6356752.314;
private static final double WGS84_AXIS_MAJOR = 6378137.000;
private GeoLocation origin;
private static MathTransformFactory factory;
public LonLatConverter(GeoLocation origin) {
this.origin = origin;
}
public GeoLocation toLonLat(Vector2D location) {
double lon = 0;
double lat = 0;
try {
MathTransformFactory factory = getMathTransformFactory();
MathTransform tr = getMathTransform(factory);
DirectPosition sourcePt = new GeneralDirectPosition(
location.getX(), location.getY());
DirectPosition targetPt = tr.transform(sourcePt, null);
lon = targetPt.getOrdinate(0);
lat = targetPt.getOrdinate(1);
} catch (Exception e) {
throw new RuntimeException(e);
}
return new GeoLocation(lon, lat);
}
private MathTransform getMathTransform(MathTransformFactory factory)
throws NoninvertibleTransformException, FactoryException {
ParameterValueGroup p = factory
.getDefaultParameters("Transverse_Mercator");
p.parameter("semi_major").setValue(WGS84_AXIS_MAJOR);
p.parameter("semi_minor").setValue(WGS84_AXIS_MINOR);
p.parameter("central_meridian").setValue(origin.getLongitude());
p.parameter("latitude_of_origin").setValue(origin.getLatitude());
MathTransform tr = factory.createParameterizedTransform(p).inverse();
return tr;
}
private MathTransformFactory getMathTransformFactory() {
if (factory == null) {
FactoryRegistry registry = new FactoryRegistry(
MathTransformFactory.class);
factory = registry.getServiceProvider(MathTransformFactory.class,
null, null, Hints.MATH_TRANSFORM_FACTORY);
}
return factory;
}
}
감사합니다,
단