John Snowデータセットをマップ座標に変換する方法


14

RのHistDataパッケージ(https://r-forge.r-project.org/R/?group_id=574)には、1854年のロンドンでのコレラの発生に関するJohn Snowのマップに関連するデータセットがあります。ウォルター・トブラーの監督の下で慎重にデジタル化された権威です。これらのデータセットの詳細については、John Mackenzieがhttp://www1.udel.edu/johnmack/frec480/cholera/cholera2.htmlで説明しています

残念ながら、死亡、ポンプ、および道路の座標は、他のGISアプリケーションまたはRのマッピングソフトウェア(空間パッケージ、ggmapなど)に適したマップ座標ではなく、任意の座標系を使用します

http://freakonometrics.hypotheses.org/19213アーサー・シャルパンティエはからスノーデータのバージョンでggmapを使用しています http://www.rtwilson.com/downloads/SnowGIS_v2.zipCholera_Deaths.shpただし、このファイルには、私が記録した578人ではなく、489人の死亡のみがリストされていHistData::Snow.deathsます。

1つのアイデアは、平均と(x、y)座標の標準偏差との関係を見つけて線形に再スケーリングすることですが、おそらくもっと良い方法がありますか?

ここに私が今まで試したものがあります

> data(Snow.deaths, package="HistData")
> D <- Snow.deaths[,2:3]
> colMeans(D)
       x        y 
13.03312 11.69721 
> var(D)
          x         y
x 3.8150987 0.3802654
y 0.3802654 2.7213828

Cholera_deathsファイルを読む

> folder <- "C:/Dropbox/R/data/Snow/SnowGIS_v2/SnowGIS"
> library(maptools)
> deaths <- readShapePoints(file.path(folder, "Cholera_Deaths"))
> head(deaths@coords)
  coords.x1 coords.x2
0  529308.7  181031.4
1  529312.2  181025.2
2  529314.4  181020.3
3  529317.4  181014.3
4  529320.7  181007.9
5  529336.7  181006.0
> # deaths has only 250 observations; 489 deaths
> sum(deaths@data$Count)
[1] 489

 > # try to relate to Snow.deaths
> X <- deaths@coords
> colnames(X) <- c("x", "y")
> 
> XX <- data.frame(X, Freq=deaths@data$Count)
> XX <- vcdExtra::expand.dft(XX)
> 
> colMeans(XX)
       x        y 
529414.8 181031.9 
> var(XX)
          x        y
x 10813.816 1521.693
y  1521.693 6227.924
>

OK、それから私Dはと同じ平均と標準偏差を持つように再スケーリングしようとしXXますが、ここでは何かが正しく動作しません-の列の平均は次のDscaledものと等しくなるはずですXX

> # scale D to have the same means and standard deviations as XX
> Dscaled <- scale(D, center=TRUE, scale=TRUE)
> Dscaled <- scale(Dscaled, center=colMeans(XX), scale=sqrt(diag(var(XX))))
> colMeans(Dscaled)
        x         y 
-5091.040 -2293.947 
>

編集:この問題SnowMap(axis.labels=TRUE)では、HistDataR-Forgeの(rev 102)の開発バージョンで、新しい関数によって描画されたSnowのマップを見ると役立つ場合があります。軸ラベルは、データSnow.*データセットにあるため、左下隅に座標系の原点を示します。

SnowMap


各データセットのポンプを一致するようにスケーリングしようとしています。約54のスケール(および変換)がシェイプファイルのUKグリッド座標(間違いなく、メートル)。その場合でも、ポイントは正確に重ならず、他の回転/スキューが明らかに存在します。ポンプの数が少ないため、各データセット内の対応するポンプを識別し、それらのシフト/変換を計算できます。
スペースマン16

HistData / inst / doc / Snow_deaths-duplicates.htmlを見て、役に立たなかったと思いますか?
バリーカーター16

また、Snow.*ファイル内の座標から、精度を確認するために2つまたは3つのポンプの位置を持つGISベースのマップの座標への線形変換を取得できることに気付きました。残念ながら、SnowGISファイルにはポンプのラベルがありません。また、視覚的に比較できるように、それらをプロットする方法の例は見ていません。
user101089 16

1
タイトルを読んだ後、一瞬Westerosの座標をマップしたいと思った。
user35594

回答:


4

おそらく、http: //donboyes.com/2011/10/14/john-snow-and-serendipityからシェープファイルを評価して、578ポイントあります。

HistData Snow Deathsをロビンウィルソン(@robintw)バージョンに関連付けようとすると、シェイプファイルには、通りの後ろから積み上げられた複数の点ではなく、単一の住所での複数の死の単一点座標が含まれるため、マップ

ロビンのバージョンには間違いなく多くのポイントが欠けています。ざっと見てみると、見逃された外れの独身者がかなりいます。別の問題は、マップの中心に近い場所にあり、まとめたときに適切にエッジが一致しなかった(これはWikipedia マップにも表示されます)ため、多くのポイントがわかりにくくなります。

ダウンロードで提供されたマップの抽出:

ここに画像の説明を入力してください

UCLAバージョンからの抽出:

ここに画像の説明を入力してください


すごい!具体性については、リンク.shpファイルがあるdonboyes.com/download/snow_shp.zip
user101089

2

この質問に対する答えを完成させるために、次のコードは、元のToblerファイル(HistData)とDon Boyesによって提供されたファイルの座標の線形変換を見つけます。

folder <- "C:/Dropbox/R/data/Snow/snow_shp"
library(maptools)
deaths <- readShapePoints(file.path(folder, "deaths_gcs"))
data(Snow.deaths, package="HistData")
X <- deaths@coords
D <- Snow.deaths[,2:3]

次に、X [、1]のD [、1]とX [、2]のD [、2]を相関させて回帰します。線形変換は、回帰係数によって与えられます。

> cor(D[,1], X[,1])
[1] 0.9999664
> cor(D[,2], X[,2])
[1] 0.9995559
> 
> # linear transformations to GIS coords
> lm(D[,1] ~ X[,1])

Call:
lm(formula = D[, 1] ~ X[, 1])

Coefficients:
(Intercept)       X[, 1]  
      185.4       1264.7  

> 
> lm(D[,2] ~ X[,2])

Call:
lm(formula = D[, 2] ~ X[, 2])

Coefficients:
(Intercept)       X[, 2]  
    -105441         2047  
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.