hey i want to get the lat and long of only those having distance less than 5000m or 5kms
how i can write code for that
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
set.seed(19)
store=data.frame(lat=runif(1,33.45,33.75),long=runif(1,72.83,73.17))
onlineloc=data.frame(lat=runif(10,33.45,33.75),long=runif(10,72.83,73.17))
p=runif(1, 0, 1)
if(p>0.5){instore=data.frame(lat=runif(10,33.45,33.75),long=runif(10,72.83,73.17))
Sys.sleep(10)
print(instore)
}else{Sys.sleep(10)
print("NO INSTORE CUSTOMER APPEARED")
}
#> lat long
#> 1 33.70783 73.10150
#> 2 33.66670 73.14288
#> 3 33.60976 73.09793
#> 4 33.57661 73.06561
#> 5 33.60510 73.06707
#> 6 33.67357 72.91224
#> 7 33.59360 72.90426
#> 8 33.56916 73.14372
#> 9 33.63713 72.94552
#> 10 33.53505 72.88051
#instore=data.frame(lat=runif(10,33.45,33.75),long=runif(10,72.83,73.17))
instore
#> lat long
#> 1 33.70783 73.10150
#> 2 33.66670 73.14288
#> 3 33.60976 73.09793
#> 4 33.57661 73.06561
#> 5 33.60510 73.06707
#> 6 33.67357 72.91224
#> 7 33.59360 72.90426
#> 8 33.56916 73.14372
#> 9 33.63713 72.94552
#> 10 33.53505 72.88051
instorecustomer=round(instore,digits = 2)
onlinecustomer=round(onlineloc,digits = 2)
plot(onlineloc,main="Online and instore customer loc",col=" red")
points(instore,pch=2)
points(store,pch=15)
legend("bottomright",legend=c("Instore Customer","Online Customer","Store"),pch=c(2,1,15),col=c("black","red","black"))
onlinecustomer
#> lat long
#> 1 33.65 73.10
#> 2 33.47 73.14
#> 3 33.56 72.91
#> 4 33.52 73.14
#> 5 33.54 72.97
#> 6 33.62 73.02
#> 7 33.70 72.98
#> 8 33.67 73.12
#> 9 33.57 73.07
#> 10 33.58 73.16
instorecustomer
#> lat long
#> 1 33.71 73.10
#> 2 33.67 73.14
#> 3 33.61 73.10
#> 4 33.58 73.07
#> 5 33.61 73.07
#> 6 33.67 72.91
#> 7 33.59 72.90
#> 8 33.57 73.14
#> 9 33.64 72.95
#> 10 33.54 72.88
library(sf)
p1=onlinecustomer%>%st_as_sf(coords = c("lat","long"), crs = 4326)
p2=instorecustomer%>%st_as_sf(coords = c("lat","long"), crs = 4326)
#nrow(st_join(onlinecluster, instorecustomer, join = st_equals, left = F)) == nrow(p1)
i=nrow(st_join(p1,p2, join = st_equals, left = F))
orders=nrow(onlinecustomer)
orders=orders-i
print(paste("No of task to be delivered are",orders))
#> [1] "No of task to be delivered are 10"
library(data.table)
df<-structure(list(ID=c(1:10), lat = c(onlinecustomer$lat)
, lon = c(onlinecustomer$long))
, col.Names = c("ID","lat", "lon"), row.names = c(NA, -10L), class = c("data.table","data.frame"))
df
#> ID lat lon
#> 1: 1 33.65 73.10
#> 2: 2 33.47 73.14
#> 3: 3 33.56 72.91
#> 4: 4 33.52 73.14
#> 5: 5 33.54 72.97
#> 6: 6 33.62 73.02
#> 7: 7 33.70 72.98
#> 8: 8 33.67 73.12
#> 9: 9 33.57 73.07
#> 10: 10 33.58 73.16
ref<-structure(list(ID=letters[1:10], lat = c(instorecustomer$lat), lon = c(instorecustomer$long))
, col.Names = c("ID","lat", "lon"),row.names = c(NA, -10L), class = c("data.table","data.frame"))
ref
#> ID lat lon
#> 1: a 33.71 73.10
#> 2: b 33.67 73.14
#> 3: c 33.61 73.10
#> 4: d 33.58 73.07
#> 5: e 33.61 73.07
#> 6: f 33.67 72.91
#> 7: g 33.59 72.90
#> 8: h 33.57 73.14
#> 9: i 33.64 72.95
#> 10: j 33.54 72.88
#Setting to data.table format
setDT(df)
setDT(ref)
#creating a table with cartesian join
df1<-setkey(df[,c(k=1,.SD)],k)[ref[,c(k=1,.SD)],allow.cartesian=TRUE][,k:=NULL]
df1
#calculating the Euclidean distance and giving a rank in ascending order of distance
df1[,EuDist:=sqrt((lat-i.lat)^2+(lon-i.lon)^2)][,distRank:=rank(EuDist,ties="random"),by=.(ID)]
df1
#> ID lat lon i.ID i.lat i.lon EuDist distRank
#> 1: 1 33.65 73.10 a 33.71 73.10 0.06000000 4
#> 2: 2 33.47 73.14 a 33.71 73.10 0.24331050 6
#> 3: 3 33.56 72.91 a 33.71 73.10 0.24207437 9
#> 4: 4 33.52 73.14 a 33.71 73.10 0.19416488 6
#> 5: 5 33.54 72.97 a 33.71 73.10 0.21400935 9
#> 6: 6 33.62 73.02 a 33.71 73.10 0.12041595 5
#> 7: 7 33.70 72.98 a 33.71 73.10 0.12041595 3
#> 8: 8 33.67 73.12 a 33.71 73.10 0.04472136 2
#> 9: 9 33.57 73.07 a 33.71 73.10 0.14317821 7
#> 10: 10 33.58 73.16 a 33.71 73.10 0.14317821 6
#> 11: 1 33.65 73.10 b 33.67 73.14 0.04472136 2
#> 12: 2 33.47 73.14 b 33.67 73.14 0.20000000 5
#> 13: 3 33.56 72.91 b 33.67 73.14 0.25495098 10
#> 14: 4 33.52 73.14 b 33.67 73.14 0.15000000 5
#> 15: 5 33.54 72.97 b 33.67 73.14 0.21400935 10
#> 16: 6 33.62 73.02 b 33.67 73.14 0.13000000 9
#> 17: 7 33.70 72.98 b 33.67 73.14 0.16278821 8
#> 18: 8 33.67 73.12 b 33.67 73.14 0.02000000 1
#> 19: 9 33.57 73.07 b 33.67 73.14 0.12206556 5
#> 20: 10 33.58 73.16 b 33.67 73.14 0.09219544 4
#> 21: 1 33.65 73.10 c 33.61 73.10 0.04000000 1
#> 22: 2 33.47 73.14 c 33.61 73.10 0.14560220 3
#> 23: 3 33.56 72.91 c 33.61 73.10 0.19646883 7
#> 24: 4 33.52 73.14 c 33.61 73.10 0.09848858 3
#> 25: 5 33.54 72.97 c 33.61 73.10 0.14764823 7
#> 26: 6 33.62 73.02 c 33.61 73.10 0.08062258 4
#> 27: 7 33.70 72.98 c 33.61 73.10 0.15000000 6
#> 28: 8 33.67 73.12 c 33.61 73.10 0.06324555 3
#> 29: 9 33.57 73.07 c 33.61 73.10 0.05000000 3
#> 30: 10 33.58 73.16 c 33.61 73.10 0.06708204 2
#> 31: 1 33.65 73.10 d 33.58 73.07 0.07615773 5
#> 32: 2 33.47 73.14 d 33.58 73.07 0.13038405 2
#> 33: 3 33.56 72.91 d 33.58 73.07 0.16124515 5
#> 34: 4 33.52 73.14 d 33.58 73.07 0.09219544 2
#> 35: 5 33.54 72.97 d 33.58 73.07 0.10770330 4
#> 36: 6 33.62 73.02 d 33.58 73.07 0.06403124 2
#> 37: 7 33.70 72.98 d 33.58 73.07 0.15000000 7
#> 38: 8 33.67 73.12 d 33.58 73.07 0.10295630 6
#> 39: 9 33.57 73.07 d 33.58 73.07 0.01000000 1
#> 40: 10 33.58 73.16 d 33.58 73.07 0.09000000 3
#> 41: 1 33.65 73.10 e 33.61 73.07 0.05000000 3
#> 42: 2 33.47 73.14 e 33.61 73.07 0.15652476 4
#> 43: 3 33.56 72.91 e 33.61 73.07 0.16763055 6
#> 44: 4 33.52 73.14 e 33.61 73.07 0.11401754 4
#> 45: 5 33.54 72.97 e 33.61 73.07 0.12206556 5
#> 46: 6 33.62 73.02 e 33.61 73.07 0.05099020 1
#> 47: 7 33.70 72.98 e 33.61 73.07 0.12727922 4
#> 48: 8 33.67 73.12 e 33.61 73.07 0.07810250 4
#> 49: 9 33.57 73.07 e 33.61 73.07 0.04000000 2
#> 50: 10 33.58 73.16 e 33.61 73.07 0.09486833 5
#> 51: 1 33.65 73.10 f 33.67 72.91 0.19104973 8
#> 52: 2 33.47 73.14 f 33.67 72.91 0.30479501 10
#> 53: 3 33.56 72.91 f 33.67 72.91 0.11000000 4
#> 54: 4 33.52 73.14 f 33.67 72.91 0.27459060 10
#> 55: 5 33.54 72.97 f 33.67 72.91 0.14317821 6
#> 56: 6 33.62 73.02 f 33.67 72.91 0.12083046 6
#> 57: 7 33.70 72.98 f 33.67 72.91 0.07615773 2
#> 58: 8 33.67 73.12 f 33.67 72.91 0.21000000 8
#> 59: 9 33.57 73.07 f 33.67 72.91 0.18867962 9
#> 60: 10 33.58 73.16 f 33.67 72.91 0.26570661 9
#> 61: 1 33.65 73.10 g 33.59 72.90 0.20880613 9
#> 62: 2 33.47 73.14 g 33.59 72.90 0.26832816 8
#> 63: 3 33.56 72.91 g 33.59 72.90 0.03162278 1
#> 64: 4 33.52 73.14 g 33.59 72.90 0.25000000 8
#> 65: 5 33.54 72.97 g 33.59 72.90 0.08602325 1
#> 66: 6 33.62 73.02 g 33.59 72.90 0.12369317 7
#> 67: 7 33.70 72.98 g 33.59 72.90 0.13601471 5
#> 68: 8 33.67 73.12 g 33.59 72.90 0.23409400 9
#> 69: 9 33.57 73.07 g 33.59 72.90 0.17117243 8
#> 70: 10 33.58 73.16 g 33.59 72.90 0.26019224 8
#> 71: 1 33.65 73.10 h 33.57 73.14 0.08944272 6
#> 72: 2 33.47 73.14 h 33.57 73.14 0.10000000 1
#> 73: 3 33.56 72.91 h 33.57 73.14 0.23021729 8
#> 74: 4 33.52 73.14 h 33.57 73.14 0.05000000 1
#> 75: 5 33.54 72.97 h 33.57 73.14 0.17262677 8
#> 76: 6 33.62 73.02 h 33.57 73.14 0.13000000 8
#> 77: 7 33.70 72.98 h 33.57 73.14 0.20615528 10
#> 78: 8 33.67 73.12 h 33.57 73.14 0.10198039 5
#> 79: 9 33.57 73.07 h 33.57 73.14 0.07000000 4
#> 80: 10 33.58 73.16 h 33.57 73.14 0.02236068 1
#> 81: 1 33.65 73.10 i 33.64 72.95 0.15033296 7
#> 82: 2 33.47 73.14 i 33.64 72.95 0.25495098 7
#> 83: 3 33.56 72.91 i 33.64 72.95 0.08944272 3
#> 84: 4 33.52 73.14 i 33.64 72.95 0.22472205 7
#> 85: 5 33.54 72.97 i 33.64 72.95 0.10198039 3
#> 86: 6 33.62 73.02 i 33.64 72.95 0.07280110 3
#> 87: 7 33.70 72.98 i 33.64 72.95 0.06708204 1
#> 88: 8 33.67 73.12 i 33.64 72.95 0.17262677 7
#> 89: 9 33.57 73.07 i 33.64 72.95 0.13892444 6
#> 90: 10 33.58 73.16 i 33.64 72.95 0.21840330 7
#> 91: 1 33.65 73.10 j 33.54 72.88 0.24596748 10
#> 92: 2 33.47 73.14 j 33.54 72.88 0.26925824 9
#> 93: 3 33.56 72.91 j 33.54 72.88 0.03605551 2
#> 94: 4 33.52 73.14 j 33.54 72.88 0.26076810 9
#> 95: 5 33.54 72.97 j 33.54 72.88 0.09000000 2
#> 96: 6 33.62 73.02 j 33.54 72.88 0.16124515 10
#> 97: 7 33.70 72.98 j 33.54 72.88 0.18867962 9
#> 98: 8 33.67 73.12 j 33.54 72.88 0.27294688 10
#> 99: 9 33.57 73.07 j 33.54 72.88 0.19235384 10
#> 100: 10 33.58 73.16 j 33.54 72.88 0.28284271 10
#> ID lat lon i.ID i.lat i.lon EuDist distRank
#selecting the shortest distance
df1<-df1[distRank==1]
df1$lat
#> [1] 33.67 33.65 33.57 33.62 33.56 33.54 33.47 33.52 33.58 33.70
df1$lon
#> [1] 73.12 73.10 73.07 73.02 72.91 72.97 73.14 73.14 73.16 72.98
df1$i.lat
#> [1] 33.67 33.61 33.58 33.61 33.59 33.59 33.57 33.57 33.57 33.64
df1$i.lon
#> [1] 73.14 73.10 73.07 73.07 72.90 72.90 73.14 73.14 73.14 72.95
library(mapsapi)
library(gmapsdistance)
library(ggmap)
#> Loading required package: ggplot2
#> Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
#> Please cite ggmap if you use it! See citation("ggmap") for details.
register_google(key="")
finalloc=paste0(LAT=df1$lat,"+",LONG=df1$lon)
startloc=paste0(LAT=df1$i.lat,"+",LONG=df1$i.lon)
finalloc
#> [1] "33.67+73.12" "33.65+73.1" "33.57+73.07" "33.62+73.02" "33.56+72.91"
#> [6] "33.54+72.97" "33.47+73.14" "33.52+73.14" "33.58+73.16" "33.7+72.98"
startloc
#> [1] "33.67+73.14" "33.61+73.1" "33.58+73.07" "33.61+73.07" "33.59+72.9"
#> [6] "33.59+72.9" "33.57+73.14" "33.57+73.14" "33.57+73.14" "33.64+72.95"
addresses <- data.frame(from = c(finalloc),
to = c(startloc))
addresses <- as.data.frame(lapply(addresses, function(x) as.character(x)), stringsAsFactors = F)
addresses
#> from to
#> 1 33.67+73.12 33.67+73.14
#> 2 33.65+73.1 33.61+73.1
#> 3 33.57+73.07 33.58+73.07
#> 4 33.62+73.02 33.61+73.07
#> 5 33.56+72.91 33.59+72.9
#> 6 33.54+72.97 33.59+72.9
#> 7 33.47+73.14 33.57+73.14
#> 8 33.52+73.14 33.57+73.14
#> 9 33.58+73.16 33.57+73.14
#> 10 33.7+72.98 33.64+72.95
d <- mapdist(addresses$from, addresses$to, mode = "driving",key="")
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.47+73.14&destinations=33.57+73.14&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.52+73.14&destinations=33.57+73.14&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.54+72.97&destinations=33.59+72.9&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.56+72.91&destinations=33.59+72.9&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.57+73.07&destinations=33.58+73.07&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.58+73.16&destinations=33.57+73.14&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.62+73.02&destinations=33.61+73.07&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.65+73.1&destinations=33.61+73.1&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.67+73.12&destinations=33.67+73.14&key=xxx&mode=driving
#> Source : https://maps.googleapis.com/maps/api/distancematrix/json?origins=33.7+72.98&destinations=33.64+72.95&key=xxx&mode=driving
d
#> # A tibble: 10 x 9
#> from to m km miles seconds minutes hours mode
#> <chr> <chr> <int> <dbl> <dbl> <int> <dbl> <dbl> <chr>
#> 1 33.67+73.12 33.67+73.14 12706 12.7 7.90 1421 23.7 0.395 driving
#> 2 33.65+73.1 33.61+73.1 3613 3.61 2.25 794 13.2 0.221 driving
#> 3 33.57+73.07 33.58+73.07 12762 12.8 7.93 1225 20.4 0.340 driving
#> 4 33.62+73.02 33.61+73.07 7413 7.41 4.61 1556 25.9 0.432 driving
#> 5 33.56+72.91 33.59+72.9 4258 4.26 2.65 677 11.3 0.188 driving
#> 6 33.54+72.97 33.59+72.9 2915 2.92 1.81 354 5.9 0.0983 driving
#> 7 33.47+73.14 33.57+73.14 7021 7.02 4.36 1679 28.0 0.466 driving
#> 8 33.52+73.14 33.57+73.14 16318 16.3 10.1 2827 47.1 0.785 driving
#> 9 33.58+73.16 33.57+73.14 11471 11.5 7.13 1563 26.0 0.434 driving
#> 10 33.7+72.98 33.64+72.95 19406 19.4 12.1 2131 35.5 0.592 driving
Created on 2020-10-24 by the reprex package (v0.3.0)