আর এর বহুভুতে স্থানিক পয়েন্টের ডেটাতে যোগদান করুন


21

আমি পয়েন্ট ডেটা এবং বহুভুজ ডেটার মধ্যে একটি স্থানিক যোগদান করার চেষ্টা করছি।

আমার কাছে ডেটা রয়েছে যা আমার সিএসভি ফাইল এ-তে একটি ইভেন্টের স্থানিক স্থানাঙ্ক নির্দেশ করে এবং আরও একটি ফাইল, শেফফিল বি, যাতে বহুভুজ হিসাবে কোনও অঞ্চলের সীমানা থাকে।

head(A)
  month   longitude latitude lsoa_code                   crime_type
1 2014-09 -1.550626 53.59740 E01007359        Anti-social behaviour
2 2014-09 -1.550626 53.59740 E01007359                 Public order
3 2014-09 -1.865236 53.93678 E01010646        Anti-social behaviour

head(B@data)
  code      name                                  altname
0 E05004934 Longfield, New Barn and Southfleet    <NA>
1 E05000448                   Lewisham Central    <NA>
2 E05003149                            Hawcoat    <NA>

আমি দুর্ভাগ্যবশত আমি একটি বৈশিষ্ট্য ভিত্তিক যোগদান সঞ্চালন করা সম্ভব নয় আমার shapefile বি অপরাধ ঘটনা আমার এলাকায় এ ঘটতে ম্যাপ অপরাধের তথ্য একটি যোগ দিতে চান codeহিসাবে একটি কোড বি কোড চেয়ে ভিন্ন ইউনিট বোঝায়

আমি বেশ কয়েকটি টিউটোরিয়াল এবং পোস্ট পড়েছি কিন্তু উত্তর খুঁজে পাইনি। আমি চেষ্টা করেছিলাম:

joined = over(A, B)

এবং overlay, কিন্তু আমি যা চেয়েছিলাম তা সম্পাদন করে নি।

এটিতে সরাসরি যোগদান করার কোনও উপায় আছে বা এ থেকে অন্য ফর্ম্যাটে অন্তর্বর্তী রূপান্তর প্রয়োজন হবে?

ধারণাগতভাবে আমি এগুলির সেই পয়েন্টগুলি নির্বাচন করতে চাই যা codeবি এর অঞ্চলে পড়ে ("আর্কজিআইএসের স্থানিক অবস্থানের ভিত্তিতে যোগদানের অনুরূপ")।

কারও কি এই সমস্যাটি আছে এবং এটি সমাধান হয়েছে?


আপনি কি point.in.polygon()প্যাকেজে তাকিয়েছেন sp?

@ arvi1000 আমার কাছে আছে এবং এটি আবার চেষ্টা করব। আমার চিন্তার সম্পর্কে point.in.polygonছিল কিনা এই ভেরিয়েবল সংরক্ষণ করবে monthএবং crime_type। তুমি কি জানো?
ben_aaron

আমি এর সাথে আরও কিছু চেষ্টা করেছি point.in.polyএবং পরিশেষে সেই পয়েন্টগুলি নির্বাচন করেছি যা সম্পর্কিত বহুভুজের মধ্যে পড়ে ধন্যবাদ।
ben_aaron

তারপরে সম্ভবত আপনার নিজের প্রশ্নের উত্তরটি আপনার সমাধান দিয়ে দেওয়া উচিত। মনে রাখবেন, ভাল উত্তরগুলি এই সাইটটির সম্পর্কে।
স্লোলিয়ার্নার

উত্তর:


8

স্পেসিয়াল ইকো প্যাকেজে point.in.poly ফাংশনটি একটি স্পিওলপয়েন্টস ডেটা ফ্রেম পয়েন্টগুলির স্পটিয়ালপয়েন্টস ডেটা ফ্রেম অবজেক্ট দেয় যা একটি এসপি বহুভুজ বস্তুকে ছেদ করে এবং বিকল্পভাবে বহুভুজ বৈশিষ্ট্য যুক্ত করে।

