From 28a233f24af6628e123a76857aeccd01ce6e07cd Mon Sep 17 00:00:00 2001 From: Luigi Pirelli Date: Wed, 26 Feb 2020 16:26:34 +0100 Subject: [PATCH 1/4] fix keyword parsing to allow _ as allowed char --- parser.js | 2 +- wkt.build.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parser.js b/parser.js index d7f14b1..0de7b9f 100644 --- a/parser.js +++ b/parser.js @@ -8,7 +8,7 @@ var AFTERQUOTE = 5; var ENDED = -1; var whitespace = /\s/; var latin = /[A-Za-z]/; -var keyword = /[A-Za-z84]/; +var keyword = /[_A-Za-z84]/; var endThings = /[,\]]/; var digets = /[\d\.E\-\+]/; // const ignoredChar = /[\s_\-\/\(\)]/g; diff --git a/wkt.build.js b/wkt.build.js index 4e8e632..240f58d 100644 --- a/wkt.build.js +++ b/wkt.build.js @@ -8,7 +8,7 @@ var AFTERQUOTE = 5; var ENDED = -1; var whitespace = /\s/; var latin = /[A-Za-z]/; -var keyword = /[A-Za-z84]/; +var keyword = /[_A-Za-z84]/; var endThings = /[,\]]/; var digets = /[\d\.E\-\+]/; // const ignoredChar = /[\s_\-\/\(\)]/g; From 8d3ec512f6c135d15367ae2d69c6e2efcaedeabf Mon Sep 17 00:00:00 2001 From: Luigi Pirelli Date: Wed, 26 Feb 2020 16:27:02 +0100 Subject: [PATCH 2/4] add test to have _ char in the keyword. This allow parsing of COMPD_CS srs --- test-fixtures.json | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/test-fixtures.json b/test-fixtures.json index fb5a988..13318f7 100644 --- a/test-fixtures.json +++ b/test-fixtures.json @@ -388,4 +388,85 @@ "lat2": 0.7280931862903012, "srsCode": "NAD83 / Massachusetts Mainland" } +}, { + "code": "COMPD_CS[\"GCS_WGS_1984\",PROJCS[\"WGS 84 / UTM zone 30N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32630\"]],VERT_CS[\"unknown\",VERT_DATUM[\"unknown\",2005],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP]]]", + "intermediate": [], + "value": { + "type": "COMPD_CS", + "name": "GCS_WGS_1984", + "PROJCS": { + "name": "WGS 84 / UTM zone 30N", + "GEOGCS": { + "name": "WGS 84", + "DATUM": { + "name": "WGS_1984", + "SPHEROID": { + "name": "WGS 84", + "a": 6378137, + "rf": 298.257223563, + "AUTHORITY": { + "EPSG": "7030" + } + }, + "AUTHORITY": { + "EPSG": "6326" + } + }, + "PRIMEM": { + "name": "greenwich", + "convert": 0, + "AUTHORITY": { + "EPSG": "8901" + } + }, + "UNIT": { + "name": "degree", + "convert": 0.0174532925199433, + "AUTHORITY": { + "EPSG": "9122" + } + }, + "AUTHORITY": { + "EPSG": "4326" + } + }, + "PROJECTION": "Transverse_Mercator", + "latitude_of_origin": 0, + "central_meridian": -3, + "scale_factor": 0.9996, + "false_easting": 500000, + "false_northing": 0, + "UNIT": { + "name": "metre", + "convert": 1, + "AUTHORITY": { + "EPSG": "9001" + } + }, + "AXIS": { + "Northing": "NORTH" + }, + "AUTHORITY": { + "EPSG": "32630" + } + }, + "VERT_CS": { + "name": "unknown", + "VERT_DATUM": { + "name": "unknown", + "convert": 2005 + }, + "UNIT": { + "name": "metre", + "convert": 1, + "AUTHORITY": { + "EPSG": "9001" + } + }, + "AXIS": { + "Up": "UP" + } + }, + "srsCode": "GCS_WGS_1984" + } }] From 5275efabdb076d63e52e0b9647068a421a9e1cb5 Mon Sep 17 00:00:00 2001 From: Luigi Pirelli Date: Wed, 26 Feb 2020 18:05:56 +0100 Subject: [PATCH 3/4] No way to allow parsing leaving wkt intact => strip and wanr remove of vertical datum --- index.js | 5 +++++ wkt.build.js | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/index.js b/index.js index 2ad67c7..9188e29 100644 --- a/index.js +++ b/index.js @@ -160,6 +160,11 @@ function cleanWKT(wkt) { } export default function(wkt) { var lisp = parser(wkt); + // if compound SRS (e.g. COMPD_CS) parse only the PROJCS part (e.g. horizontal SRS) + if (lisp[0] == "COMPD_CS") { + console.warn('COMPD_CS not yet supported. Stripped Vertical datum leaving only PROJCS'); + lisp = lisp[2]; + } var type = lisp.shift(); var name = lisp.shift(); lisp.unshift(['name', name]); diff --git a/wkt.build.js b/wkt.build.js index 240f58d..6fc4229 100644 --- a/wkt.build.js +++ b/wkt.build.js @@ -430,6 +430,11 @@ function cleanWKT(wkt) { } var index = function(wkt) { var lisp = parseString(wkt); + // if compound SRS (e.g. COMPD_CS) parse only the PROJCS part (e.g. horizontal SRS) + if (lisp[0] == "COMPD_CS") { + console.warn('COMPD_CS not yet supported. Stripped Vertical datum leaving only PROJCS'); + lisp = lisp[2]; + } var type = lisp.shift(); var name = lisp.shift(); lisp.unshift(['name', name]); From c4bb70a670dee8cdcb58c8016d5ee5f40ebfc780 Mon Sep 17 00:00:00 2001 From: Luigi Pirelli Date: Wed, 26 Feb 2020 18:06:42 +0100 Subject: [PATCH 4/4] updated test --- test-fixtures.json | 116 +++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 62 deletions(-) diff --git a/test-fixtures.json b/test-fixtures.json index 13318f7..f7f9207 100644 --- a/test-fixtures.json +++ b/test-fixtures.json @@ -392,81 +392,73 @@ "code": "COMPD_CS[\"GCS_WGS_1984\",PROJCS[\"WGS 84 / UTM zone 30N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-3],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32630\"]],VERT_CS[\"unknown\",VERT_DATUM[\"unknown\",2005],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP]]]", "intermediate": [], "value": { - "type": "COMPD_CS", - "name": "GCS_WGS_1984", - "PROJCS": { - "name": "WGS 84 / UTM zone 30N", - "GEOGCS": { - "name": "WGS 84", - "DATUM": { - "name": "WGS_1984", - "SPHEROID": { - "name": "WGS 84", - "a": 6378137, - "rf": 298.257223563, - "AUTHORITY": { - "EPSG": "7030" - } - }, - "AUTHORITY": { - "EPSG": "6326" - } - }, - "PRIMEM": { - "name": "greenwich", - "convert": 0, - "AUTHORITY": { - "EPSG": "8901" - } - }, - "UNIT": { - "name": "degree", - "convert": 0.0174532925199433, + "type": "PROJCS", + "name": "WGS 84 / UTM zone 30N", + "GEOGCS": { + "name": "WGS 84", + "DATUM": { + "name": "WGS_1984", + "SPHEROID": { + "name": "WGS 84", + "a": 6378137, + "rf": 298.257223563, "AUTHORITY": { - "EPSG": "9122" + "EPSG": "7030" } }, "AUTHORITY": { - "EPSG": "4326" + "EPSG": "6326" } }, - "PROJECTION": "Transverse_Mercator", - "latitude_of_origin": 0, - "central_meridian": -3, - "scale_factor": 0.9996, - "false_easting": 500000, - "false_northing": 0, - "UNIT": { - "name": "metre", - "convert": 1, + "PRIMEM": { + "name": "greenwich", + "convert": 0, "AUTHORITY": { - "EPSG": "9001" + "EPSG": "8901" } }, - "AXIS": { - "Northing": "NORTH" - }, - "AUTHORITY": { - "EPSG": "32630" - } - }, - "VERT_CS": { - "name": "unknown", - "VERT_DATUM": { - "name": "unknown", - "convert": 2005 - }, "UNIT": { - "name": "metre", - "convert": 1, + "name": "degree", + "convert": 0.0174532925199433, "AUTHORITY": { - "EPSG": "9001" + "EPSG": "9122" } }, - "AXIS": { - "Up": "UP" + "AUTHORITY": { + "EPSG": "4326" } }, - "srsCode": "GCS_WGS_1984" - } + "PROJECTION": "Transverse_Mercator", + "latitude_of_origin": 0, + "central_meridian": -3, + "scale_factor": 0.9996, + "false_easting": 500000, + "false_northing": 0, + "UNIT": { + "name": "metre", + "convert": 1, + "AUTHORITY": { + "EPSG": "9001" + } + }, + "AXIS": { + "Northing": "NORTH" + }, + "AUTHORITY": { + "EPSG": "32630" + }, + "projName": "Transverse_Mercator", + "units": "meter", + "to_meter": 1, + "datumCode": "wgs84", + "ellps": "WGS 84", + "a": 6378137, + "rf": 298.257223563, + "k0": 0.9996, + "x0": 500000, + "y0": 0, + "long0": -0.05235987755982989, + "lat0": 0, + "srsCode": "WGS 84 / UTM zone 30N" + } }]