문제
당신이 잘되기를 바랍니다
PROJ.4 라이브러리를 사용하여 LAT/Long 좌표를 OSGB36 X 및 Y로 변환하려고합니다.
다른 사람 이이 일을 성공적으로 수행 한 적이 있습니까? Srcprj4string 및 destprj4string 변수를 채워야합니다.
문자열 srcprj4string = " +proj = longlat +elps = wgs84 +datum = wgs84 +no_defs";
String destprj4string = " +proj = utm +zone = 11 +elps = grs80 +datum = nad83 +단위 = m";
그러나 나는 destprj4string이 OSGB36에서 무엇을 해야하는지 알아낼 수 없습니다 - 나는 데이텀이 +datum = osgb36이어야한다는 것을 알고 있지만, 내가 시도하는 모든 것은 작동하지 않습니다.
어떤 아이디어?
미리 감사드립니다
Leddy
해결책 2
알았어요:
string srcPrj4String = "+proj=longlat +ellps=WGS84 +towgs84=0,0,0 +no_defs";
string destPrj4String = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs";
건배!
다른 팁
인터넷 검색이 나타납니다 이것 Manchester University Earth Science Academic 인 John Stevenson 박사는 누구든지 누가 그것을 얻어야합니다. 여기에 인용문이 있습니다.
문제는 OSGB36으로 가면 투영과데이텀 변환. 앞서서 2007 년 10 월, PROJ는 프로젝션 만 수행하여 큰 오프셋을 초래했습니다. 'proj -v'를 실행하거나 EPSG 파일을 보면서 새 버전이 있는지 확인할 수 있습니다.
cat /usr/share/proj/epsg | grep -A 1 "British National Grid"
# OSGB 1936 / British National Grid
<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000
+y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <>
새 버전에는 +Datum = OSGB36이 있습니다.
이전 버전이있는 경우 라인을 대체하여 다음을 수정할 수 있습니다.
+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000
+ellps=airy
+towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m
+no_defs <>
합병증은 OSGB36입니다 약간 왜곡되었습니다 GPS 예측과 관련하여 (예 : WGS84 및 ETRS89). 이 오프셋은 작으며 정밀 측량에만 중요합니다. OSGB36 오프셋에 대한 많은 검색은 이와 관련된 페이지를 가져옵니다. 이것도 보상하려면 nadgrid 파일을 다운로드하고 그걸 써. 내 데이터의 경우, 이것은 지점을 약 1m로 옮겼습니다.
EPSG : spatialreference.org의 27700 PROJ4 용을 포함하여 이것을 정의하기위한 다양한 문자열을 제공합니다.
다음은 예제 코드입니다 루비에서 Proj4 바인딩 사용 :
#!/usr/bin/ruby
require 'rubygems'
require 'proj4'
#Some example WGS84 lat lon coordinates to convert:
lon = -0.10322
lat = 51.52237
srcPoint = Proj4::Point.new(Math::PI * lon.to_f / 180,
Math::PI * lat.to_f / 180)
srcPrj = Proj4::Projection.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
destPrj = Proj4::Projection.new("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs <>")
point = srcPrj.transform(destPrj, srcPoint)
puts "http://www.openstreetmap.org/?mlat=" + lat.to_s + "&mlon=" + lon.to_s + "&zoom=16"
puts "Converts to:";
puts "http://streetmap.co.uk/grid/" + point.x.round.to_s + "_" + point.y.round.to_s + "_106"
출력 :
http://www.openstreetmap.org/?mlat=51.52237&mlon=-0.10322&zoom=16
변환 :
http://streetmap.co.uk/grid/531691_182089_106
그래서 이것은 지금 정확하게 작동합니다. 원래 나는 단지 'destprj'문자열을 시도하고 '전진'방법을 호출했지만, 이것은 데이텀 변환을 거부하여 모든 것이 100m 아웃되었습니다. 데이텀 변환이 발생하기 위해 'srcprj'문자열과 '변환'방법을 사용해야하는 것 같습니다.
내 블로그 게시물도 참조하십시오. WGS84에서 영국 병기 조사 좌표 시스템으로 전환하기위한 루비 코드? 여기에는 동일한 작업을위한 순수한 루비 버전 (Proj4 아님)이 포함됩니다.