’’’’’‘’Mosquito Count Pre-processing’’’’’’’’’

This notebook aims to find “dubplicated” GPS points within a radius of 30m.

library(raster)
library(dplyr)
library(sf)
library(rgdal)

1. Load the raster layer as a reference to locate duplicated GPS points

# NDVI raster layer at 30m 
NDVI<-raster("F:\\Research\\Research_Cooperation\\ILRI_Mosquito_Mapping\\Mosquito\\Cover_Ratio\\Innitial\\NDVI_Mean_1km.tif")
NAvalue(NDVI)<-0
# Mosquito count shapefile data
Shapefile<-shapefile("F:\\Research\\Research_Cooperation\\ILRI_Mosquito_Mapping\\Mosquito\\Mosquito_Sampling\\WGS84_Points.shp")
# Convert Mosquito shapefile to sf object

Mos_sf<-st_as_sf(Shapefile)

row.names(Mos_sf) <- NULL # Reset index 

# Plot the shapefile and NDVI values
par(mfrow=c(1,2),pty = "s")
plot(NDVI, main="Mean NDVI Values")
plot(Shapefile, main="Mosquito Sampling Location", pch=19)

2. Extract raster position ID (row and column)

# Extract the raster column and row possition 
Pos_ID<-cellFromXY(NDVI, Shapefile)
# Convert Mosquito count to integer 

Mos_sf$Sum_Cx<-as.integer(Mos_sf$Sum_Cx)
# Merge the Pos_ID to the shapefile

Mos_sf$Ras_ID<-Pos_ID
# Convert Ras_ID to factor 
Mos_sf$Ras_ID<-as.factor(Mos_sf$Ras_ID)

3. Calculate the total of mosquito at each position

Mos_uni<- Mos_sf %>% group_by(Ras_ID)%>% summarise(Sum_total=sum(Sum_Cx))
# Reorder the raster ID column
Mos_uni$Ras_ID<-as.integer(as.character(Mos_uni$Ras_ID)) 

Mos_uni<-Mos_uni %>% arrange(Ras_ID)

# Drop duplicated raster ID in Mos_sf

Mos_drop<-Mos_sf[!duplicated(Mos_sf$Ras_ID),]

Mos_drop$Ras_ID<-as.integer(as.character(Mos_drop$Ras_ID)) 

Mos_final<- Mos_drop %>% arrange(Ras_ID)

4. Merge total count to shapefile

Mos_final$Counts<-Mos_uni$Sum_total

# Select only column of interest 
Mos_final<-Mos_final %>% select(ID, Lat,Long, District,Counts)

head(Mos_final)
Simple feature collection with 6 features and 5 fields
geometry type:  POINT
dimension:      XY
bbox:           xmin: 105.6406 ymin: 21.13722 xmax: 105.6461 ymax: 21.14083
CRS:            +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
        ID      Lat     Long   District Counts                  geometry
1 02 - 101 21.14083 105.6461 Dan Phuong     32 POINT (105.6461 21.14083)
2 02 - 098 21.13972 105.6450 Dan Phuong      4  POINT (105.645 21.13972)
3 02 - 100 21.13944 105.6458 Dan Phuong     43 POINT (105.6458 21.13944)
4 02 - 093 21.13806 105.6428 Dan Phuong      0 POINT (105.6428 21.13806)
5 02 - 096 21.13722 105.6406 Dan Phuong     11 POINT (105.6406 21.13722)
6 02 - 095 21.13722 105.6411 Dan Phuong      0 POINT (105.6411 21.13722)
Shape_final<-st_join(Mos_final,Mos_uni,by="Ras_ID",left=T)
although coordinates are longitude/latitude, st_intersects assumes that they are planar
head(Shape_final)
Simple feature collection with 6 features and 7 fields
geometry type:  POINT
dimension:      XY
bbox:           xmin: 105.6406 ymin: 21.13722 xmax: 105.6461 ymax: 21.14083
CRS:            +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
        ID      Lat     Long   District Counts  Ras_ID Sum_total                  geometry