প্রথমে প্রয়োজনীয় প্যাকেজ যুক্ত করতে এবং কিছু উদাহরণ ডেটা তৈরি করতে দিন।

require(spatialEco)
require(sp)
data(meuse)
coordinates(meuse) = ~x+y
sr1=Polygons(list(Polygon(cbind(c(180114, 180553, 181127, 181477, 181294, 181007, 180409,
  180162, 180114), c(332349, 332057, 332342, 333250, 333558, 333676,
  332618, 332413, 332349)))),'1')
sr2=Polygons(list(Polygon(cbind(c(180042, 180545, 180553, 180314, 179955, 179142, 179437,
  179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683,
  331133, 331623, 332152, 332357, 332373)))),'2')
sr3=Polygons(list(Polygon(cbind(c(179110, 179907, 180433, 180712, 180752, 180329, 179875,
  179668, 179572, 179269, 178879, 178600, 178544, 179046, 179110),
  c(331086, 330620, 330494, 330265, 330075, 330233, 330336, 330004,
  329783, 329665, 329720, 329933, 330478, 331062, 331086)))),'3')
sr4=Polygons(list(Polygon(cbind(c(180304, 180403,179632,179420,180304),
  c(332791, 333204, 333635, 333058, 332791)))),'4')
sr=SpatialPolygons(list(sr1,sr2,sr3,sr4))
srdf=SpatialPolygonsDataFrame(sr, data.frame(row.names=c('1','2','3','4'), PIDS=1:4, y=runif(4)))

এখন, ডেটা ঘুরে দেখুন এবং এটি প্লট করুন plot

head(srdf@data)  # polygons
head(meuse@data) # points
plot(srdf)
points(meuse, pch=20)

পরিশেষে, আমরা বহুভুজ দিয়ে পয়েন্টগুলি ছেদ করতে পারি। ফলাফলগুলি স্প্যাটিয়ালপয়েন্টস ডেটা ফ্রেম অবজেক্ট হবে, এই ক্ষেত্রে, দুটি অতিরিক্ত বৈশিষ্ট্য (পিআইডিএস, ওয়াই) রয়েছে যা এসআরডিএফ বহুভুজ ডেটাতে অন্তর্ভুক্ত ছিল।

  pts.poly <- point.in.poly(meuse, srdf)
    head(pts.poly@data)

বহুভুজ ডেটাতে কোনও অনন্য সনাক্তকরণ কলাম না থাকলে আপনি সহজেই একটি যুক্ত করতে পারেন।

srdf@data$poly.ids <- 1:nrow(srdf) 

আমাদের পয়েন্টগুলি এবং বহুভুজগুলি ছেদ করার পরে, আমরা বহুভুজ ডেটার বৈশিষ্ট্যযুক্ত অনন্য বহুভুজ আইডি ব্যবহার করে পয়েন্টগুলি একত্রিত করতে পারি।

# Number of points in each polygon
tapply(pts.poly@data$lead, pts.poly@data$PIDS, FUN=length)

# Mean lead in each polygon
tapply(pts.poly@data$lead, pts.poly@data$PIDS, FUN=mean)

@ arvi1000, হ্যাঁ তবে এসপি :: point.in.polygon একটি যৌক্তিক উত্পাদন করে। স্পেসিয়ালএকো: পয়েন্ট ইন্টি.পি.এল ওভারের জন্য একটি মোড়ক তবে একটি স্পিটিপালপয়েন্টস ডেটা ফ্রেম দেয় এবং বহুভুক্ত বৈশিষ্ট্য সম্পর্কিত কিছু পদক্ষেপগুলি শর্টকাট দেয়, অনেকটা রাস্টারের মতো: ছেদটি রেজিওস :: জি ইন্টারটারেক্টের জন্য দেয়।
জেফ্রি ইভান্স

sp::point.in.polygonআসলে একটি সংখ্যাসূচক মান প্রদান করে (0 = পয়েন্ট বাইরে, 1 = ভিতরে, 2 = প্রান্তে, 3 = শীর্ষবিন্দুতে)। কিছু পরিস্থিতিতে সঠিক জিনিস হতে পারে। ভেবেছি এটি এখানে নোট করা সহায়ক ছিল, যেহেতু এটি সম্পর্কিত শর্তগুলির জন্য শীর্ষস্থানীয় গুগল ফলাফল
arvi1000

