পয়েন্টগুলি বহুভুজ শেফিলের মধ্যে পড়ে কিনা তা পরীক্ষা করা হচ্ছে


19

জিলোতে মার্কিন যুক্তরাষ্ট্রের প্রধান শহরগুলির বিভিন্ন পাড়ার জন্য শেফফিলের একটি সেট রয়েছে । আমি পরীক্ষা করে দেখতে চেয়েছিলাম যে নির্দিষ্ট কিছু আশেপাশে কোনও বিল্ডিং উপস্থিত ছিল কিনা:

library(rgeos)
library(sp)
library(rgdal)

df <- data.frame(Latitude =c(47.591351, 47.62212,47.595152),
                 Longitude = c(-122.332271,-122.353985,-122.331639),
                 names = c("Safeco Field", "Key Arena", "Century Link"))
coordinates(df) <- ~ Latitude + Longitude

wa.map <- readOGR("ZillowNeighborhoods-WA.shp", layer="ZillowNeighborhoods-WA")

sodo <- wa.map[wa.map$CITY == "Seattle"  & wa.map$NAME == "Industrial District", ]

আমি কোনও সমস্যা ছাড়াই প্লট করতে পারি

plot(sodo)
points(df$Latitude ~ df$Longitude, col = "red", cex = 1)

এখানে চিত্র বর্ণনা লিখুন

আমি proj4স্ট্রিংটি শেফফাইল থেকে আমার ডেটা ফ্রেমে মেলে

CRSobj <- CRS("+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0 ")
df@proj4string <- CRSobj

over(df, sodo)

এটি কেবল আমাকে NAমানগুলির একটি গুচ্ছ দেয় । আমি এই উত্তর চেষ্টা করেছি

spp <- SpatialPoints(df)
spp@proj4string <- CRSobj
over(spp, sodo)

তবে এখনও শুধুমাত্র NAমান পেতে । কোন ধারণা আমার আর কি চেষ্টা করা উচিত?

উত্তর:


20

স্থানিক data.frameসঠিকভাবে গঠিত হয় না। এটি কাজ করতে পারে:

library(rgeos)
library(sp)
library(rgdal)

wa.map <- readOGR("ZillowNeighborhoods-WA.shp", layer="ZillowNeighborhoods-WA")

sodo <- wa.map[wa.map$CITY == "Seattle"  & wa.map$NAME == "Industrial District", ]

# Don't use df as name, it is an R function
# Better to set longitudes as the first column and latitudes as the second
dat <- data.frame(Longitude = c(-122.332271,-122.353985,-122.331639),
                  Latitude =c(47.591351, 47.62212,47.595152),
                  names = c("Safeco Field", "Key Arena", "Century Link"))
# Assignment modified according
coordinates(dat) <- ~ Longitude + Latitude
# Set the projection of the SpatialPointsDataFrame using the projection of the shapefile
proj4string(dat) <- proj4string(sodo)

over(dat, sodo)
#  STATE COUNTY    CITY                NAME REGIONID
#1    WA   King Seattle Industrial District   271892
#2  <NA>   <NA>    <NA>                <NA>       NA
#3  <NA>   <NA>    <NA>                <NA>       NA

over(sodo, dat)
#           names
#122 Safeco Field

7

আমি ঠিক একই জিনিস করছি। পাস্কেলের উত্তর প্রায় এটি কভার করে তবে নীচের মতো আপনার আরও দুটি ধাপের প্রয়োজন হতে পারে।

#After you create your list of latlongs you must set the proj4string to longlat
proj4string(dat) <- CRS("+proj=longlat")

#Before you re-set the proj4string to the one from sodo you must actually convert #your coordinates to the new projection
dat <- spTransform(dat, proj4string(sodo))

কোন ক্ষেত্রে এই অতিরিক্ত পদক্ষেপের প্রয়োজন তা আমার কাছে পরিষ্কার নয়। আমার জন্য ব্যবহারকারী 32309 দ্বারা উত্তরটির সমাধান যথেষ্ট ভাল ছিল।
djhurio

3
এটি আপনার ডেটা কোন ফর্ম্যাটে রয়েছে তার উপর নির্ভর করে If এটি প্রক্ষেপণ এ এবং আপনি কেবল ঘোষণা করতে চান যে আপনি প্রজ 4 স্ট্রিং ব্যবহার করেন এবং আপনার ভাল হওয়া উচিত। তবে যদি এটি প্রোজেকশন বিতে হয় এবং আপনাকে প্রকৃতপক্ষে প্রজেকশন এ তে রূপান্তর করতে হয় তবে আপনাকে স্প্রেটসনফর্ম ব্যবহার করতে হবে।
জন কারি

2

আমি এই পোস্টে স্বীকৃত উত্তরের অনুরূপ পন্থা ব্যবহার করেছি তবে এর সাথে কখনই সত্যই সন্তুষ্ট হয়নি তাই আমি বিকল্পগুলির দিকে তাকিয়ে এসএফ লাইব্রেরিটি পেয়েছি found

এবং এই লাইব্রেরিটি ব্যবহার করে আপনি এরপরে কোডটি লিখতে পারেন:

library(sf)
# Shapefile from ABS: 
# https://www.abs.gov.au/AUSSTATS/abs@.nsf/DetailsPage/1270.0.55.004July%202016?OpenDocument
map = read_sf("data/ABS/shapes/SUA_2016_AUST.shp")

pnts_sf <- st_as_sf(pnts, coords = c('y', 'x'), crs = st_crs(map))

pnts <- pnts_sf %>% mutate(
  intersection = as.integer(st_intersects(geometry, map))
  , area = if_else(is.na(intersection), '', map$SUA_NAME16[intersection])
) 

pnts

আউটপুট:

         geometry intersection area    
*     <POINT [°]>        <int> <chr>   
1 (138.62 -34.92)           79 Adelaide
2 (138.58 -34.93)           79 Adelaide
3 (138.52 -34.95)           79 Adelaide
4 (152.71 -27.63)           60 Brisbane
5 (153.01 -27.57)           60 Brisbane
6  (150.73 -33.9)           31 Sydney  
7 (150.99 -33.92)           31 Sydney 

আমি এই পোস্টটি অন্য পোস্টে পোস্ট করেছি যা একই ধরণের প্রশ্ন ছিল, এখানে: আর এসএফ প্যাকেজ সহ পয়েন্টযুক্ত বহুভুজ চিহ্নিত করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.