2011-07-27 3 views
1

위도/경도로 정의 된 일부 위치를지도 (이미지)의 x, y 좌표에 투사 할 수있는 함수를 작성해야합니다.lambert 2008 투영

지도 자체가 투영 유형으로 "벨기에 램버트"를 사용하는 것으로 보입니다.

이 프로젝션 및 구성에 대한 공식 정보가 있습니다 (http://ign.be/FR/FR2-1-4.shtmhttp://ign.be/Common/Lambert2008/Transformation_Geographic_Lambert_FR.pdf). 필요한 경우 프랑스어로 번역합니다.

기본적으로 일부 라이브러리를 사용하는 것이 더 쉬울 것이라는 결론이 나왔습니다 (여기에서는 필수 사항은 아니지만). 몇 가지 조사를 한 후에 OpenMap이 작업을 수행 할 수 있어야합니다. http://openmap.bbn.com/doc/api/com/bbn/openmap/proj/LambertConformal.html#LambertConformal%28com.bbn.openmap.LatLonPoint,%20float,%20int,%20int,%20double,%20double,%20double,%20double,%20double,%20double,%20com.bbn.openmap.proj.Ellipsoid%29

내가 구성하지 않은 것 같아요 :

private Point mapCoordinatesToPoint(LatLonPoint latLonPoint) { 
    LatLonPoint centerLatLonPoint = new LatLonPoint(50.797815, 4.3592158333333333333333333333333); 
    Proj proj = new LambertConformal(centerLatLonPoint, 1, 1000, 1000, 4.3592158333333333333333333333333, 49.833333333333333333333333333333, 51.166666666666666666666666666667, 50.797815, 649328.0, 665262.0, Ellipsoid.GRS_1980); 
    return proj.forward(latLonPoint); 
} 

이 LamberConformal 생성자

의 JavaDoc (내 지프가 1000x1000 인 것을 알고) : 그래서, 여기에

는 내가 지금까지 무엇을 가지고 있습니다 그것은 맞습니다 : xxx에있는지도상의 어떤 점은 다음 결과를 제공합니다 :

x=-1766051.0; y=-1.6355546E7; 
매개 변수로 "중심점"을 (?)주기

사람이 잘 알고, 또는 링크에서 구성을 알 수

x=500.0; y=500.0; 

(확인을 보이는지도의 가운데를) 제공?

편집 :

이와 방법에서 마지막 줄을 교체 시도 :

return proj.forward(latLonPoint.getLatitude(), latLonPoint.getLongitude(), new Point(), false); 

하지만 더 나은.

답변

0

관심있는 사람들을 위해, 내가 어떻게 작동하게되었는지 알려드립니다.

벨기에지도 용입니다 (Lambert 72 또는 2008 사용 중). 만약 지리적 좌표를 모두 알고있는 이는이 상에 투영된다 (NW 가능한 SE와 같은) 임의의 지점 인

LatLonPoint dePanneLatLonPoint = new LatLonPoint(51.0975f, 2.5855f); 
    Point dePannePoint = new Point(27, 313); 

    LatLonPoint mussonLatLonPoint = new LatLonPoint(49.5567f, 5.7106f); 
    Point mussonPoint = new Point(1464, 1426); 

    float scale = proj.getScale(dePanneLatLonPoint, mussonLatLonPoint, dePannePoint, mussonPoint); 

두 점 :

Proj proj = new LambertConformal(centerLatLonPoint, scale, 1776, 1468, 
      4.3592158333333333333333333333333, //centralMeridian 
      49.833333333333333333333333333333, //lambert_sp_one 
      51.166666666666666666666666666667, //lambert_sp_two 
      50.797815, //referenceLatitude 
      649328.0, //falseEasting 
      665262.0, //falseNorthing 
      Ellipsoid.GRS_1980); 

스케일이 방법을 산출 할 수있다 지도.

또한지도 중심의 지리적 좌표를 찾아야했습니다.

 Point point = proj.forward(latitude, longitude, new Point(), false); 
:

지도에서 지점의 위치는이 방법을 찾을 수 있습니다