geo-coordinates-parser 1.6.6 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,8 @@
2
2
  //borrowed from https://www.codegrepper.com/code-examples/javascript/javascript+converting+latitude+longitude+to+gps+coordinates
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  /**
5
- * Converts decimalCoordinates to other formats commonly used
5
+ * Converts decimalCoordinates to commonly used string formats
6
+ * Note that this will add degree and direction symbols to decimal coordinates
6
7
  * @param {string} format Either DMS or DM
7
8
  * @returns {string}
8
9
  */
@@ -10,40 +11,47 @@ function toCoordinateFormat(format) {
10
11
  if (!['DMS', 'DM', 'DD'].includes(format))
11
12
  throw new Error('invalid format specified');
12
13
  if (this.decimalCoordinates && this.decimalCoordinates.trim()) {
14
+ const parts = this.decimalCoordinates.split(',').map(x => Number(x.trim()));
15
+ const decimalLatitude = Number(parts[0]);
16
+ const decimalLongitude = Number(parts[1]);
17
+ const absoluteLatitude = Math.abs(decimalLatitude);
18
+ const absoluteLongitude = Math.abs(decimalLongitude);
19
+ const latDir = decimalLatitude > 0 ? "N" : "S";
20
+ const longDir = decimalLongitude > 0 ? "E" : "W";
21
+ let result;
13
22
  if (format == 'DD') {
14
- return this.decimalCoordinates;
23
+ result = `${absoluteLatitude}° ${latDir}, ${absoluteLongitude}° ${longDir}`;
15
24
  }
16
- const parts = this.decimalCoordinates.split(',').map(x => Number(x.trim()));
17
- let convertedLat = convert(parts[0], format, true);
18
- let convertedLong = convert(parts[1], format, false);
19
- //some custom cleaning for DMS
20
- if (convertedLat.endsWith('.0"') && convertedLong.endsWith('.0"')) {
21
- convertedLat = convertedLat.replace(/\.0"$/, '"');
22
- convertedLong = convertedLong.replace(/\.0"$/, '"');
25
+ //else we need some more things
26
+ const degreesLatitude = Math.floor(absoluteLatitude);
27
+ const degreesLongitude = Math.floor(absoluteLongitude);
28
+ const minutesLatitudeNotTruncated = (absoluteLatitude - degreesLatitude) * 60;
29
+ const minutesLongitudeNotTruncated = (absoluteLongitude - degreesLongitude) * 60;
30
+ if (format == 'DM') {
31
+ const dmMinsLatitude = round(minutesLatitudeNotTruncated, 3).toFixed(3).padStart(6, '0');
32
+ const dmMinsLongitude = round(minutesLongitudeNotTruncated, 3).toFixed(3).padStart(6, '0');
33
+ result = `${degreesLatitude}° ${dmMinsLatitude}' ${latDir}, ${degreesLongitude}° ${dmMinsLongitude}' ${longDir}`;
34
+ }
35
+ if (format == "DMS") {
36
+ const latMinutes = Math.floor(minutesLatitudeNotTruncated);
37
+ const longMinutes = Math.floor(minutesLongitudeNotTruncated);
38
+ let latSeconds = ((minutesLatitudeNotTruncated - latMinutes) * 60).toFixed(1).padStart(4, '0');
39
+ let longSeconds = ((minutesLongitudeNotTruncated - longMinutes) * 60).toFixed(1).padStart(4, '0');
40
+ const latMinutesString = latMinutes.toString().padStart(2, '0');
41
+ const longMinutesString = longMinutes.toString().padStart(2, '0');
42
+ // if they both end in .0 we drop the .0
43
+ if (latSeconds.endsWith('.0"') && longSeconds.endsWith('.0"')) {
44
+ latSeconds = latSeconds.replace(/\.0"$/, '"');
45
+ longSeconds = longSeconds.replace(/\.0"$/, '"');
46
+ }
47
+ result = `${degreesLatitude}° ${latMinutesString}' ${latSeconds}" ${latDir}, ${degreesLongitude}° ${longMinutesString}' ${longSeconds}" ${longDir}`;
23
48
  }
24
- const latDirection = parts[0] >= 0 ? " N" : " S";
25
- const longDirection = parts[1] >= 0 ? " E" : " W";
26
- return `${convertedLat + latDirection}, ${convertedLong + longDirection}`;
49
+ return result;
27
50
  }
28
51
  else {
29
52
  throw new Error('no decimal coordinates to convert');
30
53
  }
31
54
  }
32
- //assumes everything is valid...
33
- function convert(coord, format) {
34
- const absolute = Math.abs(coord);
35
- const degrees = Math.floor(absolute);
36
- const minutesNotTruncated = (absolute - degrees) * 60;
37
- if (format == 'DM') {
38
- let dmMins = round(minutesNotTruncated, 3).toFixed(3).padStart(6, '0');
39
- return `${degrees}° ${dmMins}'`;
40
- }
41
- //else
42
- let minutes = Math.floor(minutesNotTruncated);
43
- let seconds = ((minutesNotTruncated - minutes) * 60).toFixed(1).padStart(4, '0');
44
- minutes = minutes.toString().padStart(2, '0');
45
- return `${degrees}° ${minutes}' ${seconds}"`;
46
- }
47
55
  function round(num, places) {
48
56
  const d = Math.pow(10, places);
49
57
  return Math.round((num + Number.EPSILON) * d) / d;
@@ -1,6 +1,6 @@
1
1
  //function for converting coordinates from a string to decimal and verbatim
2
2
  //this is just a comment
3
- import { dd_re, dms_periods, dms_abbr, coords_other } from './regex.js';
3
+ import { dm_numbers, dd_re, dms_periods, dms_abbr, coords_other } from './regex.js';
4
4
  import toCoordinateFormat from './toCoordinateFormat.js';
5
5
  /**
6
6
  * Function for converting coordinates in a variety of formats to decimal coordinates
@@ -20,7 +20,24 @@ function converter(coordsString, decimalPlaces) {
20
20
  let lngdir = "";
21
21
  let match = [];
22
22
  let matchSuccess = false;
23
- if (dd_re.test(coordsString)) {
23
+ if (dm_numbers.test(coordsString)) {
24
+ match = dm_numbers.exec(coordsString);
25
+ matchSuccess = checkMatch(match);
26
+ if (matchSuccess) {
27
+ ddLat = Math.abs(match[1]) + match[2] / 60;
28
+ if (Number(match[1]) < 0) {
29
+ ddLat *= -1;
30
+ }
31
+ ddLng = Math.abs(match[3]) + match[4] / 60;
32
+ if (Number(match[3]) < 0) {
33
+ ddLng *= -1;
34
+ }
35
+ }
36
+ else {
37
+ throw new Error("invalid coordinate format");
38
+ }
39
+ }
40
+ else if (dd_re.test(coordsString)) {
24
41
  match = dd_re.exec(coordsString);
25
42
  matchSuccess = checkMatch(match);
26
43
  if (matchSuccess) {
@@ -117,6 +134,7 @@ function converter(coordsString, decimalPlaces) {
117
134
  if (parseInt(match[10]) < 0) {
118
135
  ddLng = -1 * ddLng;
119
136
  }
137
+ //the compass directions
120
138
  if (match[1]) {
121
139
  latdir = match[1];
122
140
  lngdir = match[9];
@@ -136,24 +154,25 @@ function converter(coordsString, decimalPlaces) {
136
154
  if (matchSuccess) {
137
155
  ddLat = Math.abs(parseInt(match[2]));
138
156
  if (match[4]) {
139
- ddLat += match[4] / 60;
157
+ ddLat += match[4].replace(',', '.') / 60;
140
158
  }
141
159
  if (match[6]) {
142
- ddLat += match[6] / 3600;
160
+ ddLat += match[6].replace(',', '.') / 3600;
143
161
  }
144
162
  if (parseInt(match[2]) < 0) {
145
163
  ddLat = -1 * ddLat;
146
164
  }
147
165
  ddLng = Math.abs(parseInt(match[10]));
148
166
  if (match[12]) {
149
- ddLng += match[12] / 60;
167
+ ddLng += match[12].replace(',', '.') / 60;
150
168
  }
151
169
  if (match[14]) {
152
- ddLng += match[14] / 3600;
170
+ ddLng += match[14].replace(',', '.') / 3600;
153
171
  }
154
172
  if (parseInt(match[10]) < 0) {
155
173
  ddLng = -1 * ddLng;
156
174
  }
175
+ //the compass directions
157
176
  if (match[1]) {
158
177
  latdir = match[1];
159
178
  lngdir = match[9];
@@ -178,8 +197,8 @@ function converter(coordsString, decimalPlaces) {
178
197
  throw new Error("invalid latitude value");
179
198
  }
180
199
  //if we have one direction we must have the other
181
- if ((latdir || lngdir) && (!latdir || !lngdir)) {
182
- throw new Error("invalid coordinates format");
200
+ if ((latdir && !lngdir) || (!latdir && lngdir)) {
201
+ throw new Error("invalid coordinates value");
183
202
  }
184
203
  //the directions can't be the same
185
204
  if (latdir && latdir == lngdir) {
@@ -257,20 +276,19 @@ function converter(coordsString, decimalPlaces) {
257
276
  }
258
277
  }
259
278
  //no integer coords allowed
260
- //validation -- no integer coords
261
279
  if (/^\d+$/.test(verbatimLat) || /^\d+$/.test(verbatimLng)) {
262
280
  throw new Error('degree only coordinate/s provided');
263
281
  }
264
- //some tidying up...
282
+ // last bit of tidying up...
265
283
  if (isNaN(ddLat) && ddLat.includes(',')) {
266
284
  ddLat = ddLat.replace(',', '.');
267
285
  }
268
- //all done!!
269
- //just truncate the decimals appropriately
270
- ddLat = Number(Number(ddLat).toFixed(decimalPlaces));
271
286
  if (isNaN(ddLng) && ddLng.includes(',')) {
272
287
  ddLng = ddLng.replace(',', '.');
273
288
  }
289
+ //all done!!
290
+ //just truncate the decimals appropriately
291
+ ddLat = Number(Number(ddLat).toFixed(decimalPlaces));
274
292
  ddLng = Number(Number(ddLng).toFixed(decimalPlaces));
275
293
  return Object.freeze({
276
294
  verbatimCoordinates,
@@ -295,11 +313,11 @@ function checkMatch(match) {
295
313
  const filteredMatch = [...match];
296
314
  //we need to shift the array because it contains the whole coordinates string in the first item
297
315
  filteredMatch.shift();
298
- //check the array length is an even number else exit
316
+ //check the array length is an even number
299
317
  if (filteredMatch.length % 2 > 0) {
300
318
  return false;
301
319
  }
302
- //regex for testing corresponding values match
320
+ // regex for testing corresponding values match
303
321
  const numerictest = /^[-+]?\d+([\.,]\d+)?$/; //for testing numeric values
304
322
  const stringtest = /[eastsouthnorthwest]+/i; //for testing string values (north, south, etc)
305
323
  const halflen = filteredMatch.length / 2;
@@ -350,6 +368,7 @@ function coordsCloseEnough(coordsToTest) {
350
368
  throw new Error("coords being tested must be separated by a comma");
351
369
  }
352
370
  }
371
+ // An enum for coordinates formats
353
372
  const to = Object.freeze({
354
373
  DMS: 'DMS',
355
374
  DM: 'DM',
@@ -1,3 +1,4 @@
1
+ export const dm_numbers: RegExp;
1
2
  export const dd_re: RegExp;
2
3
  export const dms_periods: RegExp;
3
4
  export const dms_abbr: RegExp;
package/dist/mjs/regex.js CHANGED
@@ -1,4 +1,6 @@
1
1
  //Coordinates pattern matching regex
2
+ //DM as numbers only - see issue #15
3
+ const dm_numbers = /([+-]?[0-8]?[0-9])\s+([0-5]?[0-9]\.\d{3,})[\s,]{1,}([+-]?[0-1]?[0-9]?[0-9])\s+([0-5]?[0-9]\.\d{3,})/;
2
4
  //decimal degrees
3
5
  const dd_re = /(NORTH|SOUTH|[NS])?[\s]*([+-]?[0-8]?[0-9](?:[\.,]\d{3,}))[\s]*([•º°]?)[\s]*(NORTH|SOUTH|[NS])?[\s]*[,/;]?[\s]*(EAST|WEST|[EW])?[\s]*([+-]?[0-1]?[0-9]?[0-9](?:[\.,]\d{3,}))[\s]*([•º°]?)[\s]*(EAST|WEST|[EW])?/i;
4
6
  //degrees minutes seconds with '.' as separator - gives array with 15 values
@@ -7,4 +9,4 @@ const dms_periods = /(NORTH|SOUTH|[NS])?\s*([+-]?[0-8]?[0-9])\s*(\.)\s*([0-5]?[0
7
9
  const dms_abbr = /(NORTH|SOUTH|[NS])?\s*([+-]?[0-8]?[0-9])\s*(D(?:EG)?(?:REES)?)\s*([0-5]?[0-9])\s*(M(?:IN)?(?:UTES)?)\s*((?:[0-5]?[0-9])(?:[\.,]\d{1,3})?)?\s*(S(?:EC)?(?:ONDS)?)?\s*(NORTH|SOUTH|[NS])?(?:\s*[,/;]\s*|\s*)(EAST|WEST|[EW])?\s*([+-]?[0-1]?[0-9]?[0-9])\s*(D(?:EG)?(?:REES)?)\s*([0-5]?[0-9])\s*(M(?:IN)?(?:UTES)?)\s*((?:[0-5]?[0-9])(?:[\.,]\d{1,3})?)?\s*(S(?:EC)?(?:ONDS)?)\s*(EAST|WEST|[EW])?/i;
8
10
  //everything else - gives array of 17 values
9
11
  const coords_other = /(NORTH|SOUTH|[NS])?\s*([+-]?[0-8]?[0-9])\s*([•º°\.:]|D(?:EG)?(?:REES)?)?\s*,?([0-5]?[0-9](?:[\.,]\d{1,})?)?\s*(['′´’\.:]|M(?:IN)?(?:UTES)?)?\s*,?((?:[0-5]?[0-9])(?:[\.,]\d{1,3})?)?\s*(''|′′|’’|´´|["″”\.])?\s*(NORTH|SOUTH|[NS])?(?:\s*[,/;]\s*|\s*)(EAST|WEST|[EW])?\s*([+-]?[0-1]?[0-9]?[0-9])\s*([•º°\.:]|D(?:EG)?(?:REES)?)?\s*,?([0-5]?[0-9](?:[\.,]\d{1,})?)?\s*(['′´’\.:]|M(?:IN)?(?:UTES)?)?\s*,?((?:[0-5]?[0-9])(?:[\.,]\d{1,3})?)?\s*(''|′′|´´|’’|["″”\.])?\s*(EAST|WEST|[EW])?/i;
10
- export { dd_re, dms_periods, dms_abbr, coords_other };
12
+ export { dm_numbers, dd_re, dms_periods, dms_abbr, coords_other };
@@ -0,0 +1,5 @@
1
+ // just for counting the number of test objects in the json file
2
+ // remember if you run makeTestFormatsJSON from the debugger it puts the new json file in the root directory so you have to move it here
3
+ const data = require('./testFormats.json');
4
+ let i = 0;
5
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,7 @@
1
+ // when adding new formats, make sure to add them to testformats.js, and not to testFormats.json
2
+ // use makeTestFormatsJSON.js to make testFormats.json
1
3
  import convert from '../converter.js';
2
- import testFormats from '../testformats.js';
4
+ import testFormats from './testformats.js';
3
5
  import failingFormats from './failFormats.js';
4
6
  let allPassed = true;
5
7
  //FORMATS THAT SHOULD BE CONVERTED
@@ -3,13 +3,13 @@ let test = {
3
3
  decimalCoordinates: '-24.3456, 28.92435',
4
4
  toCoordinateFormat
5
5
  };
6
- console.log(test.toCoordinateFormat('DMS'));
6
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DMS'));
7
7
  test.decimalCoordinates = '-25.76887,28.26939';
8
- console.log(test.toCoordinateFormat('DMS'));
9
- console.log(test.toCoordinateFormat('DM'));
10
- console.log(test.toCoordinateFormat('DD'));
8
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DMS'));
9
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DM'));
10
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DD'));
11
11
  test.decimalCoordinates = '-25.815928, 28.070318';
12
- console.log(test.toCoordinateFormat('DM'));
12
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DM'));
13
13
  test.decimalCoordinates = '-25.000, 28.000';
14
- console.log(test.toCoordinateFormat('DMS'));
15
- console.log(test.toCoordinateFormat('DM'));
14
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DMS'));
15
+ console.log(test.decimalCoordinates, '==', test.toCoordinateFormat('DM'));
@@ -0,0 +1,394 @@
1
+ [
2
+ {
3
+ "verbatimCoordinates": "40.123, -74.123",
4
+ "verbatimLatitude": "40.123",
5
+ "verbatimLongitude": "-74.123",
6
+ "decimalLatitude": 40.123,
7
+ "decimalLongitude": -74.123
8
+ },
9
+ {
10
+ "verbatimCoordinates": "40.123° N 74.123° W",
11
+ "verbatimLatitude": "40.123° N",
12
+ "verbatimLongitude": "74.123° W",
13
+ "decimalLatitude": 40.123,
14
+ "decimalLongitude": -74.123
15
+ },
16
+ {
17
+ "verbatimCoordinates": "40.123° N 74.123° W",
18
+ "verbatimLatitude": "40.123° N",
19
+ "verbatimLongitude": "74.123° W",
20
+ "decimalLatitude": 40.123,
21
+ "decimalLongitude": -74.123
22
+ },
23
+ {
24
+ "verbatimCoordinates": "40° 7´ 22.8\" N 74° 7´ 22.8\" W",
25
+ "verbatimLatitude": "40° 7´ 22.8\" N",
26
+ "verbatimLongitude": "74° 7´ 22.8\" W",
27
+ "decimalLatitude": 40.123,
28
+ "decimalLongitude": -74.123
29
+ },
30
+ {
31
+ "verbatimCoordinates": "40° 7.38’ , -74° 7.38’",
32
+ "verbatimLatitude": "40° 7.38’",
33
+ "verbatimLongitude": "-74° 7.38’",
34
+ "decimalLatitude": 40.123,
35
+ "decimalLongitude": -74.123
36
+ },
37
+ {
38
+ "verbatimCoordinates": "N40°7’22.8’’, W74°7’22.8’’",
39
+ "verbatimLatitude": "N40°7’22.8’’",
40
+ "verbatimLongitude": "W74°7’22.8’’",
41
+ "decimalLatitude": 40.123,
42
+ "decimalLongitude": -74.123
43
+ },
44
+ {
45
+ "verbatimCoordinates": "40°7’22.8\"N, 74°7’22.8\"W",
46
+ "verbatimLatitude": "40°7’22.8\"N",
47
+ "verbatimLongitude": "74°7’22.8\"W",
48
+ "decimalLatitude": 40.123,
49
+ "decimalLongitude": -74.123
50
+ },
51
+ {
52
+ "verbatimCoordinates": "40°7'22.8\"N, 74°7'22.8\"W",
53
+ "verbatimLatitude": "40°7'22.8\"N",
54
+ "verbatimLongitude": "74°7'22.8\"W",
55
+ "decimalLatitude": 40.123,
56
+ "decimalLongitude": -74.123
57
+ },
58
+ {
59
+ "verbatimCoordinates": "40 7 22.8, -74 7 22.8",
60
+ "verbatimLatitude": "40 7 22.8",
61
+ "verbatimLongitude": "-74 7 22.8",
62
+ "decimalLatitude": 40.123,
63
+ "decimalLongitude": -74.123
64
+ },
65
+ {
66
+ "verbatimCoordinates": "40.123 -74.123",
67
+ "verbatimLatitude": "40.123",
68
+ "verbatimLongitude": "-74.123",
69
+ "decimalLatitude": 40.123,
70
+ "decimalLongitude": -74.123
71
+ },
72
+ {
73
+ "verbatimCoordinates": "40.123°,-74.123°",
74
+ "verbatimLatitude": "40.123°",
75
+ "verbatimLongitude": "-74.123°",
76
+ "decimalLatitude": 40.123,
77
+ "decimalLongitude": -74.123
78
+ },
79
+ {
80
+ "verbatimCoordinates": "40.123N74.123W",
81
+ "verbatimLatitude": "40.123N",
82
+ "verbatimLongitude": "74.123W",
83
+ "decimalLatitude": 40.123,
84
+ "decimalLongitude": -74.123
85
+ },
86
+ {
87
+ "verbatimCoordinates": "4007.38N7407.38W",
88
+ "verbatimLatitude": "4007.38N",
89
+ "verbatimLongitude": "7407.38W",
90
+ "decimalLatitude": 40.123,
91
+ "decimalLongitude": -74.123
92
+ },
93
+ {
94
+ "verbatimCoordinates": "40°7’22.8\"N, 74°7’22.8\"W",
95
+ "verbatimLatitude": "40°7’22.8\"N",
96
+ "verbatimLongitude": "74°7’22.8\"W",
97
+ "decimalLatitude": 40.123,
98
+ "decimalLongitude": -74.123
99
+ },
100
+ {
101
+ "verbatimCoordinates": "400722.8N740722.8W",
102
+ "verbatimLatitude": "400722.8N",
103
+ "verbatimLongitude": "740722.8W",
104
+ "decimalLatitude": 40.123,
105
+ "decimalLongitude": -74.123
106
+ },
107
+ {
108
+ "verbatimCoordinates": "N 40 7.38 W 74 7.38",
109
+ "verbatimLatitude": "N 40 7.38",
110
+ "verbatimLongitude": "W 74 7.38",
111
+ "decimalLatitude": 40.123,
112
+ "decimalLongitude": -74.123
113
+ },
114
+ {
115
+ "verbatimCoordinates": "40:7:22.8N 74:7:22.8W",
116
+ "verbatimLatitude": "40:7:22.8N",
117
+ "verbatimLongitude": "74:7:22.8W",
118
+ "decimalLatitude": 40.123,
119
+ "decimalLongitude": -74.123
120
+ },
121
+ {
122
+ "verbatimCoordinates": "40:7:23N,74:7:23W",
123
+ "verbatimLatitude": "40:7:23N",
124
+ "verbatimLongitude": "74:7:23W",
125
+ "decimalLatitude": 40.1230555555,
126
+ "decimalLongitude": -74.1230555555
127
+ },
128
+ {
129
+ "verbatimCoordinates": "40°7’23\"N 74°7’23\"W",
130
+ "verbatimLatitude": "40°7’23\"N",
131
+ "verbatimLongitude": "74°7’23\"W",
132
+ "decimalLatitude": 40.1230555555,
133
+ "decimalLongitude": -74.12305555555555
134
+ },
135
+ {
136
+ "verbatimCoordinates": "40°7’23\"S 74°7’23\"E",
137
+ "verbatimLatitude": "40°7’23\"S",
138
+ "verbatimLongitude": "74°7’23\"E",
139
+ "decimalLatitude": -40.1230555555,
140
+ "decimalLongitude": 74.12305555555555
141
+ },
142
+ {
143
+ "verbatimCoordinates": "40°7’23\" -74°7’23\"",
144
+ "verbatimLatitude": "40°7’23\"",
145
+ "verbatimLongitude": "-74°7’23\"",
146
+ "decimalLatitude": 40.1230555555,
147
+ "decimalLongitude": -74.123055555
148
+ },
149
+ {
150
+ "verbatimCoordinates": "40d 7’ 23\" N 74d 7’ 23\" W",
151
+ "verbatimLatitude": "40d 7’ 23\" N",
152
+ "verbatimLongitude": "74d 7’ 23\" W",
153
+ "decimalLatitude": 40.1230555555,
154
+ "decimalLongitude": -74.123055555
155
+ },
156
+ {
157
+ "verbatimCoordinates": "40.123N 74.123W",
158
+ "verbatimLatitude": "40.123N",
159
+ "verbatimLongitude": "74.123W",
160
+ "decimalLatitude": 40.123,
161
+ "decimalLongitude": -74.123
162
+ },
163
+ {
164
+ "verbatimCoordinates": "40° 7.38, -74° 7.38",
165
+ "verbatimLatitude": "40° 7.38",
166
+ "verbatimLongitude": "-74° 7.38",
167
+ "decimalLatitude": 40.123,
168
+ "decimalLongitude": -74.123
169
+ },
170
+ {
171
+ "verbatimCoordinates": "40° 7.38, -74° 7.38",
172
+ "verbatimLatitude": "40° 7.38",
173
+ "verbatimLongitude": "-74° 7.38",
174
+ "decimalLatitude": 40.123,
175
+ "decimalLongitude": -74.123
176
+ },
177
+ {
178
+ "verbatimCoordinates": "40 7 22.8; -74 7 22.8",
179
+ "verbatimLatitude": "40 7 22.8",
180
+ "verbatimLongitude": "-74 7 22.8",
181
+ "decimalLatitude": 40.123,
182
+ "decimalLongitude": -74.123
183
+ },
184
+ {
185
+ "verbatimCoordinates": "50°4'17.698\"south, 14°24'2.826\"east",
186
+ "verbatimLatitude": "50°4'17.698\"south",
187
+ "verbatimLongitude": "14°24'2.826\"east",
188
+ "decimalLatitude": -50.07158277777778,
189
+ "decimalLongitude": 14.400785
190
+ },
191
+ {
192
+ "verbatimCoordinates": "50d4m17.698S 14d24m2.826E",
193
+ "verbatimLatitude": "50d4m17.698S",
194
+ "verbatimLongitude": "14d24m2.826E",
195
+ "decimalLatitude": -50.07158277777778,
196
+ "decimalLongitude": 14.400785
197
+ },
198
+ {
199
+ "verbatimCoordinates": "40:26:46N,79:56:55W",
200
+ "verbatimLatitude": "40:26:46N",
201
+ "verbatimLongitude": "79:56:55W",
202
+ "decimalLatitude": 40.44611111111111,
203
+ "decimalLongitude": -79.9486111111111
204
+ },
205
+ {
206
+ "verbatimCoordinates": "40:26:46.302N 79:56:55.903W",
207
+ "verbatimLatitude": "40:26:46.302N",
208
+ "verbatimLongitude": "79:56:55.903W",
209
+ "decimalLatitude": 40.446195,
210
+ "decimalLongitude": -79.94886194444445
211
+ },
212
+ {
213
+ "verbatimCoordinates": "40°26′47″N 79°58′36″W",
214
+ "verbatimLatitude": "40°26′47″N",
215
+ "verbatimLongitude": "79°58′36″W",
216
+ "decimalLatitude": 40.44638888888889,
217
+ "decimalLongitude": -79.97666666666667
218
+ },
219
+ {
220
+ "verbatimCoordinates": "40d 26′ 47″ N 79d 58′ 36″ W",
221
+ "verbatimLatitude": "40d 26′ 47″ N",
222
+ "verbatimLongitude": "79d 58′ 36″ W",
223
+ "decimalLatitude": 40.44638888888889,
224
+ "decimalLongitude": -79.97666666666667
225
+ },
226
+ {
227
+ "verbatimCoordinates": "40.446195N 79.948862W",
228
+ "verbatimLatitude": "40.446195N",
229
+ "verbatimLongitude": "79.948862W",
230
+ "decimalLatitude": 40.446195,
231
+ "decimalLongitude": -79.948862
232
+ },
233
+ {
234
+ "verbatimCoordinates": "40,446195° 79,948862°",
235
+ "verbatimLatitude": "40,446195°",
236
+ "verbatimLongitude": "79,948862°",
237
+ "decimalLatitude": 40.446195,
238
+ "decimalLongitude": 79.948862
239
+ },
240
+ {
241
+ "verbatimCoordinates": "40° 26.7717, -79° 56.93172",
242
+ "verbatimLatitude": "40° 26.7717",
243
+ "verbatimLongitude": "-79° 56.93172",
244
+ "decimalLatitude": 40.446195,
245
+ "decimalLongitude": -79.948862
246
+ },
247
+ {
248
+ "verbatimCoordinates": "40.446195, -79.948862",
249
+ "verbatimLatitude": "40.446195",
250
+ "verbatimLongitude": "-79.948862",
251
+ "decimalLatitude": 40.446195,
252
+ "decimalLongitude": -79.948862
253
+ },
254
+ {
255
+ "verbatimCoordinates": "40.123256; -74.123256",
256
+ "verbatimLatitude": "40.123256",
257
+ "verbatimLongitude": "-74.123256",
258
+ "decimalLatitude": 40.123256,
259
+ "decimalLongitude": -74.123256
260
+ },
261
+ {
262
+ "verbatimCoordinates": "18°24S 22°45E",
263
+ "verbatimLatitude": "18°24S",
264
+ "verbatimLongitude": "22°45E",
265
+ "decimalLatitude": -18.4,
266
+ "decimalLongitude": 22.75
267
+ },
268
+ {
269
+ "verbatimCoordinates": "10.432342S 10.6345345E",
270
+ "verbatimLatitude": "10.432342S",
271
+ "verbatimLongitude": "10.6345345E",
272
+ "decimalLatitude": -10.432342,
273
+ "decimalLongitude": 10.6345345
274
+ },
275
+ {
276
+ "verbatimCoordinates": "10.00S 10.00E",
277
+ "verbatimLatitude": "10.00S",
278
+ "verbatimLongitude": "10.00E",
279
+ "decimalLatitude": -10,
280
+ "decimalLongitude": 10
281
+ },
282
+ {
283
+ "verbatimCoordinates": "00.00S 01.00E",
284
+ "verbatimLatitude": "00.00S",
285
+ "verbatimLongitude": "01.00E",
286
+ "decimalLatitude": 0,
287
+ "decimalLongitude": 1
288
+ },
289
+ {
290
+ "verbatimCoordinates": "18.24S 22.45E",
291
+ "verbatimLatitude": "18.24S",
292
+ "verbatimLongitude": "22.45E",
293
+ "decimalLatitude": -18.4,
294
+ "decimalLongitude": 22.75
295
+ },
296
+ {
297
+ "verbatimCoordinates": "27deg 15min 45.2sec S 18deg 32min 53.7sec E",
298
+ "verbatimLatitude": "27deg 15min 45.2sec S",
299
+ "verbatimLongitude": "18deg 32min 53.7sec E",
300
+ "decimalLatitude": -27.262555555555554,
301
+ "decimalLongitude": 18.54825
302
+ },
303
+ {
304
+ "verbatimCoordinates": "-23.3245° S / 28.2344° E",
305
+ "verbatimLatitude": "-23.3245° S",
306
+ "verbatimLongitude": "28.2344° E",
307
+ "decimalLatitude": -23.3245,
308
+ "decimalLongitude": 28.2344
309
+ },
310
+ {
311
+ "verbatimCoordinates": "40° 26.7717 -79° 56.93172",
312
+ "verbatimLatitude": "40° 26.7717",
313
+ "verbatimLongitude": "-79° 56.93172",
314
+ "decimalLatitude": 40.446195,
315
+ "decimalLongitude": -79.948862
316
+ },
317
+ {
318
+ "verbatimCoordinates": "27.15.45S 18.32.53E",
319
+ "verbatimLatitude": "27.15.45S",
320
+ "verbatimLongitude": "18.32.53E",
321
+ "decimalLatitude": -27.2625,
322
+ "decimalLongitude": 18.548055
323
+ },
324
+ {
325
+ "verbatimCoordinates": "-27.15.45 18.32.53",
326
+ "verbatimLatitude": "-27.15.45",
327
+ "verbatimLongitude": "18.32.53",
328
+ "decimalLatitude": -27.2625,
329
+ "decimalLongitude": 18.548055
330
+ },
331
+ {
332
+ "verbatimCoordinates": "27.15.45.2S 18.32.53.4E",
333
+ "verbatimLatitude": "27.15.45.2S",
334
+ "verbatimLongitude": "18.32.53.4E",
335
+ "decimalLatitude": -27.262556,
336
+ "decimalLongitude": 18.548167
337
+ },
338
+ {
339
+ "verbatimCoordinates": "27.15.45,2S 18.32.53,4E",
340
+ "verbatimLatitude": "27.15.45,2S",
341
+ "verbatimLongitude": "18.32.53,4E",
342
+ "decimalLatitude": -27.262556,
343
+ "decimalLongitude": 18.548167
344
+ },
345
+ {
346
+ "verbatimCoordinates": "S23.43563 ° E22.45634 °",
347
+ "verbatimLatitude": "S23.43563 °",
348
+ "verbatimLongitude": "E22.45634 °",
349
+ "decimalLatitude": -23.43563,
350
+ "decimalLongitude": 22.45634
351
+ },
352
+ {
353
+ "verbatimCoordinates": "27,71372° S 23,07771° E",
354
+ "verbatimLatitude": "27,71372° S",
355
+ "verbatimLongitude": "23,07771° E",
356
+ "decimalLatitude": -27.71372,
357
+ "decimalLongitude": 23.07771
358
+ },
359
+ {
360
+ "verbatimCoordinates": "27.45.34 S 23.23.23 E",
361
+ "verbatimLatitude": "27.45.34 S",
362
+ "verbatimLongitude": "23.23.23 E",
363
+ "decimalLatitude": -27.759444,
364
+ "decimalLongitude": 23.38972222
365
+ },
366
+ {
367
+ "verbatimCoordinates": "S 27.45.34 E 23.23.23",
368
+ "verbatimLatitude": "S 27.45.34",
369
+ "verbatimLongitude": "E 23.23.23",
370
+ "decimalLatitude": -27.759444,
371
+ "decimalLongitude": 23.38972222
372
+ },
373
+ {
374
+ "verbatimCoordinates": "53 16.3863,4 52.8171",
375
+ "verbatimLatitude": "53 16.3863",
376
+ "verbatimLongitude": "4 52.8171",
377
+ "decimalLatitude": 53.273105,
378
+ "decimalLongitude": 4.88029
379
+ },
380
+ {
381
+ "verbatimCoordinates": "50 8.2914,-5 2.4447",
382
+ "verbatimLatitude": "50 8.2914",
383
+ "verbatimLongitude": "-5 2.4447",
384
+ "decimalLatitude": 50.13819,
385
+ "decimalLongitude": -5.040745
386
+ },
387
+ {
388
+ "verbatimCoordinates": "N 48° 30,6410', E 18° 57,4583'",
389
+ "verbatimLatitude": "N 48° 30,6410'",
390
+ "verbatimLongitude": "E 18° 57,4583'",
391
+ "decimalLatitude": 48.51068,
392
+ "decimalLongitude": 18.95764
393
+ }
394
+ ]