Skip to content

Commit bf1e829

Browse files
authored
Merge pull request #86 from ncss-tech/old-o1
fix: OSD: adjust horizon rules
2 parents 76a0bfe + ec63a18 commit bf1e829

File tree

1,490 files changed

+17844
-5046
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,490 files changed

+17844
-5046
lines changed

R/parseOSD_functions.R

Lines changed: 65 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
# l[['sections']] <- .extractSections(res)
2222
# l[['section-indices']] <- .findSectionIndices(res)
2323

24+
message(filename)
2425
l <- list()
2526
l[['site-data']] <- .extractSiteData(x, logfile, filename)
2627
tp <- strsplit(as.character(x$`TYPICAL PEDON`$content), "\n")
@@ -303,28 +304,27 @@
303304

304305
#' @importFrom stringi stri_match_all
305306
.extractHzData <- function(tp, logfile = "OSD.log", filename = "FOO.txt") {
306-
307+
307308
# detect horizons with both top and bottom depths
308-
hz.rule <- "([\\^\\'\\/a-zA-Z0-9]+(?: and [\\^\\'\\/a-zA-Z0-9]+)?)\\s*[-=\u2014]+\\s*([Ol0-9.]+)\\s*?(to|-)?\\s+?([Ol0-9.]+)\\s*?(in|inches|cm|centimeters)"
309-
309+
hz.rule <- "([\\^\\'\\\"`\\/a-zA-Z0-9]+(?: and [\\^\\'\\\"`\\/a-zA-Z0-9]+)?)\\s*[-=\u2014]+\\s*([Ol0-9.]+)\\s*?([toTO0\\-]+)?\\s+?([Ol0-9.]+)\\s*?(inche?s?|in|cm|centimeters?)"
310+
310311
# detect horizons with no bottom depth
311-
hz.rule.no.bottom <- "([\\^\\'\\/a-zA-Z0-9]+(?: and [\\^\\'\\/a-zA-Z0-9]+)?)\\s*[-=\u2014]+?\\s*([Ol0-9.]+)\\s*(to|-)?\\s*([Ol0-9.]+)?\\s*?(in|inches|cm|centimeters)"
312-
312+
hz.rule.no.bottom <- "([\\^\\'\\\"`\\/a-zA-Z0-9]+(?: and [\\^\\'\\\"`\\/a-zA-Z0-9]+)?)\\s*[-=\u2014]+?\\s*([Ol0-9./ ]+)\\s*(inche?s?|in|cm|centimeters?)?\\s*([toTO0\\-]+)?\\s*([Ol0-9./ ]+)?\\s*(inche?s?|in|cm|centimeters?)?"
313+
313314
## default encoding of colors: Toggle dry/moist assumption
314315
##
315316
## Profile-level statement: Colors are for dry soil unless otherwise stated | Colors are for moist soil unless otherwise stated
316-
##
317+
##
317318
## Examples:
318319
## moist:
319320
## E1--7 to 12 inches; very dark gray (10YR 3/1) silt loam, 50 percent gray (10YR 5/1) and 50 percent gray (10YR 6/1) dry; moderate thin platy structure parting to weak thin platy; friable, soft; common fine and medium roots throughout; common fine tubular pores; few fine distinct dark yellowish brown (10YR 4/6) friable masses of iron accumulations with sharp boundaries on faces of peds; strongly acid; clear wavy boundary.
320-
##
321+
##
321322
## dry:
322323
## A--0 to 6 inches; light gray (10YR 7/2) loam, dark grayish brown (10YR 4/2) moist; moderate coarse subangular blocky structure; slightly hard, friable, slightly sticky and slightly plastic; many very fine roots; many very fine and few fine tubular and many very fine interstitial pores; 10 percent pebbles; strongly acid (pH 5.1); clear wavy boundary. (1 to 8 inches thick)
323324
##
324325
dry.is.default <- length(grep('for[ athe]+(?:air-* *)?dr[yied]+[ \\n,]+(colors|soil|conditions)', tp, ignore.case = TRUE)) > 0
325326
moist.is.default <- length(grep('for[ athe]+(wet|moi*st)[ \\n,]+(rubbed|crushed|broken|interior|soil|conditions)', tp, ignore.case = TRUE)) > 0
326327

327-
328328
if (dry.is.default)
329329
default.moisture.state <- 'dry'
330330
if (moist.is.default)
@@ -347,7 +347,7 @@
347347

348348
# eliminate empty lines within typical pedon
349349
tp <- tp[nzchar(trimws(tp))]
350-
350+
351351
# ID starting lines of horizon information
352352
hz.idx <- sort(unique(c(grep(hz.rule, tp), grep(hz.rule.no.bottom, tp))))
353353

@@ -356,7 +356,7 @@
356356
if (length(first.line.flag) > 0) {
357357
hz.idx <- hz.idx[-first.line.flag]
358358
}
359-
359+
360360
check.multiline <- diff(hz.idx) > 1
361361
if (any(check.multiline)) {
362362
# multiline typical pedon horizon formatting (needs fix)
@@ -380,45 +380,64 @@
380380
# if none, then try searching for only top depths
381381
if (all(is.na(h))) {
382382
# this won't have the correct number of elements, adjust manually
383-
h <- stringi::stri_match(this.chunk, regex = hz.rule.no.bottom)
384-
h_num <- grep("^\\d+$", h)
385-
h_alp <- grep("[A-Za-z]", h)[2:3]
386-
h <- h[sort(c(h_num, h_alp))]
387-
383+
h <- trimws(stringi::stri_match(this.chunk, regex = hz.rule.no.bottom))
384+
h[2] <- gsub("0", "O", h[2], fixed=TRUE)
385+
h[6] <- gsub("l", "1", h[6], fixed=TRUE)
386+
h <- gsub(" *3/4", ".75", h)
387+
h <- gsub(" *[1l]/2", ".5", h)
388+
h <- gsub(" *[1l]/[48]", ".25", h) # NB: fudging 1/8 inch -> 1 cm
389+
h <- gsub("^\\.", "0.", h)
390+
h <- gsub("l", "1", h)
391+
i_num <- grep("^\\d+\\.*\\d*$", h)
388392
# fill missing depth with NA
389-
if (length(h) == 3) {
390-
h <- c(h, h[3])
391-
h[3] <- NA
393+
if (length(i_num) == 1) {
394+
i_num <- c(i_num, NA)
392395
}
396+
h_num <- h[i_num]
397+
l_alp <- grepl("[A-Za-z]", h)
398+
h_alp <- h[l_alp & h != "to" & h != "-"][2:3]
399+
h <- c(h_alp[1], h_num, h_alp[2])
400+
393401
} else {
402+
h[2] <- gsub("0", "O", h[2], fixed=TRUE)
403+
h[c(3,5)] <- gsub("l", "1", h[c(3,5)], fixed=TRUE)
394404
h <- h[c(2:3,5:6)]
395405
}
396406

397-
# save hz data to list
398-
hz.data[[i]] <- h
399-
400-
# save narrative to list
401-
narrative.data[[i]] <- this.chunk
402-
403-
## TODO: test this!
404-
# parse ALL colors, result is a multi-row matrix, 5th column is moisture state
405-
colors <- stringi::stri_match_all(this.chunk, regex = color.rule)[[1]]
407+
# apply a filter so horizon data with no horizon designation skip
408+
if (!is.na(h[1]) && grepl("[OABCDELMRVWbcxw]", h[1])) {
409+
# save hz data to list
410+
hz.data[[i]] <- h
411+
412+
# save narrative to list
413+
narrative.data[[i]] <- this.chunk
414+
415+
## TODO: test this!
416+
# parse ALL colors, result is a multi-row matrix, 5th column is moisture state
417+
colors <- stringi::stri_match_all(this.chunk, regex = color.rule)[[1]]
418+
419+
# replace missing moisture state with (parsed) default value
420+
colors[, 5][which(colors[, 5] == '')] <- default.moisture.state
421+
422+
# extract dry|moist colors, note that there may be >1 color per state
423+
dc <- colors[which(colors[, 5] == 'dry'), 1:4, drop = FALSE]
424+
mc <- colors[which(colors[, 5] == 'moist'), 1:4, drop = FALSE]
425+
426+
# there there was at least 1 match, keep the first 1
427+
if (nrow(dc) > 0) {
428+
dry.colors[[i]] <- dc[1, ]
429+
} else dry.colors[[i]] <- matrix(rep(NA, times = 4), nrow = 1)
430+
431+
if (nrow(mc) > 0)
432+
moist.colors[[i]] <- mc[1, ]
433+
else moist.colors[[i]] <- matrix(rep(NA, times = 4), nrow = 1)
434+
} else {
435+
hz.data[[i]] <- NULL
436+
narrative.data[[i]] <- NULL
437+
dry.colors[[i]] <- NULL
438+
moist.colors[[i]] <- NULL
439+
}
406440

407-
# replace missing moisture state with (parsed) default value
408-
colors[, 5][which(colors[, 5] == '')] <- default.moisture.state
409-
410-
# extract dry|moist colors, note that there may be >1 color per state
411-
dc <- colors[which(colors[, 5] == 'dry'), 1:4, drop = FALSE]
412-
mc <- colors[which(colors[, 5] == 'moist'), 1:4, drop = FALSE]
413-
414-
# there there was at least 1 match, keep the first 1
415-
if (nrow(dc) > 0) {
416-
dry.colors[[i]] <- dc[1, ]
417-
} else dry.colors[[i]] <- matrix(rep(NA, times = 4), nrow = 1)
418-
419-
if (nrow(mc) > 0)
420-
moist.colors[[i]] <- mc[1, ]
421-
else moist.colors[[i]] <- matrix(rep(NA, times = 4), nrow = 1)
422441
}
423442

424443
# test for no parsed data, must be some funky formatting...
@@ -427,6 +446,8 @@
427446

428447
# convert to DF
429448
hz.data <- as.data.frame(do.call('rbind', hz.data))
449+
if (ncol(hz.data) != 4)
450+
return(NULL)
430451
dry.colors <- as.data.frame(do.call('rbind', dry.colors))[2:4]
431452
moist.colors <- as.data.frame(do.call('rbind', moist.colors))[2:4]
432453
narrative.data <- as.data.frame(do.call('rbind', narrative.data))
@@ -448,9 +469,9 @@
448469
moist.colors$moist_chroma <- as.numeric(moist.colors$moist_chroma)
449470
})
450471

