From ed0b69a3c881a2dc6d54130d1f633a1a0324f264 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 7 Dec 2017 11:28:39 -0800 Subject: [PATCH] Fix check for non-numeric CSV data. Use same column name code as mapnik --- csv.cpp | 7 ++++++- geocsv.cpp | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/csv.cpp b/csv.cpp index 97c6f8f7..b674ac8c 100644 --- a/csv.cpp +++ b/csv.cpp @@ -157,7 +157,12 @@ bool is_number(std::string const &s) { } } - return true; + if (*cp == '\0') { + return true; + } else { + // Something non-numeric at the end + return false; + } } return false; diff --git a/geocsv.cpp b/geocsv.cpp index 06008033..8bb74435 100644 --- a/geocsv.cpp +++ b/geocsv.cpp @@ -31,10 +31,13 @@ void parse_geocsv(std::vector &sst, std::string fnam for (size_t i = 0; i < header.size(); i++) { header[i] = csv_dequote(header[i]); - if (header[i] == "lat" || header[i] == "latitude") { + std::string lower(header[i]); + std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); + + if (lower == "y" || lower == "lat" || (lower.find("latitude") != std::string::npos)) { latcol = i; } - if (header[i] == "lon" || header[i] == "longitude" || header[i] == "long") { + if (lower == "x" || lower == "lon" || lower == "lng" || lower == "long" || (lower.find("longitude") != std::string::npos)) { loncol = i; } }