2016-08-18 17 views
0

私は、指定された緯度/経度がtz_world.shpファイルの特定のポリゴンに含まれるかどうかを判断する関数を作成しました。私はlon = -77、lat = 42で渡します。これはニューヨーク州にあります。 155番目のエントリのIDは 'America/New_York'です。しかし、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) 

coordsの画面ビューには、提供されているlon/latポイントを囲むNYSの境界点の一般的な境界線/緯度点が表示されます。ここで

答えて

2

は別のアプローチです:(SpatialPoints(data.frame(LON = -77、緯度= 42)))オーバー

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

はエラーを与える:FDEF(機能(クラス、mtable)でエラーが発生しました: –

+0

あなたは何をしたのか分かりませんが、over()の使用は私たちがshpインデックス(例えばAmerica/New_York)を知っていることを前提としています。しかし、私が望むのは、指定された緯度/経度がshpファイルの正しい緯度/経度座標に収まるような形のインデックスの名前です。これは少なくとも「while」ループを意味します –

+0

私は編集をお勧めします元の投稿です。 Rで最小の再現可能な例を提供する(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)。それに応じて編集して改善してください。良いポストは通常​​、最小限の入力データ、望ましい出力データとコードを提供します。すべてのコピー&ペーストは、新しい/クリーンなRセッションで実行可能です。私はあなたのエラーを再現できません(パッケージを更新しますか?)。そして、私はあなたがどのように見えるかを見ません。 – lukeA

関連する問題