การแปลงระบบพิกัดทางภูมิศาสตร์ใน R


14

ฉันมีคะแนนในระบบพิกัดทางภูมิศาสตร์และฉันต้องการแปลงเป็นสวิสกริด (CH1903 +)

ข้อมูลตัวอย่าง:

 id       lon      lat
  2 7.173500 45.86880
  3 7.172540 45.86887
  4 7.171636 45.86924
  5 7.180180 45.87158
  6 7.178070 45.87014
  7 7.177229 45.86923  
  8 7.175240 45.86808
  9 7.181409 45.87177
  10 7.179299 45.87020

ผลลัพธ์ที่เคารพ:

id       E              N      
2     2579408.2431  1079721.1499
3     2579333.7158  1079729.1852
4     2579263.6502  1079770.1125
5     2579928.0358  1080028.4605
6     2579763.6471  1079868.9218
7     2579698.0756  1079767.9762
8     2579543.1019  1079640.6512
9     2580023.6226  1080049.2672
10    2579859.1889  1079875.2740 

3
@Aaron ฉันเป็นคนเดียวกัน ฉันยังไม่ได้รับคำตอบที่เหมาะสม คุณสามารถช่วยฉันได้ไหม? ฉันประหลาดใจจริง ๆ ที่คุณจู้จี้จุกจิกมากแค่ไหน
Topdombili

1
@Top นี่ไม่ใช่ pickiness มันเป็นนโยบาย StackExchange การโพสต์ไขว้สร้างความไม่สอดคล้องและปัญหาทุกชนิด (คุณอาจสังเกตเห็นว่าการโพสต์ในฟอรัมที่ไม่ถูกต้องจะได้คำตอบที่มีประโยชน์น้อยกว่าด้วย) โปรดลบเวอร์ชัน SO ที่คุณโพสต์
whuber

@Topdombili ฉันแค่อยากจะชี้ให้เห็นว่าตามคำตอบของ whuber ค่าอินพุตอยู่บน WGS84 และกำลังอยู่ระหว่างการแปลงตัวเลขและการประมาณของตาราง CH1903 + / LV95
mkennedy

@mkennedy ขอบคุณสำหรับการสังเกต ฉันสะเพร่าไม่อธิบายว่าฉันได้สันนิษฐานว่าพิกัดเดิม (lat, lon) เป็น WGS 84 (ข้อสันนิษฐานนั้นถูกฝังอยู่ในข้อคิดเห็นในโค้ด) หากไม่ใช่ให้เปลี่ยนค่าproj4string(d)ตามลำดับ ความสนใจของฉันถูกดึงออกมาเป็นหลักในการเท็จ easting และ Northing พารามิเตอร์x0และy0เพราะบางลำดับที่นิยมบนเว็บ (เช่นในการแสดงความคิดเห็นเป็นครั้งแรกในรหัส) ได้ลดลงตัวเลขที่สำคัญที่สุดของพวกเขาจึงแทนที่ทุกจุดโดยไม่กี่พันกิโลเมตร :-)
whuber

1
@whuber, ouch อีกครั้ง: การอ้างอิง! ฉันเห็นความคิดเห็นของคุณเกี่ยวกับอินพุตที่ตั้งค่าเป็น WGS 84 แต่ต้องการให้แน่ใจว่า Topdombili เห็น
mkennedy

คำตอบ:


18

ใช้แพคเกจ RGDAL มีปัญหาที่ CRS ใช้; RGDAL ไม่รู้จักรหัส EPSG คุณต้องระบุพารามิเตอร์อย่างชัดเจนดังที่แสดงไว้ที่นี่ (เห็นได้ชัดว่าสิ่งเหล่านี้เป็นการประมาณแต่พวกเขาควรจะค่อนข้างดีพวกเขาดูเหมือนจะอยู่ในระยะประมาณ 0.1 ม. จากค่าที่ตั้งใจไว้)

# References:
# http://lists.maptools.org/pipermail/proj/2001-September/000248.html (has typos)
# http://www.remotesensing.org/geotiff/proj_list/swiss_oblique_cylindrical.html
#
# Input coordinates.
#
x <- c(7.173500, 7.172540, 7.171636, 7.180180, 7.178070, 7.177229, 7.175240, 7.181409, 7.179299)
y <- c(45.86880, 45.86887, 45.86924, 45.87158, 45.87014, 45.86923, 45.86808, 45.87177, 45.87020)
#
# Define the coordinate systems.
#
library(rgdal)
d <- data.frame(lon=x, lat=y)
coordinates(d) <- c("lon", "lat")
proj4string(d) <- CRS("+init=epsg:4326") # WGS 84
CRS.new <- CRS("+proj=somerc +lat_0=46.9524056 +lon_0=7.43958333 +ellps=bessel +x_0=2600000 +y_0=1200000 +towgs84=674.374,15.056,405.346 +units=m +k_0=1 +no_defs")
# (@mdsumner points out that
#    CRS.new <- CRS("+init=epsg:2056")
# will work, and indeed it does. See http://spatialreference.org/ref/epsg/2056/proj4/.)
d.ch1903 <- spTransform(d, CRS.new)
#
# Plot the results.
#
par(mfrow=c(1,3))
plot.default(x,y, main="Raw data", cex.axis=.95)
plot(d, axes=TRUE, main="Original lat-lon", cex.axis=.95)
plot(d.ch1903, axes=TRUE, main="Projected", cex.axis=.95)
unclass(d.ch1903)

พล็อต

        lon        lat  

[1] 2,579,408.24 1,079,721.15
[2] 2,579,333.69 1,079,729.18
[3] 2,579,263.65 1,079,770.55
[4] 2,579,928.04 1,080,028.46
[5] 2,579,763.65 1,079,868.92
[6] 2,579,698.00 1,079,767.97
[7] 2,579,543.10 1,079,640.65
[8] 2,580,023.55 1,080,049.26
[9 ,] 2579859.11 1079875.27


ฉันต้องการถามผลลัพธ์ของความแม่นยำในการแปลงอาจน้อยลงในขณะที่ไม่มีค่าทศนิยมในขณะที่พิกัดที่มีในผลลัพธ์ที่เคารพนั้นอยู่ในระดับใกล้เคียงที่สุด 10 องศาฉันหมายถึงทศนิยม 2 หลัก
Topdombili

1
ฉันไม่เข้าใจความคิดเห็นของคุณ คุณถามถึงความแม่นยำของพิกัดที่ฉายเมื่อมีการระบุค่าดั้งเดิม (lat, lon) ด้วยความแม่นยำที่ จำกัด หรือไม่ ถ้าเป็นเช่นนั้นคุณอาจพบว่าคำตอบนี้มีประโยชน์
whuber

1
rgdal ไม่รู้จัก EPSG: 2056, FWIW
mdsumner

@md ขอบคุณ! ฉันได้พบการอ้างอิงที่ระบุว่านี่คือ EPSG: 9814 แต่ RGDAL ไม่รู้จัก
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.