2016-08-18 5 views
0

Я написал функцию, чтобы определить, попадает ли данная точка lat/lon в определенный полигон из файла tz_world.shp. Я перехожу в lon = -77, lat = 42, который находится в штате Нью-Йорк. Идентификатор из 155-й записи - «Америка/Нью-Йорк». Но использование point.inpoly возвращает объект длины с нулевой строкой. Вот мой код. Пожалуйста помоги. Благодарю. BSL.R: Точка поиска в полигоне часового пояса

i = 155 

timeZoneList = split(timeZonesShpFile, timeZonesShpFile$TZID) 

ps = lapply(timeZoneList, Polygon) 

p1 = lapply(seq_along(ps), function(i) Polygons(list(ps[[i]]), ID = names(timeZoneList)[i])) 

my_spatial_polys = SpatialPolygons(p1, proj4string = CRS("+proj=longlat +datum=WGS84")) 

polyNames = sapply(slot(my_spatial_spdf, 'polygons'), function(i) slot(i, 'ID')) 

pt = SpatialPointsDataFrame(cbind(lon,lat), data.frame(row=1), proj4string=CRS("+proj=longlat +datum=WGS84")) 

thisPoly = my_spatial_polys[ i ] 

thisList = getSpPPolygonsIDSlots(thisPoly) 

thisDf = data.frame(row = 1, row.names = thisList) 

thisSpdf = SpatialPolygonsDataFrame(thisPoly, thisDf) 

pIp = point.in.poly(pt, thisSpdf) 

> pIp 

[1] coordinates row   row.1  
<0 rows> (or 0-length row.names) 

Экран-вид на типично показывает координатам ограничивающего LON/лат точек для NYS, которые должны окружают мой комплект поставки LON/лат точку.

ответ

2

Вот альтернативный подход:

library(maptools) 
library(rgdal) 
library(rgeos) 
download.file("http://efele.net/maps/tz/world/tz_world.zip", tf <- tempfile(fileext = ".zip")) 
unzip(tf, exdir = tempdir()) 
shp <- readShapeSpatial(file.path(tempdir(), "world", "tz_world.shp")) 
over(
    SpatialPoints(data.frame(lon = c(13, -77, 51), lat = c(52, 42, 0))), # Berlin, New York, London 
    shp[shp$TZID %in% c("America/New_York", "Europe/Berlin"), ] 
) 
#    TZID 
# 1 Europe/Berlin 
# 2 America/New_York 
# 3    <NA> 
+0

над (SpatialPoints (data.frame (долгота = -77, ш = 42))) дает ошибку: Ошибка в (функции (классы, FDEF, mtable): не удалось найти унаследованный метод для функции 'over' для подписи '' SpatialPoints ',' missing '' –

+0

Я вижу, что вы сделали, но ваше использование over() предполагает, что мы знаем индекс shp (например, America/New_York) Но мне нужно имя индекса формы, так что данная точка lat/lon попадает в правильный набор координат lat/lon из файла shp. Это подразумевает, по крайней мере, цикл while, –

+0

Я предлагаю редактировать ваш оригинальный пост. Пожалуйста, прочитайте [как обеспечить минимальные воспроизводимые примеры в R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610). Затем отредактируйте и улучшите его соответствующим образом. Хорошая почта обычно обеспечивает минимальные входные данные, желаемые выходные данные и попытки кода - все операции копирования и вставки в новом/чистом сеансе R. Я не могу воспроизвести вашу ошибку (пакеты обновления?). И я не понимаю, как вы должны выглядеть. – lukeA