конвертировать шейп-файлы уровня Zip3 и zip5 в координаты x-y

Я не уверен, с чего начать, так как моя ГИС, играющая в R, заключалась в том, чтобы строить графики с использованием ggplot2 и других пакетов, использующих координаты latlong. Что мне нужно сделать сейчас, так это использовать компонент визуализации в Microstrategy, который использует шейп-файл в виде файла HTML, содержащего координаты x-y для графика (т.е. верхний левый угол равен 0,0). Пример файла уровня состояния:

<HTML><HEAD><TITLE>untitled</TITLE></HEAD><BODY>
<IMG SRC="" USEMAP="#myMap" WIDTH="812" HEIGHT="713" BORDER="0" />
<MAP NAME="myMap">
<AREA SHAPE="POLY" HREF="#" ALT="Texas" COORDS="299,363,299,360,....." />
</MAP></BODY></HTML>

Точки, перечисленные в «координатах», представляют собой точки X и Y относительно «изображения» 812 на 713, которое рисуется и раскрашивается на лету.

У меня есть файлы shp, shx, dbf для Zip3 и Zip5 с http://www.vdstech.com/usa-data.aspx, но я не знаю, с чего даже начать преобразование! Я не возражаю выполнять тяжелую работу по форматированию HTML-файла вручную, это преобразование X-Y, на котором я застрял (ржавое, не касавшееся ГИС в течение некоторого времени):

Следующий код импортирует шейп-файл в R.

library(rgdal)
zip3 <- readOGR(dsn = '/Users/adempsey/Downloads/zip3'), layer = 'zip3')

После чего я застрял и в настоящее время ищу учебник о том, как извлечь координаты zip3 + xy в фрейм данных, который затем я могу использовать для создания моего окончательного файла с

обновление 2

используя следующее, я могу преобразовать в фрейм данных, но я не могу извлечь связанный код zip3, который, по-видимому, хранится в связанном файле dbf

Row long      lat order  hole piece group id
1 -151.0604 70.41873     1 FALSE     1   0.1  0
2 -150.7620 70.49722     2 FALSE     1   0.1  0

Да, это выходит за рамки моего нынешнего ржавого R

update3 Этот код выгружает почтовые индексы во фрейм данных zip3.codes ‹- as.data.frame(zip3) Который должен комбинироваться с чем-то вроде zip3.df ‹- fortify(zip3@polygons[[1000]]) Где 1000 будут заменены всеми строками zip3.codes, связанными с конкретным zip3


person Andrew Dempsey    schedule 13.02.2013    source источник
comment
а как насчет fortify из пакета ggplot2?   -  person mnel    schedule 14.02.2013
comment
Я не знаком с этой функцией. Я все еще разбираюсь с переменной zip3 и ее структурой.   -  person Andrew Dempsey    schedule 14.02.2013
comment
fortify преобразует SpatialPolygonsDataFrame в data.frame для построения графика с ggplot2.   -  person mnel    schedule 14.02.2013
comment
Хорошо, я обнаружил, что коды zip3 находятся в файле DBF, но я не могу понять, как связать их с файлом shp и, таким образом, поместить их в свой фрейм данных.   -  person Andrew Dempsey    schedule 14.02.2013
comment
Да, но к ним обращался readOGR и данные, доступные в R.   -  person mnel    schedule 14.02.2013
comment
Как мне добраться до них? Я пробовал zip3@ZIPC... Я не могу определить «слот», в котором содержится имя zip, и он не отображается в результирующем фрейме данных из fortify.   -  person Andrew Dempsey    schedule 14.02.2013
comment
давайте продолжим обсуждение в чате   -  person mnel    schedule 14.02.2013


Ответы (1)


Вы можете использовать пакет fastshp для загрузки данных:

 install.packages("fastshp",,"http://rforge.net")
 library(fastshp)
 s <- read.shp("zip5.shp", format="polygon")

s теперь представляет собой список всех форм ZIP. Вас интересуют компоненты x и y - например, для построения первого ZIP-файла просто используйте что-то вроде

 plot(s[[1]]$x, s[[1]]$y, asp=1.25)
 polygon(s[[1]]$x, s[[1]]$y, col="#eeeeee")

Чтобы сопоставить имена, используйте read.dbf из foreign:

 library(foreign)
 d <- read.dbf("zip5.dbf", as.is=TRUE)
 names(s) <- d$ZIP5

Подробнее о доступных форматах см. ?read.shp. «Многоугольник» использует NA для разделения отдельных полигонов, «список» использует индексацию, чтобы дать вам части.

Кстати, набор данных несколько сомнителен, возможно, вы захотите изучить данные переписи TIGER/Line ZCTA5 (самые последние — за 2010 год).

person Simon Urbanek    schedule 14.02.2013