terraformer-wkt-parser
Advanced tools
Comparing version 0.1.3 to 0.1.4
var parser = require('./parser'); | ||
exports.parser = parser; | ||
exports.parse = parser.parse; | ||
exports.parse = parser.parse; | ||
exports.convert = parser.convert; |
{ | ||
"name": "terraformer-wkt-parser", | ||
"version": "0.1.3", | ||
"version": "0.1.4", | ||
"description": "Well-Known Text parser", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
206
parser.js
@@ -467,4 +467,208 @@ (function (root, factory) { | ||
return new Parser; | ||
})(); | ||
})();function arrayToRing (arr) { | ||
var parts = [ ], ret = ''; | ||
for (var i = 0; i < arr.length; i++) { | ||
parts.push(arr[i].join(' ')); | ||
} | ||
ret += '(' + parts.join(', ') + ')'; | ||
return ret; | ||
} | ||
function pointToWKTPoint (primitive) { | ||
var ret = 'POINT '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates.length === 3) { | ||
// 3d or time? default to 3d | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates.length === 4) { | ||
// 3d and time | ||
ret += 'ZM '; | ||
} | ||
// include coordinates | ||
ret += '(' + primitive.coordinates.join(' ') + ')'; | ||
return ret; | ||
} | ||
function lineStringToWKTLineString (primitive) { | ||
var ret = 'LINESTRING '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates[0][0].length === 3) { | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates[0][0].length === 4) { | ||
ret += 'ZM '; | ||
} | ||
ret += arrayToRing(primitive.coordinates); | ||
return ret; | ||
} | ||
function polygonToWKTPolygon (primitive) { | ||
var ret = 'POLYGON '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates[0][0].length === 3) { | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates[0][0].length === 4) { | ||
ret += 'ZM '; | ||
} | ||
ret += '('; | ||
var parts = [ ]; | ||
for (var i = 0; i < primitive.coordinates.length; i++) { | ||
parts.push(arrayToRing(primitive.coordinates[i])); | ||
} | ||
ret += parts.join(', '); | ||
ret += ')'; | ||
return ret; | ||
} | ||
function multiPointToWKTMultiPoint (primitive) { | ||
var ret = 'MULTIPOINT '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates[0][0].length === 3) { | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates[0][0].length === 4) { | ||
ret += 'ZM '; | ||
} | ||
ret += arrayToRing(primitive.coordinates); | ||
return ret; | ||
} | ||
function multiLineStringToWKTMultiLineString (primitive) { | ||
var ret = 'MULTILINESTRING '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates[0][0].length === 3) { | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates[0][0].length === 4) { | ||
ret += 'ZM '; | ||
} | ||
ret += '('; | ||
var parts = [ ]; | ||
for (var i = 0; i < primitive.coordinates.length; i++) { | ||
parts.push(arrayToRing(primitive.coordinates[i])); | ||
} | ||
ret += parts.join(', '); | ||
ret += ')'; | ||
return ret; | ||
} | ||
function multiPolygonToWKTMultiPolygon (primitive) { | ||
var ret = 'MULTIPOLYGON '; | ||
if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) { | ||
ret += 'EMPTY'; | ||
return ret; | ||
} else if (primitive.coordinates[0][0][0].length === 3) { | ||
if (primitive.properties.m === true) { | ||
ret += 'M '; | ||
} else { | ||
ret += 'Z '; | ||
} | ||
} else if (primitive.coordinates[0][0][0].length === 4) { | ||
ret += 'ZM '; | ||
} | ||
ret += '('; | ||
var inner = [ ]; | ||
for (var c = 0; c < primitive.coordinates.length; c++) { | ||
var it = '('; | ||
var parts = [ ]; | ||
for (var i = 0; i < primitive.coordinates[c].length; i++) { | ||
parts.push(arrayToRing(primitive.coordinates[c][i])); | ||
} | ||
it += parts.join(', '); | ||
it += ')'; | ||
inner.push(it); | ||
} | ||
ret += inner.join(', '); | ||
ret += ')'; | ||
return ret; | ||
} | ||
function convert (primitive) { | ||
switch (primitive.type) { | ||
case 'Point': | ||
return pointToWKTPoint(primitive); | ||
break; | ||
case 'LineString': | ||
return lineStringToWKTLineString(primitive); | ||
break; | ||
case 'Polygon': | ||
return polygonToWKTPolygon(primitive); | ||
break; | ||
case 'MultiPoint': | ||
return multiPointToWKTMultiPoint(primitive); | ||
break; | ||
case 'MultiLineString': | ||
return multiLineStringToWKTMultiLineString(primitive); | ||
break; | ||
case 'MultiPolygon': | ||
return multiPolygonToWKTMultiPolygon(primitive); | ||
break; | ||
default: | ||
throw Error ("Unknown Type: " + primitive.type); | ||
} | ||
} | ||
exports.convert = convert; | ||
function PointArray (point) { | ||
@@ -471,0 +675,0 @@ this.data = [ point ]; |
@@ -17,2 +17,10 @@ # Terraformer Well-Known Text Parser | ||
var polygon = wkt.convert( | ||
{ | ||
"type": "Polygon", | ||
"coordinates": [ | ||
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ], | ||
[ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ] | ||
] | ||
} | ||
); |
@@ -222,3 +222,2 @@ var vows = require('vows'), | ||
'the point should be correctly converted to Loqi-GeoJSON internally': function (topic) { | ||
console.dir(topic); | ||
assert.equal(topic.type, "MultiPolygon"); | ||
@@ -225,0 +224,0 @@ assert.equal(topic.coordinates.length, 2); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
52272
28
1343
26