Cách dịch bộ dữ liệu John Snow sang tọa độ ánh xạ


14

Trong gói HistData cho R ( https://r-forge.r-project.org/R/?group_id=574 ) Tôi có các bộ dữ liệu liên quan đến bản đồ dịch bệnh dịch tả của John Snow ở London, 1854. Tôi tin rằng chúng có thẩm quyền, đã được số hóa cẩn thận dưới sự giám sát của Walter Tobler. Một số chi tiết về các bộ dữ liệu này được mô tả bởi John Mackenzie, tại địa chỉ http://www1.udel.edu/johnmack/frec480/cholera/cholera2.html .

Thật không may, tọa độ của tử vong, máy bơm và đường phố sử dụng hệ tọa độ tùy ý, không phải tọa độ ánh xạ phù hợp với các ứng dụng hoặc phần mềm ánh xạ khác trong R (gói không gian, ggmap, v.v.)

Trong http://freakonometrics.hypuitses.org/19213 Arthur Charpentier sử dụng ggmap với một phiên bản của dữ liệu John Snow từ http://www.rtwilson.com/doads/SnowGIS_v2.zip . Các Cholera_Deaths.shptập tin, tuy nhiên chỉ liệt kê 489 cái chết, không phải là 578 tôi đã ghi lại HistData::Snow.deaths.

Một ý tưởng là tìm mối quan hệ giữa phương tiện và độ lệch chuẩn của tọa độ (x, y) và giải mã tuyến tính, nhưng có lẽ có cách nào tốt hơn?

Đây là những gì tôi đã cố gắng cho đến nay

> 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

Đọc tệp 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
>

Được rồi, sau đó tôi cố gắng thay đổi tỷ lệ Dđể có cùng phương tiện và độ lệch chuẩn như XX, nhưng một cái gì đó không hoạt động chính xác ở đây-- nghĩa là cột Dscaledphải hóa ra tương đương với 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 
>

EDIT: Có thể hữu ích trong vấn đề này khi xem bản đồ của Snow được vẽ bởi chức năng mới, SnowMap(axis.labels=TRUE)hiện đang ở phiên bản phát triển của HistData(rev 102) trên R-Forge. Các nhãn trục hiển thị nguồn gốc của hệ tọa độ ở góc dưới bên trái vì chúng nằm trong Snow.*bộ dữ liệu của tôi .

Bản đồ tuyết


Tôi vừa mới cố gắng mở rộng quy mô của các máy bơm từ mỗi bộ dữ liệu để phù hợp. Tôi không tin đường dây trợ giúp (Snow.pumps) về tọa độ là 100 mét, vì tỷ lệ khoảng 54 (và bản dịch) thực hiện công việc tốt nhất là ánh xạ các tọa độ này sang tọa độ lưới Anh của shapefile (chắc chắn nằm trong mét). Ngay cả sau đó các điểm không trùng lặp chính xác, một số xoay / xiên khác hiện rõ ràng. Vì có ít máy bơm hơn nên có thể xác định các máy bơm tương ứng trong mỗi bộ dữ liệu và tính toán ca / ​​dịch cho những máy bơm đó.
Spainedman

Tôi giả sử bạn đã xem HistData / inst / doc / Snow_deaths-trùng lặp.html và thấy nó không hữu ích?
barrycarter

Tôi cũng nhận thấy rằng tôi có thể chuyển đổi tuyến tính tọa độ trong Snow.*các tệp của mình sang các tọa độ trong bản đồ dựa trên GIS với vị trí của hai máy bơm hoặc ba để kiểm tra độ chính xác. Thật không may, không có nhãn cho máy bơm trong các SnowGIStệp và tôi chưa thấy một ví dụ nào về cách vẽ đồ thị để tôi có thể so sánh chúng một cách trực quan.
user101089

1
Trong một giây ở đó sau khi đọc tiêu đề của bạn, tôi nghĩ rằng bạn muốn lập bản đồ tọa độ trong Westeros .
dùng35594

Câu trả lời:


4

Có lẽ đánh giá shapefile từ http://donboyes.com/2011/10/14/john-snow-and-serendipity nó có 578 điểm.

Tôi không nghĩ việc cố gắng liên kết các Cái chết tuyết của HistData với phiên bản của Robin Wilson (@robintw) sẽ hoạt động vì shapefile chứa một tọa độ điểm duy nhất cho nhiều cái chết tại một địa chỉ, thay vì nhiều điểm được xếp chồng lên nhau từ đường phố trong bản đồ .

Phiên bản của Robin chắc chắn thiếu rất nhiều điểm. Từ một cái nhìn nhanh chóng, có khá nhiều cái chết đơn lẻ. Một vấn đề khác nằm gần trung tâm bản đồ hơn, nơi nó không khớp chính xác khi được đặt cạnh nhau (điều này cũng có thể nhìn thấy trong bản đồ Wikipedia ) và điều này che khuất một số điểm.

Trích xuất bản đồ được cung cấp trong bản tải xuống :

nhập mô tả hình ảnh ở đây

Trích xuất từ phiên bản UCLA :

nhập mô tả hình ảnh ở đây


Tuyệt quá! Để cụ thể, liên kết đến các .shptệp là donboyes.com/doad/snow_shp.zip
user101089

2

Để hoàn thành câu trả lời cho câu hỏi này, đoạn mã sau tìm thấy phép biến đổi tuyến tính của tọa độ trong các tệp Tobler gốc (in HistData) và các đoạn được Don Boyes đưa ra.

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]

Sau đó, tương quan và hồi quy D [, 1] trên X [, 1] và D [, 2] trên X [, 2]. Phép biến đổi tuyến tính được cho bởi các hệ số hồi quy.

> 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  
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.