27

over()প্যাকেজ থেকে spকিছু বিভ্রান্ত হতে পারে তবে ভাল কাজ করে works আমি ধরে নিচ্ছি আপনি ইতিমধ্যে এর সাথে "এ" স্থানিক করেছেন coordinates(A) <- ~longitude+latitude:

# Overlay points and extract just the code column: 
a.data <- over(A, B[,"code"])

একটি বিন্দু স্থানিক বস্তুর পরিবর্তে, এটি কেবল আপনাকে একই নম্বর দিয়ে একটি ডেটা ফ্রেম দেয়। A হিসাবে সারি এবং বি থেকে প্রতিটি ছেদকারী বহুভুজ থেকে একক ভেরিয়েবল "কোড"

# Add that data back to A:
A$bcode <- a.data$code

আমি খুঁজে পেয়েছি over(), বহুভুজের ছেদচিহ্ন এ পয়েন্ট সঙ্গে সমস্যা আছে যদিও আমি মনে করি এটা সহজ সমাধান আমি এতদূর পাওয়া যায় হয়।
JMT2080AD

আপনার কোন সমস্যা হয়েছে?
সিম্বামাঙ্গু

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

কিছু মনে করো না. এটি অবশ্যই আমার ডেটা সহ কিছু হবে। এই পরীক্ষামূলক সেটটি সূক্ষ্মভাবে কাজ করে। r-food.org/#/food?id=m5sTjE4N&version=1
JMT2080AD

1
এটি গৃহীত উত্তরের চেয়ে অনেক বেশি সহজ পদ্ধতি এবং আরজিডিএল ব্যতীত অতিরিক্ত প্যাকেজ ইনস্টল করার প্রয়োজন নেই।
ব্রাইস ফ্র্যাঙ্ক

0

সমাধানের মতো ডিসপ্লায়ার এখানে রয়েছে:

library(spdplyr)

ukcounties <- geojsonio::geojson_read("data/Westminster_Parliamentary_Constituencies_December_2018_UK_BGC/uk_country.geojson",
                                      what = "sp")
pop <- read_excel("data/SAPE20DT7-mid-2017-parlicon-syoa-estimates-unformatted.xls",sheet = "data")
pop <- janitor::clean_names(pop)

ukcounties_pop <- ukcounties %>% inner_join(pop, by = c("pcon18nm" = "pcon11nm"))

জনসংখ্যার ডেটা আসে: https://www.ons.gov.uk/peoplepopulation andcommune/ datasets p সংসদ সংসদীয় সংস্থাটি মিডিয়ায়ারপোপুলেশন এস্টিমেটস

আমাকে ডাউনলোড করা শেপ ফাইলগুলি জিওজেসনে রূপান্তর করতে হয়েছিল: https://geoportal.statistics.gov.uk/datasets/westminster-p

আপনি এটি দ্বারা এটি করতে পারেন:

uk_constituencies <- readOGR("data/Westminster_Parliamentary_Constituencies_December_2018_UK_BGC/Westminster_Parliamentary_Constituencies_December_2018_UK_BGC.shp")
uk_constituencies # this is in tmerc format. we need to convert it to WGS84 required by geoJson format.

# First Convert to Longitude / Latitude with WGS84 Coordinate System
wgs84 = '+proj=longlat +datum=WGS84'
uk_constituencies_trans <- spTransform(uk_constituencies, CRS(wgs84))

# Convert from Spatial Dataframe to GeoJSON
uk_constituencies_json <- geojson_json(uk_constituencies_trans)

# Save as GeoJSON file on the file system.
geojson_write(uk_constituencies_json, file = "data/Westminster_Parliamentary_Constituencies_December_2018_UK_BGC/uk_country.geojson")

#read back in:
ukcounties <- geojsonio::geojson_read("data/Westminster_Parliamentary_Constituencies_December_2018_UK_BGC/uk_country.geojson",
                                      what = "sp")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.