2016-04-07 11 views
1

私は緯度と経度のデータを使用しています。ストックホルムのマップの各点で(その点の近接度に基づいて) 。私は、画像上で等間隔ではなく、等間隔に配置されている点にもっと興味があります。この意味では、赤道での緯度点間の距離が極円に沿った距離よりも長いことを理解しています。この質問には非常に重要です。緯度と経度、xとy、およびそれらをプロットする際の違い:geosphereとggmap

私の目標は、マップをx方向とy方向の両方向に約1km単位のグリッドに分割することでした。このように、私は最小と最大の緯度と経度をとり、ストックホルムの中心からxとyの距離を計算し、次に緯度と経度のスパンをxとy座標のスパンで(地圏を使って)分けました。プロットするときに点が等間隔になるようにしたかったからです(そうでなければ、赤道に近づくため地図の一番上のx点の距離が小さくなります)。

次に、これらの点をマップ上に(ggmapを使用して)プロットし、x方向よりy方向の点の間の距離が遠いことを観察しました。私は、地図を単純に歪んだ形で描くことができると考えていますが、それは信じるには少し歪んでいるようです。私は何か間違っているかもしれないと思うが、それが何であるかは分からない。以下

コードの例:

library("ggmap") 
library("RgoogleMaps") 
library("geosphere") 

stockholm <- get_map("stockholm", zoom=11) 
ggmap(stockholm) 

places <- c('Tensta', 'Hanviken') 

pos <- data.frame(Places = places, lat = NA, lon = NA, x = NA, y = NA) 
reflatlon = getGeoCode('Stockholm, Sweden') 

for(i in 1:length(places)) { 
    latlon <- getGeoCode(paste0(places[i], ', Stockholm')) 
    pos$lat[i] <- as.numeric(latlon[1]) 
    pos$lon[i] <- as.numeric(latlon[2]) 

    dist_y <- distGeo(c(latlon[1], reflatlon[2]), reflatlon) * sign(latlon[1] - reflatlon[1]) # same longitude 
    dist_x <- distGeo(c(reflatlon[1], latlon[2]), reflatlon) * sign(latlon[2] - reflatlon[2]) # same latitude 

    pos$x[i] <- dist_x 
    pos$y[i] <- dist_y 
} 

deglatperm <- (max(pos$lat) - min(pos$lat))/(max(pos$y) - min(pos$y)) # degrees latitude per metre 
deglonperm <- (max(pos$lon) - min(pos$lon))/(max(pos$x) - min(pos$x)) # degrees longitude per metre 

seqlat <- seq(min(pos$lat), max(pos$lat), by = deglatperm*1000) # sequence with a point every ~1km 
seqlon <- seq(min(pos$lon), max(pos$lon), by = deglonperm*1000) # sequence with a point every ~1km 

seqlatlon <- expand.grid(seqlat, seqlon) 
names(seqlatlon) <- c('lat', 'lon') 

ggmap(stockholm) + geom_point(aes(x = lon, y = lat), data=seqlatlon) 

output plot

もし出力プロットからわかるように、X方向に比べてy方向の点の間の少なくとも二倍の距離があります。

要約すると、x座標とy座標は地球を使って得られます。マップはggmapを使用してプロットされます。

地圏に何か問題がありますか?または、緯度と経度のマップはです。が歪んでいますか?私がGoogle Mapsを開き、「距離の測定」ツールを上下左右および左右のポイントの間で使用すると、16.3 kmと16.9 kmの見積もりが得られますが、地球で得られる値は17と32 kmです(xとy )である。

誰かがここで何が起こっているか教えてもらえれば、私は非常に感謝しています!

答えて

2

私はどの座標系でも動作しないようにしていますが、距離の代わりに度を使用しています。米国では、私たちのState Planeシステムを常に使用しています。スウェーデンはRTシステムを使用しているようです。あなたの座標を度から外し、データムからの距離を取得したら、従来の距離を使ってグリッドを構築することができます。必要に応じてそこから座標を度に戻すことができます。

座標変換のためにspTranform関数を使用し、Spatial Referenceガイドを使用して座標系の参照コードを取得します。

library("ggmap") 
library("RgoogleMaps") 
library("geosphere") 
library("sp") 

stockholm <- get_map("stockholm", zoom=11) 
ggmap(stockholm) 

places <- c('Tensta', 'Hanviken') 

pos <- data.frame(Places = places, lat = NA, lon = NA) 
reflatlon <- getGeoCode('Stockholm, Sweden') 

for(i in 1:length(places)) { 
    latlon <- getGeoCode(paste0(places[i], ', Stockholm')) 
    pos$lat[i] <- as.numeric(latlon[1]) 
    pos$lon[i] <- as.numeric(latlon[2]) 
} 

p <- SpatialPoints(data.frame(pos$lon, pos$lat), proj4string = CRS("+init=epsg:4326")) 
p <- spTransform(p, CRS("+init=epsg:3022")) 

seqx <- seq(min([email protected][,1]), max([email protected][,1]), by = 1000) 
seqy <- seq(min([email protected][,2]), max([email protected][,2]), by = 1000) 

pgrid <- expand.grid(seqx, seqy) 
pgrid <- SpatialPoints(pgrid, proj4string = CRS("+init=epsg:3022")) 
pgrid <- spTransform(pgrid, CRS("+init=epsg:4326")) 
pgrid <- data.frame([email protected]) 

names(pgrid) <- c('lon', 'lat') 

ggmap(stockholm) + geom_point(aes(x = lon, y = lat), data=pgrid) 
+1

偉大な答え - ありがとう!だから問題は私が地球圏を使っていることにありました。私は座標系が非常に複雑であることに気付きませんでしたが、それは後見で意味があります。 私が正しく行っていない場合、あなたはworld epsg:4362の座標をローカルepsg:3022地形座標系に変換しましたか? さらに、epsg:3022を選択する際に、spatialreference.orgを検索してこれを実行しましたか?私はストックホルムを検索し、この参考文献を入手しなかったが、11の異なるコードを得た。または、指定された地域で使用するepsgコードを見つけるための特定の/自動化された方法/場所がありますか? もう一度おねがいします! –

+0

距離単位の座標系への変換が重要です。 RT90の座標系を見つけるために私は "スウェーデンの座標系"についてgoogleを検索しました。あなたはSR.orgにいくつかのRT座標系があることに気付くでしょう。私はまずSRでストックホルムを検索しようとしましたが、空手にも手を出しました。ローカル座標系を見つけるための特定の情報源についてはわかりません(しかし、projfinder.orgはその逆を行いますが、これはかなりクールです)。 EPSGは単なるカタログ番号です。各座標系はユニークで、ほとんどがEPSGによって認識されます。 「地理座標系」を検索します。重いもの。 – JMT2080AD

+0

また、他の回答を探している場合は、GIS Stack Exchangeに投稿してください。これがあなたのために働くなら、あなたはそれを投票するか、それを答えにすることができます。 – JMT2080AD

関連する問題