451-
## TODO: sanity check / unit reporting: this will fail when formatting is inconsistent (PROPER series)
452472
# convert in -> cm using the first horizon
453-
if (hz.data$units[1] %in% c('inches', 'in')) {
473+
if (!is.na(hz.data$units[1]) &&
474+
startsWith(tolower(hz.data$units[1]), "in")) {
454475
hz.data$top <- round(hz.data$top * 2.54)
455476
hz.data$bottom <- round(hz.data$bottom * 2.54)
456477
}

inst/extdata/OSD-error-reporting/RO/auburn-hz.csv

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"ACKWATER","Bt2",23,41,NA,NA,NA,"lOYR","5","8"
44
"ALAMUCHEE","Bwl",13,33,NA,NA,NA,"10YR","4","4"
55
"ALDERFLATS","Btgl",13,30,NA,NA,NA,"5Y","5","2"
6-
"ANDRY","022",15,0,NA,NA,NA,"10YR","3","2"
7-
"ANDRY","021",30,15,NA,NA,NA,"10YR","3","2"
6+
"ANDRY","O22",15,0,NA,NA,NA,"10YR","3","2"
7+
"ANDRY","O21",30,15,NA,NA,NA,"10YR","3","2"
88
"ASHLAR","A",5,13,NA,NA,NA,"l0YR","3","2"
99
"ASHLAR","E",13,28,NA,NA,NA,"l0YR","5","2"
1010
"ASHLAR","Bw",28,51,NA,NA,NA,"l0YR","5","4"
@@ -14,78 +14,45 @@
1414
"BELHAVEN","Oal",23,33,NA,NA,NA,"5YR","2.5","2"
1515
"BENNDALE","Btl",13,28,NA,NA,NA,"10YR","5","6"
1616
"BLICHTON","Btvgl",76,114,NA,NA,NA,"N","4","0"
17-
"BODINE","0e",0,3,NA,NA,NA,"10YR","2","2"
18-
"BOURNE","0i",0,3,NA,NA,NA,NA,NA,NA
1917
"BRIGHTON","Oap",0,30,NA,NA,NA,"l0YR","2","1"
20-
"BROCKROAD","01",0,5,NA,NA,NA,NA,NA,NA
2118
"BURROWSVILLE","A",0,8,NA,NA,NA,"lOYR","5","2"
2219
"BURROWSVILLE","E",8,36,NA,NA,NA,"lOYR","6","4"
2320
"BURROWSVILLE","Bt",36,64,NA,NA,NA,"lOYR","6","4"
2421
"BURROWSVILLE","Btx",64,97,NA,NA,NA,"lOYR","5","6"
25-
"CAROLINE","0i",0,5,NA,NA,NA,NA,NA,NA
26-
"CHEAHA","0i",0,3,NA,NA,NA,NA,NA,NA
2722
"CHRISTIAN","Btl",15,38,NA,NA,NA,"5YR","5","8"
28-
"COLFAX","0i",3,3,NA,NA,NA,NA,NA,NA
29-
"DEMORY","0a",0,8,NA,NA,NA,"10YR","2","1"
23+
"COLFAX","Oi",3,0,NA,NA,NA,NA,NA,NA
3024
"EATON","Btgl",76,84,NA,NA,NA,"10YR","5","1"
3125
"ELLOREE","Btgl",58,69,NA,NA,NA,"10YR","5","2"
3226
"ELLOREE","BCgl",107,135,NA,NA,NA,"10YR","6","1"
3327
"EUREKA","Btgl",28,51,NA,NA,NA,"N","5","0"
34-
"FORK","0i",0,3,NA,NA,NA,NA,NA,NA
35-
"FORK","0e",3,5,NA,NA,NA,"10YR","3","2"
3628
"FORTUNA","B2lg",13,23,NA,NA,NA,"5GY","4","1"
3729
"FREELAND","Btl",33,51,NA,NA,NA,"10YR","4","4"
3830
"GRIFFITH","Al",25,56,NA,NA,NA,"5Y","3","1"
3931
"GRITNEY","Btl",23,43,NA,NA,NA,"10YR","5","6"
4032
"KEYESPOINT","Bgl",18,46,NA,NA,NA,"10YR","4","2"
41-
"LAROQUE","0i",0,3,NA,NA,NA,NA,NA,NA
42-
"LEDWITH","0a",0,23,NA,NA,NA,"10YR","3","3"
43-
"MATTAPONI","0i",0,3,NA,NA,NA,NA,NA,NA
4433
"MCLAURIN","Btl",36,51,NA,NA,NA,"5YR","5","6"
45-
"MONTROSS","0i",0,5,NA,NA,NA,NA,NA,NA
46-
"NATCHEZ","0i",0,3,NA,NA,NA,NA,NA,NA
4734
"NEWBERN","Ap",0,13,NA,NA,NA,"1OYR","5","4"
4835
"NEWBERN","Bw",13,33,NA,NA,NA,"1OYR","6","6"
4936
"NEWBERN","Cr",33,46,NA,NA,NA,"1OYR","6","8"
50-
"NEWFLAT","0i",0,3,NA,NA,NA,NA,NA,NA
5137
"NEWHAN","A",0,5,NA,NA,NA,"l0YR","5","2"
5238
"NEWHAN","C1",5,127,NA,NA,NA,"l0YR","7","2"
5339
"NEWHAN","C2",127,183,NA,NA,NA,"l0YR","7","2"
5440
"OAKLIMETER","Bwl",28,51,NA,NA,NA,"10YR","5","4"
55-
"OKEECHOBEE","0a",20,71,NA,NA,NA,"5YR","2","1"
5641
"OPENLAKE","Bgl",18,33,NA,NA,NA,"10YR","4","2"
57-
"ORENDA","0i",0,3,NA,NA,NA,NA,NA,NA
5842
"PAILO","A",3,8,NA,NA,NA,"l0YR","3","2"
5943
"PAILO","BE",8,43,NA,NA,NA,"l0YR","5","6"
6044
"PAILO","Btl",43,89,NA,NA,NA,"l0YR","5","6"
6145
"PAMUNKEY","2C",117,203,NA,NA,NA,"1OYR","5","6"
6246
"PARTLOW","Btgl",38,53,NA,NA,NA,"10YR","5","1"
6347
"PETAL","Btl",20,43,NA,NA,NA,"5YR","5","8"
64-
"POCATY","0i",0,30,NA,NA,NA,"10YR","2","2"
65-
"POCATY","0e",30,51,NA,NA,NA,"10YR","2","2"
66-
"POCATY","0a1",51,104,NA,NA,NA,"10YR","2","1"
67-
"POCATY","0a2",104,122,NA,NA,NA,"10YR","2","1"
68-
"POCATY","0a3",122,152,NA,NA,NA,"10YR","4","1"
6948
"PUNTA","A",0,10,NA,NA,NA,"l0YR","4",NA
7049
"PUNTA","E1",10,28,NA,NA,NA,"l0YR","6","2"
7150
"PUNTA","E2",28,145,NA,NA,NA,"l0YR","8",NA
72-
"RAPPAHANNOCK","0a1",0,41,NA,NA,NA,"10YR","3","2"
73-
"RAPPAHANNOCK","0a2",41,76,NA,NA,NA,"10YR","3","1"
74-
"RAPPAHANNOCK","0a3",76,104,NA,NA,NA,"10YR","2","2"
75-
"RAPPAHANNOCK","0'a",160,190,NA,NA,NA,"10YR","2","1"
7651
"RED HILLS","Oi",3,0,NA,NA,NA,NA,NA,NA
77-
"REMLIK","0i",0,5,NA,NA,NA,NA,NA,NA
78-
"REPARADA","110C",46,15,NA,NA,NA,"10YR","2","1"
7952
"ROME","Btl",23,51,NA,NA,NA,"7.5YR","5","6"
80-
"SEKIL","0i",0,3,NA,NA,NA,NA,NA,NA
81-
"SEKIL","0e",3,5,NA,NA,NA,"10YR","2","1"
82-
"SOCO","0i",0,5,NA,NA,NA,NA,NA,NA
83-
"STECOAH","0i",0,3,NA,NA,NA,NA,NA,NA
84-
"SURRENCY","0i",0,3,NA,NA,NA,NA,NA,NA
8553
"SWAFFORD","Btl",20,30,NA,NA,NA,"7.5YR","4","6"
8654
"TALANTE","Alg",10,25,NA,NA,NA,"10YR","5","2"
8755
"TALANTE","Blg",25,46,NA,NA,NA,"10YR","5","3"
88-
"TALLADEGA","0i",0,5,NA,NA,NA,NA,NA,NA
8956
"TRENHOLM","Btl",30,51,NA,NA,NA,"10YR","5","6"
9057
"TRENHOLM","Cl",91,114,NA,NA,NA,"10YR","5","8"
9158
"TRENHOLM","A",NA,5,NA,NA,NA,"10YR","3","1"
@@ -96,6 +63,4 @@
9663
"VICKSBURG","Cl",18,71,NA,NA,NA,"10YR","4","3"
9764
"WANDO","Cl",20,89,NA,NA,NA,"7.5YR","5","8"
9865
"WEEKSVILLE","Cgl",114,152,NA,NA,NA,"10YR","6","1"
99-
"WESTWEGO","II02bg",53,91,NA,NA,NA,"N","2","0"
100-
"YULEE","0i",0,5,NA,NA,NA,NA,NA,NA
10166
"ZUBER","Btl",38,51,NA,NA,NA,"10YR","4","4"

inst/extdata/OSD-error-reporting/RO/auburn-sections.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"ANDRY","MULTILINE TYPICAL PEDON","[number of multilines=6]","auburn, al"
55
"ANNISTON","MULTILINE TYPICAL PEDON","[number of multilines=4]","auburn, al"
66
"BASSFIELD","MULTILINE TYPICAL PEDON","[number of multilines=5]","auburn, al"
7-
"BEARKNOB","MULTILINE TYPICAL PEDON","[number of multilines=1]","auburn, al"
87
"BOWMANTOWN","MULTILINE TYPICAL PEDON","[number of multilines=1]","auburn, al"
98
"BREWTON","MULTILINE TYPICAL PEDON","[number of multilines=1]","auburn, al"
109
"BUGLEY","DUPLICATION OF HEADERS","[RANGE IN CHARACTERISTICS:]","auburn, al"
Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,45 @@
11
"id","ac","benchmarksoilflag","soiltaxclasslastupdated","depthErrors","ocrErrors"
2-
"BODINE",1152290,TRUE,2009,FALSE,TRUE
3-
"SURRENCY",773555,FALSE,2021,FALSE,TRUE
42
"MCLAURIN",564282,FALSE,1997,FALSE,TRUE
53
"BENNDALE",408250,FALSE,2012,FALSE,TRUE
64
"OAKLIMETER",364788,FALSE,2005,FALSE,TRUE
75
"CHRISTIAN",297423,FALSE,2001,FALSE,TRUE
8-
"NATCHEZ",227417,FALSE,1998,FALSE,TRUE
96
"BELHAVEN",213210,FALSE,2002,FALSE,TRUE
10-
"SOCO",189881,FALSE,2001,FALSE,TRUE
11-
"TALLADEGA",155342,FALSE,2001,FALSE,TRUE
127
"GRITNEY",129163,FALSE,1997,FALSE,TRUE
138
"ASHLAR",107187,TRUE,2017,FALSE,TRUE
149
"VICKSBURG",103571,FALSE,2002,FALSE,TRUE
15-
"REMLIK",103503,FALSE,2002,FALSE,TRUE
16-
"STECOAH",95927,FALSE,2001,FALSE,TRUE
17-
"MATTAPONI",92795,FALSE,2003,FALSE,TRUE
18-
"CAROLINE",77934,FALSE,2002,FALSE,TRUE
1910
"PAILO",77493,FALSE,2002,FALSE,TRUE
2011
"PETAL",74698,FALSE,2003,FALSE,TRUE
2112
"NEWBERN",73692,FALSE,1998,FALSE,TRUE
2213
"BLICHTON",71250,FALSE,2002,FALSE,TRUE
23-
"COLFAX",58035,FALSE,1997,TRUE,TRUE
24-
"CHEAHA",53744,FALSE,1999,FALSE,TRUE
14+
"COLFAX",58035,FALSE,1997,TRUE,FALSE
2515
"NEWHAN",51040,FALSE,2003,FALSE,TRUE
26-
"BOURNE",45410,FALSE,2002,FALSE,TRUE
27-
"FREELAND",44420,FALSE,2002,FALSE,TRUE
16+
"FREELAND",44420,FALSE,2002,TRUE,TRUE
2817
"GRIFFITH",39628,FALSE,2004,FALSE,TRUE
2918
"OPENLAKE",31864,FALSE,2004,FALSE,TRUE
30-
"DEMORY",29488,FALSE,2000,FALSE,TRUE
3119
"EUREKA",29370,FALSE,2002,FALSE,TRUE
32-
"OKEECHOBEE",29101,FALSE,2000,FALSE,TRUE
3320
"ELLOREE",28778,FALSE,1997,FALSE,TRUE
3421
"PARTLOW",26416,FALSE,1999,FALSE,TRUE
3522
"KEYESPOINT",24448,FALSE,2002,FALSE,TRUE
36-
"WESTWEGO",23971,FALSE,2011,FALSE,TRUE
3723
"PAMUNKEY",23728,FALSE,2002,FALSE,TRUE
3824
"BEECH GROVE",23364,FALSE,2002,TRUE,FALSE
3925
"WANDO",21363,FALSE,2002,FALSE,TRUE
4026
"ROME",20963,FALSE,2003,FALSE,TRUE
4127
"ACKWATER",20910,FALSE,1997,FALSE,TRUE
42-
"MONTROSS",19220,FALSE,2007,FALSE,TRUE
4328
"EATON",19201,FALSE,2002,FALSE,TRUE
4429
"BRIGHTON",17281,FALSE,2000,FALSE,TRUE
45-
"RAPPAHANNOCK",16907,FALSE,2003,FALSE,TRUE
4630
"WEEKSVILLE",16893,FALSE,2006,FALSE,TRUE
47-
"ORENDA",14755,FALSE,2008,FALSE,TRUE
4831
"SWAFFORD",12895,FALSE,2001,FALSE,TRUE
49-
"NEWFLAT",12053,FALSE,1997,FALSE,TRUE
50-
"YULEE",8230,FALSE,1998,FALSE,TRUE
51-
"FORK",8078,FALSE,1997,FALSE,TRUE
52-
"ANDRY",7778,FALSE,2003,TRUE,TRUE
32+
"ANDRY",7778,FALSE,2003,TRUE,FALSE
5333
"ZUBER",7641,FALSE,2003,FALSE,TRUE
54-
"POCATY",7379,FALSE,2003,FALSE,TRUE
55-
"SEKIL",6120,FALSE,2002,FALSE,TRUE
56-
"LEDWITH",5574,FALSE,2003,FALSE,TRUE
5734
"TALANTE",5463,FALSE,2002,FALSE,TRUE
58-
"BROCKROAD",5373,FALSE,1999,FALSE,TRUE
5935
"RED HILLS",4713,FALSE,2006,TRUE,FALSE
6036
"TRENHOLM",4019,FALSE,2002,TRUE,TRUE
6137
"PUNTA",3805,FALSE,1993,FALSE,TRUE
6238
"TUCKAHOE",3244,FALSE,1999,FALSE,TRUE
6339
"BURROWSVILLE",3176,FALSE,1997,FALSE,TRUE
6440
"FORTUNA",3050,FALSE,2002,FALSE,TRUE
65-
"LAROQUE",2387,FALSE,1999,FALSE,TRUE
6641
"ALAMUCHEE",744,FALSE,2000,FALSE,TRUE
6742
"BAHIAHONDA",672,FALSE,2009,FALSE,TRUE
43+
"MAYO",649,FALSE,2001,TRUE,FALSE
6844
"ALDERFLATS",529,FALSE,2006,FALSE,TRUE
69-
"REPARADA",351,FALSE,2002,TRUE,TRUE
70-
"BEARKNOB",189,FALSE,2013,TRUE,FALSE
7145
"VERO",NA,FALSE,2004,FALSE,TRUE

0 commit comments

Comments
 (0)