Merge pull request #11721 from mike-000/patch-21
Handle empty Z coordinates in KML
This commit is contained in:
@@ -1117,7 +1117,8 @@ export function readFlatCoordinates(node) {
|
|||||||
const flatCoordinates = [];
|
const flatCoordinates = [];
|
||||||
// The KML specification states that coordinate tuples should not include
|
// The KML specification states that coordinate tuples should not include
|
||||||
// spaces, but we tolerate them.
|
// spaces, but we tolerate them.
|
||||||
const re = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;
|
s = s.replace(/\s*,\s*/g, ',');
|
||||||
|
const re = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?),([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s+|,|$)(?:([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s+|$))?\s*/i;
|
||||||
let m;
|
let m;
|
||||||
while ((m = re.exec(s))) {
|
while ((m = re.exec(s))) {
|
||||||
const x = parseFloat(m[1]);
|
const x = parseFloat(m[1]);
|
||||||
|
|||||||
@@ -468,6 +468,54 @@ describe('ol.format.KML', function () {
|
|||||||
expect(g.get('altitudeMode')).to.be('absolute');
|
expect(g.get('altitudeMode')).to.be('absolute');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can read XY coordinates', function () {
|
||||||
|
const text =
|
||||||
|
'<kml xmlns="http://earth.google.com/kml/2.2">' +
|
||||||
|
' <Placemark>' +
|
||||||
|
' <LineString>' +
|
||||||
|
' <coordinates>1,2 3,4</coordinates>' +
|
||||||
|
' <extrude>0</extrude>' +
|
||||||
|
' <tessellate>1</tessellate>' +
|
||||||
|
' <altitudeMode>absolute</altitudeMode>' +
|
||||||
|
' </LineString>' +
|
||||||
|
' </Placemark>' +
|
||||||
|
'</kml>';
|
||||||
|
const fs = format.readFeatures(text);
|
||||||
|
expect(fs).to.have.length(1);
|
||||||
|
const f = fs[0];
|
||||||
|
expect(f).to.be.an(Feature);
|
||||||
|
const g = f.getGeometry();
|
||||||
|
expect(g).to.be.an(LineString);
|
||||||
|
expect(g.getCoordinates()).to.eql([
|
||||||
|
[1, 2, 0],
|
||||||
|
[3, 4, 0],
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can read empty Z coordinates', function () {
|
||||||
|
const text =
|
||||||
|
'<kml xmlns="http://earth.google.com/kml/2.2">' +
|
||||||
|
' <Placemark>' +
|
||||||
|
' <LineString>' +
|
||||||
|
' <coordinates>1,2, 3,4,</coordinates>' +
|
||||||
|
' <extrude>0</extrude>' +
|
||||||
|
' <tessellate>1</tessellate>' +
|
||||||
|
' <altitudeMode>absolute</altitudeMode>' +
|
||||||
|
' </LineString>' +
|
||||||
|
' </Placemark>' +
|
||||||
|
'</kml>';
|
||||||
|
const fs = format.readFeatures(text);
|
||||||
|
expect(fs).to.have.length(1);
|
||||||
|
const f = fs[0];
|
||||||
|
expect(f).to.be.an(Feature);
|
||||||
|
const g = f.getGeometry();
|
||||||
|
expect(g).to.be.an(LineString);
|
||||||
|
expect(g.getCoordinates()).to.eql([
|
||||||
|
[1, 2, 0],
|
||||||
|
[3, 4, 0],
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
it('can write XY LineString geometries', function () {
|
it('can write XY LineString geometries', function () {
|
||||||
const layout = 'XY';
|
const layout = 'XY';
|
||||||
const lineString = new LineString(
|
const lineString = new LineString(
|
||||||
|
|||||||
Reference in New Issue
Block a user