Я написал функцию, чтобы определить, попадает ли данная точка 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/лат точку.
над (SpatialPoints (data.frame (долгота = -77, ш = 42))) дает ошибку: Ошибка в (функции (классы, FDEF, mtable): не удалось найти унаследованный метод для функции 'over' для подписи '' SpatialPoints ',' missing '' –
Я вижу, что вы сделали, но ваше использование over() предполагает, что мы знаем индекс shp (например, America/New_York) Но мне нужно имя индекса формы, так что данная точка lat/lon попадает в правильный набор координат lat/lon из файла shp. Это подразумевает, по крайней мере, цикл while, –
Я предлагаю редактировать ваш оригинальный пост. Пожалуйста, прочитайте [как обеспечить минимальные воспроизводимые примеры в R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610). Затем отредактируйте и улучшите его соответствующим образом. Хорошая почта обычно обеспечивает минимальные входные данные, желаемые выходные данные и попытки кода - все операции копирования и вставки в новом/чистом сеансе R. Я не могу воспроизвести вашу ошибку (пакеты обновления?). И я не понимаю, как вы должны выглядеть. – lukeA