1 02 - 101 21.14083 105.6461 Dan Phuong     32 2465648        32 POINT (105.6461 21.14083)
2 02 - 098 21.13972 105.6450 Dan Phuong      4 2476512         4  POINT (105.645 21.13972)
3 02 - 100 21.13944 105.6458 Dan Phuong     43 2479232        43 POINT (105.6458 21.13944)
4 02 - 093 21.13806 105.6428 Dan Phuong      0 2495523         0 POINT (105.6428 21.13806)
5 02 - 096 21.13722 105.6406 Dan Phuong     11 2503666        11 POINT (105.6406 21.13722)
6 02 - 095 21.13722 105.6411 Dan Phuong      0 2503668         0 POINT (105.6411 21.13722)

5. Write the shapefile to our local computer

# Set the path to save
path_save<-"F:\\Research\\Research_Cooperation\\ILRI_Mosquito_Mapping\\Mosquito\\Mosquito_Sampling"

# st_write(Mos_final,dsn = path_save,"Mosquito_Final.shp",driver="ESRI Shapefile",delete_layer=T)
LS0tDQp0aXRsZTogIk1vc3F1aXRvIE1hcHBpbmciDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQonJycnJycnTW9zcXVpdG8gQ291bnQgUHJlLXByb2Nlc3NpbmcnJycnJycnJycNCg0KVGhpcyBub3RlYm9vayBhaW1zIHRvIGZpbmQgImR1YnBsaWNhdGVkIiBHUFMgcG9pbnRzIHdpdGhpbiBhIHJhZGl1cyBvZiAzMG0uDQoNCmBgYHtyfQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocmdkYWwpDQpgYGANCg0KIyMjIDEuIExvYWQgdGhlIHJhc3RlciBsYXllciBhcyBhIHJlZmVyZW5jZSB0byBsb2NhdGUgZHVwbGljYXRlZCBHUFMgcG9pbnRzDQoNCmBgYHtyfQ0KIyBORFZJIHJhc3RlciBsYXllciBhdCAzMG0gDQpORFZJPC1yYXN0ZXIoIkY6XFxSZXNlYXJjaFxcUmVzZWFyY2hfQ29vcGVyYXRpb25cXElMUklfTW9zcXVpdG9fTWFwcGluZ1xcTW9zcXVpdG9cXENvdmVyX1JhdGlvXFxJbm5pdGlhbFxcTkRWSV9NZWFuXzFrbS50aWYiKQ0KTkF2YWx1ZShORFZJKTwtMA0KIyBNb3NxdWl0byBjb3VudCBzaGFwZWZpbGUgZGF0YQ0KU2hhcGVmaWxlPC1zaGFwZWZpbGUoIkY6XFxSZXNlYXJjaFxcUmVzZWFyY2hfQ29vcGVyYXRpb25cXElMUklfTW9zcXVpdG9fTWFwcGluZ1xcTW9zcXVpdG9cXE1vc3F1aXRvX1NhbXBsaW5nXFxXR1M4NF9Qb2ludHMuc2hwIikNCiMgQ29udmVydCBNb3NxdWl0byBzaGFwZWZpbGUgdG8gc2Ygb2JqZWN0DQoNCk1vc19zZjwtc3RfYXNfc2YoU2hhcGVmaWxlKQ0KDQpyb3cubmFtZXMoTW9zX3NmKSA8LSBOVUxMICMgUmVzZXQgaW5kZXggDQoNCiMgUGxvdCB0aGUgc2hhcGVmaWxlIGFuZCBORFZJIHZhbHVlcw0KcGFyKG1mcm93PWMoMSwyKSxwdHkgPSAicyIpDQpwbG90KE5EVkksIG1haW49Ik1lYW4gTkRWSSBWYWx1ZXMiKQ0KcGxvdChTaGFwZWZpbGUsIG1haW49Ik1vc3F1aXRvIFNhbXBsaW5nIExvY2F0aW9uIiwgcGNoPTE5KQ0KDQpgYGANCg0KIyMjIDIuIEV4dHJhY3QgcmFzdGVyIHBvc2l0aW9uIElEIChyb3cgYW5kIGNvbHVtbikgDQoNCmBgYHtyfQ0KIyBFeHRyYWN0IHRoZSByYXN0ZXIgY29sdW1uIGFuZCByb3cgcG9zc2l0aW9uIA0KUG9zX0lEPC1jZWxsRnJvbVhZKE5EVkksIFNoYXBlZmlsZSkNCiMgQ29udmVydCBNb3NxdWl0byBjb3VudCB0byBpbnRlZ2VyIA0KDQpNb3Nfc2YkU3VtX0N4PC1hcy5pbnRlZ2VyKE1vc19zZiRTdW1fQ3gpDQojIE1lcmdlIHRoZSBQb3NfSUQgdG8gdGhlIHNoYXBlZmlsZQ0KDQpNb3Nfc2YkUmFzX0lEPC1Qb3NfSUQNCiMgQ29udmVydCBSYXNfSUQgdG8gZmFjdG9yIA0KTW9zX3NmJFJhc19JRDwtYXMuZmFjdG9yKE1vc19zZiRSYXNfSUQpDQpgYGANCg0KIyMjIDMuIENhbGN1bGF0ZSB0aGUgdG90YWwgb2YgbW9zcXVpdG8gYXQgZWFjaCBwb3NpdGlvbiANCg0KYGBge3J9DQpNb3NfdW5pPC0gTW9zX3NmICU+JSBncm91cF9ieShSYXNfSUQpJT4lIHN1bW1hcmlzZShTdW1fdG90YWw9c3VtKFN1bV9DeCkpDQojIFJlb3JkZXIgdGhlIHJhc3RlciBJRCBjb2x1bW4NCk1vc191bmkkUmFzX0lEPC1hcy5pbnRlZ2VyKGFzLmNoYXJhY3RlcihNb3NfdW5pJFJhc19JRCkpIA0KDQpNb3NfdW5pPC1Nb3NfdW5pICU+JSBhcnJhbmdlKFJhc19JRCkNCg0KIyBEcm9wIGR1cGxpY2F0ZWQgcmFzdGVyIElEIGluIE1vc19zZg0KDQpNb3NfZHJvcDwtTW9zX3NmWyFkdXBsaWNhdGVkKE1vc19zZiRSYXNfSUQpLF0NCg0KTW9zX2Ryb3AkUmFzX0lEPC1hcy5pbnRlZ2VyKGFzLmNoYXJhY3RlcihNb3NfZHJvcCRSYXNfSUQpKSANCg0KTW9zX2ZpbmFsPC0gTW9zX2Ryb3AgJT4lIGFycmFuZ2UoUmFzX0lEKQ0KYGBgDQoNCiMjIyA0LiBNZXJnZSB0b3RhbCBjb3VudCB0byBzaGFwZWZpbGUgDQoNCmBgYHtyfQ0KTW9zX2ZpbmFsJENvdW50czwtTW9zX3VuaSRTdW1fdG90YWwNCg0KIyBTZWxlY3Qgb25seSBjb2x1bW4gb2YgaW50ZXJlc3QgDQpNb3NfZmluYWw8LU1vc19maW5hbCAlPiUgc2VsZWN0KElELCBMYXQsTG9uZywgRGlzdHJpY3QsQ291bnRzKQ0KDQpoZWFkKE1vc19maW5hbCkNCg0KYGBgDQoNCi0gQW5vdGhlciB3YXkgdG8gZ2V0IHRoZSBzYW1lIG91dHB1dCBpbiBTZWN0aW9uIDQuIA0KDQpgYGB7cn0NClNoYXBlX2ZpbmFsPC1zdF9qb2luKE1vc19maW5hbCxNb3NfdW5pLGJ5PSJSYXNfSUQiLGxlZnQ9VCkNCg0KaGVhZChTaGFwZV9maW5hbCkNCg0KYGBgDQoNCiMjIyA1LiBXcml0ZSB0aGUgc2hhcGVmaWxlIHRvIG91ciBsb2NhbCBjb21wdXRlcg0KDQpgYGB7cn0NCiMgU2V0IHRoZSBwYXRoIHRvIHNhdmUNCnBhdGhfc2F2ZTwtIkY6XFxSZXNlYXJjaFxcUmVzZWFyY2hfQ29vcGVyYXRpb25cXElMUklfTW9zcXVpdG9fTWFwcGluZ1xcTW9zcXVpdG9cXE1vc3F1aXRvX1NhbXBsaW5nIg0KDQpzdF93cml0ZShNb3NfZmluYWwsZHNuID0gcGF0aF9zYXZlLCJNb3NxdWl0b19GaW5hbC5zaHAiLGRyaXZlcj0iRVNSSSBTaGFwZWZpbGUiLGRlbGV0ZV9sYXllcj1UKQ0KYGBgDQoNCg==