Создание координат расстояния x и y для R из файла .kml - PullRequest
3 голосов
/ 26 октября 2011

Я бы хотел использовать файл треков .kml, чтобы создать набор координат x, y для использования в R.

Сейчас у меня есть трек GoogleEarth, который, я считаю, является LineString.Я слышал, что пакет rgdal обычно используется людьми, но он не работает на Mac-версиях R. Если возможно, я бы хотел сделать это на Mac, где я делаю все остальное.из моих анализов.При необходимости я могу выполнить преобразование на R64 с Windows, а затем перенести координаты на мой Mac, но это кажется ... неуклюжим.

Начало кода .kml выглядит следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>  
<kml xmlns="http://www.opengis.net/kml/2.2"  
xmlns:gx="http://www.google.com/kml/ext/2.2"  xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <Document>  
    <name>Perimeter_Track.kml</name>
<Placemark>
    <name>ACTIVE LOG</name>
    <LineString>
        <coordinates>
            -157.80736808,21.4323436,20.324951171875  

Я хочу преобразовать его в координаты x, y в километрах от точки на карте.Конечным продуктом будет контур водного массива с данными об изобилии видов.

Я уже попробовал несколько методов:
1. Преобразование файла .kml в .csv и импорт его в r с помощью read.csv;
2. Импорт координат с помощью getKMLcoordinatesв пакете maptools.

Проблема с (1) состоит в том, что когда я пытаюсь преобразовать координаты .kml в csv, я получаю сообщение об ошибке в программе конвертации (kmlcsv), которое говорит, что он не может прочитать файл (яне знаю почему - журналы ошибок недоступны).

Когда я пытаюсь (2), я получаю странные координаты.
spa<-getKMLcoordinates("Perimeter_Track.kml", ignoreAltitude=TRUE)<br> summary(spa) возвращает:

 Length Class  Mode   

[1,] 128 -не-числовой

[2,] 242-не числовой

[3,] 34-не числовой

[4,] 126-не числовой

Я полагаю, это потому, что файл .kml на самом деле представляет собой четыре отдельные дорожки, разделенные небольшими пробелами (т. Е. Когда они отключили GPS на короткое время, а затем снова начали).Нужно ли импортировать их все отдельно, чтобы получить всю форму?Если да, то как мне это сделать?

Я хотел бы, в конце концов, получить эту форму на сетке, которая равна x на y км, где координаты в км вместо координат GPS.Если у кого-то есть понимание того, как это сделать, я хотел бы услышать от вас!
Заранее большое спасибо.

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Несмотря на то, что предварительно скомпилированный пакет недоступен, вы все равно можете установить rgdal из его источника на Mac следующим образом:

  1. Установить среду "GDAL complete" из http://www.kyngchaos.com/software/frameworks.

  2. Добавьте расположение программ, которые вы только что установили, в путь Unix.В Mac-терминале выполните:

    PATH=/Library/Frameworks/GDAL.framework/unix/bin:/Library/Frameworks/PROJ.framework/unix/bin$PATH
    
  3. Загрузите исходный код пакета rgdal из CRAN по адресу http://cran.r -project.org / web / packages / rgdal /index.html .

  4. Откройте R и соберите / установите пакет rgdal.Обратите внимание, что мы должны указать места для некоторых компонентов, которые мы только что установили.

    install.packages('~/Downloads/rgdal_0.7-1.tar.gz', repos=NULL, type='source', configure.args=c('--with-proj-include=/Library/Frameworks/PROJ.framework/unix/include', '--with-proj-lib=/Library/Frameworks/PROJ.framework/unix/lib'))
    

Это прекрасно устанавливается на мой Mac OS X 10.6.Удачи!


Итак, основная идея с вашими данными может быть:

library(rgdal)
library(maptools)

# Load KML coordinates
coords = getKMLcoordinates('data.kml')
coords = SpatialPoints(coords, CRS('+proj=longlat'))

# Load US Maps (get from www.gadm.org)
load('USA_adm1.RData') 
hawaii = gadm[gadm$NAME_1 == 'Hawaii', ]

# Transform coordinates
hawaii.proj = spTransform(hawaii, CRS=CRS('+init=epsg:2784 +units=km'))
coords.proj = spTransform(coords, CRS=CRS('+init=epsg:2784 +units=km'))

# Plot
dev.new(width=4, height=4)
plot(hawaii.proj, axes=T, xlim=c(450,550), ylim=c(0,60))
points(coords.proj, pch=16, col='red')

enter image description here

Отличное место для жизни!

1 голос
/ 27 октября 2011

Как только вы прочитали что-то в объект класса sp (возможно, здесь SpatialLinesDataFrame), используя readOGR из rgdal, вы можете преобразовать его в декартову систему из lat-long с помощью функции spTransform.

Какая система ее преобразовать, зависит от того, где она находится. Существует множество стандартных преобразований, которые зависят от долготы, называемых зонами UTM (универсальный поперечный меркатор). Просто найдите зону для вашей долготы, найдите код EPSG и запустите spTransform.

Для Великобритании существует стандартная сеточная система, называемая Ordnance Survey Grid, которая имеет код EPSG 27700. Таким образом, чтобы преобразовать что-то в долготе (EPSG: 4326) в метры OSGB, я делаю:

mapOS = spTransform(mapLL,CRS=CRS("+init=epsg:27700"))

В справке для spTransform много примеров.

Обратите внимание, что все это прекрасно, только если ваши данные находятся на небольшой части земли ...

...