ojp-sdk-legacy
Version:
OJP (Open Journey Planner) Javascript SDK (legacy version)
59 lines (58 loc) • 2.14 kB
JavaScript
import { GeoPosition } from "../location/geoposition";
import { GeoPositionBBOX } from "../location/geoposition-bbox";
export class LinkProjection {
// TODO - add length or computeLength()
constructor(coordinates, bbox) {
this.coordinates = coordinates;
this.bbox = bbox;
}
static initWithTreeNode(treeNode) {
const linkProjectionTreeNode = treeNode.findChildNamed('LinkProjection');
if (linkProjectionTreeNode === null) {
return null;
}
const coordinates = [];
const positionTreeNodes = linkProjectionTreeNode.findChildrenNamed('Position');
positionTreeNodes.forEach(positionTreeNode => {
const longitudeS = positionTreeNode.findTextFromChildNamed('siri:Longitude');
const latitudeS = positionTreeNode.findTextFromChildNamed('siri:Latitude');
if (longitudeS && latitudeS) {
const position = new GeoPosition(parseFloat(longitudeS), parseFloat(latitudeS));
coordinates.push(position);
}
});
if (coordinates.length < 2) {
return null;
}
const bbox = new GeoPositionBBOX(coordinates);
const linkProjection = new LinkProjection(coordinates, bbox);
return linkProjection;
}
computeLength() {
let distAB = 0;
this.coordinates.forEach((geoPositionB, idx) => {
if (idx === 0) {
return;
}
const geoPositionA = this.coordinates[idx - 1];
distAB += geoPositionB.distanceFrom(geoPositionA);
});
return distAB;
}
asGeoJSONFeature() {
const feature = {
type: 'Feature',
bbox: this.bbox.asFeatureBBOX(),
properties: {},
geometry: {
type: 'LineString',
coordinates: []
}
};
this.coordinates.forEach(geoPosition => {
const pointCoords = [geoPosition.longitude, geoPosition.latitude];
feature.geometry.coordinates.push(pointCoords);
});
return feature;
}
}