Перетворення географічної системи координат в 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 Це не прискіпливість, це політика StackExchange. Перехресне опублікування створює всілякі невідповідності та проблеми. (Можливо, ви також помітили, що публікація на неправильному форумі також може отримати менше, ніж корисних відповідей.) Будь ласка, видаліть версію SO, яку ви опублікували.
whuber

@Topdombili, я просто хотів зазначити, що згідно з відповіддю Whuber, вхідні значення знаходяться на WGS84 і проходять перетворення дат, плюс проекція на сітку CH1903 + / LV95.
mkennedy

@mkennedy Дякую за зауваження. Мене відхилили, не пояснивши, що я припустив, що оригінальні (лат., Лон) координати є WGS 84 (що припущення поховано в коментарі до коду). Якщо їх немає, змініть значення proj4string(d)відповідно. Мою увагу в першу чергу звернули на помилкові параметри сходу та норвінгу, x0і y0тому, що деякі популярні посилання в Інтернеті (наприклад, у першому коментарі до коду) скинули свої найзначніші цифри, тим самим перемістивши всі точки на кілька тисяч кілометрів :-).
whuber

1
@whuber, ouch re: посилання! Я бачив ваш коментар щодо набору даних для 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,] 2579408,24 1079721,15
[2,] 2579333,69 1079729,18
[3,] 2579263,65 1079770,55
[4,] 2579928,04 1080028,46
[5,] 2579763,65 1079868,92
[6,] 2579698,00 1079767,97
[7,] 2579543,10 1079640,65
[8,] 2580023,55 1080049,26
[9 ,] 2579859.11 1079875.27


Я хотів запитати, що результат точності конверсії може бути меншим, хоча вони не мають десяткових значень, тоді як наявні координати у шанованих результатах знаходяться у найближчому 10 градусі, я мав на увазі 2 цифри десяткової.
Topdombili

1
Я не розумію вашого коментаря. Ви питаєте про те, наскільки точні прогнозовані координати, коли вихідні (лат., Лон) значення задаються з обмеженою точністю? Якщо так, то ця відповідь може бути корисною.
whuber

1
rgdal дійсно розпізнає EPSG: 2056, FWIW
mdsumner

@md Дякую! Я знайшов посилання, яке стверджує, що це EPSG: 9814, але RGDAL не розпізнав його.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.