@wemap/osm 12.12.1 → 12.12.3
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.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/src/OsmTags.d.ts +2 -2
- package/dist/src/OsmTagsUtils.d.ts +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=Object.defineProperty,t=(t,s,r)=>(((t,s,r)=>{s in t?e(t,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[s]=r})(t,"symbol"!=typeof s?s+"":s,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@wemap/geo"),r=require("saxes");class n{constructor(e,s){t(this,"id"),t(this,"tags"),this.id=e,this.tags=s||{}}get name(){return this.tags.name}}class i{constructor(e,s,r){t(this,"nodes"),t(this,"ways"),t(this,"relations"),this.nodes=e||[],this.ways=s||[],this.relations=r||[]}getNodeById(e){return this.nodes.find((t=>t.id===e))||null}getNodeByName(e){return this.nodes.find((t=>t.tags.name===e))||null}getWayById(e){return this.ways.find((t=>t.id===e))||null}getWayByName(e){return this.ways.find((t=>t.tags.name===e))||null}getRelationById(e){return this.relations.find((t=>t.id===e))||null}getRelationByName(e){return this.relations.find((t=>t.tags.name===e))||null}}class o extends n{constructor(e,s,r){super(e,r),t(this,"coords"),t(this,"ways",[]),t(this,"relations",[]),this.coords=s,this.computeCoordsLevelFromTags()}computeCoordsLevelFromTags(){void 0!==this.tags.level&&(this.coords.level=s.Level.fromString(this.tags.level))}}class a extends n{constructor(e,s,r=null){super(e,s),t(this,"nodes",[]),t(this,"relations",[]),t(this,"level",null),this.level=r,this.computeLevelFromTags()}computeLevelFromTags(){void 0!==this.tags.level&&(this.level=s.Level.fromString(this.tags.level))}get isGeometryClosed(){return this.nodes[0]===this.nodes[this.nodes.length-1]}getGeoJsonPolygon(){const e=this.nodes.map((e=>[e.coords.lng,e.coords.lat]));return this.isGeometryClosed||e.push([this.nodes[0].coords.lng,this.nodes[0].coords.lat]),{type:"Polygon",coordinates:[e]}}}class l extends n{constructor(e,s=[],r){super(e,r),t(this,"relations",[]),this.members=s}isMultipolygon(){return"multipolygon"===this.tags.type}getGeoJsonPolygon(){if(!this.isMultipolygon())return null;const e=this.members.find((e=>e.ref instanceof a&&"outer"===e.role));if(!e)return null;return{type:"Polygon",coordinates:[e,...this.members.filter((e=>e.ref instanceof a&&"inner"===e.role))].map((e=>e.ref.nodes.map((e=>[e.coords.lng,e.coords.lat]))))}}}exports.OsmElement=n,exports.OsmModel=i,exports.OsmNode=o,exports.OsmParser=class{static parseOsmXmlString(e){const t=new i,s=new r.SaxesParser;let n;const o=e=>e.attributes.action&&"delete"===e.attributes.action;return s.on("opentag",(e=>{switch(e.name){case"node":{if(o(e)){n=null;break}const s=this._parseNode(e.attributes);n=s,t.nodes.push(s);break}case"way":{if(o(e)){n=null;break}const s=this._parseWay(e.attributes);n=s,t.ways.push(s);break}case"relation":{if(o(e)){n=null;break}const s=this._parseRelation(e.attributes);n=s,t.relations.push(s);break}case"tag":{if(!n)return;const{k:t,v:s}=e.attributes;n.tags[t]=s;break}case"nd":{if(!(n&&n instanceof a))return;const s=Number(e.attributes.ref),r=t.getNodeById(s);if(!r)throw Error("Node: "+s+" in way "+n.id+" not found");n.nodes.push(r),r.ways.push(n);break}case"member":{if(!(n&&n instanceof l))return;const s=Number(e.attributes.ref),r=e.attributes.type;let i=null;if("node"===r&&(i=t.getNodeById(s)),"way"===r&&(i=t.getWayById(s)),"relation"===r&&(i=t.getRelationById(s)),!i)throw Error("Member: "+s+" in relation "+n.id+" not found");n.members.push({ref:i,role:e.attributes.role}),i.relations.push(n);break}}})),s.write(e),t.nodes.forEach((e=>e.computeCoordsLevelFromTags())),t.ways.forEach((e=>e.computeLevelFromTags())),t}static _parseNode(e){return new o(Number(e.id),new s.Coordinates(Number(e.lat),Number(e.lon)))}static _parseWay(e){return new a(Number(e.id))}static _parseRelation(e){return new l(Number(e.id))}},exports.OsmRelation=l,exports.OsmTagsUtils=class{static elementName(e){return e.name}static areStairs(e){return"steps"===e.highway&&!e.conveying}static isConveying(e){return Boolean(e.conveying)||this.isElevator(e)}static isElevator(e){return"elevator"===e.highway}static isEscalator(e){return"steps"===e.highway&&this.isConveying(e)}static isMovingWalkway(e){return Boolean(e.highway)&&"steps"!==e.highway&&this.isConveying(e)}static isOneway(e){const{highway:t,oneway:s,conveying:r}=e;return Boolean("yes"===s||r&&t&&["forward","backward"].includes(r))}static isOnewayBackward(e){return this.isOneway(e)&&"backward"===e.conveying}static needTicket(e){return!1}static getIncline(e){if(e.incline&&["up","down"].includes(e.incline))return e.incline}static getWheelchair(e){return"wheelchair"in e?e.wheelchair:void 0}static getSurface(e){return"surface"in e?e.surface:void 0}static getSmoothness(e){return"smoothness"in e?e.smoothness:void 0}static isSubwayEntrance(e){return"subway_entrance"===e.railway}static getRef(e){return e.ref}static isGate(e){return"gate"===e.barrier||"gate"===e.aeroway}static isArea(e){return"yes"===e.area}static isRoutingBounds(e){return"yes"===e["wemap:routing-bounds"]}static isRoutingBoundsEntryPoint(e){return"yes"===e["wemap:routing-io"]}},exports.OsmWay=a;
|
|
1
|
+
"use strict";var e=Object.defineProperty,t=(t,s,r)=>(((t,s,r)=>{s in t?e(t,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[s]=r})(t,"symbol"!=typeof s?s+"":s,r),r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@wemap/geo"),r=require("saxes");class n{constructor(e,s){t(this,"id"),t(this,"tags"),this.id=e,this.tags=s||{}}get name(){return this.tags.name}}class i{constructor(e,s,r){t(this,"nodes"),t(this,"ways"),t(this,"relations"),this.nodes=e||[],this.ways=s||[],this.relations=r||[]}getNodeById(e){return this.nodes.find((t=>t.id===e))||null}getNodeByName(e){return this.nodes.find((t=>t.tags.name===e))||null}getWayById(e){return this.ways.find((t=>t.id===e))||null}getWayByName(e){return this.ways.find((t=>t.tags.name===e))||null}getRelationById(e){return this.relations.find((t=>t.id===e))||null}getRelationByName(e){return this.relations.find((t=>t.tags.name===e))||null}}class o extends n{constructor(e,s,r){super(e,r),t(this,"coords"),t(this,"ways",[]),t(this,"relations",[]),this.coords=s,this.computeCoordsLevelFromTags()}computeCoordsLevelFromTags(){void 0!==this.tags.level&&(this.coords.level=s.Level.fromString(this.tags.level))}}class a extends n{constructor(e,s,r=null){super(e,s),t(this,"nodes",[]),t(this,"relations",[]),t(this,"level",null),this.level=r,this.computeLevelFromTags()}computeLevelFromTags(){void 0!==this.tags.level&&(this.level=s.Level.fromString(this.tags.level))}get isGeometryClosed(){return this.nodes[0]===this.nodes[this.nodes.length-1]}getGeoJsonPolygon(){const e=this.nodes.map((e=>[e.coords.lng,e.coords.lat]));return this.isGeometryClosed||e.push([this.nodes[0].coords.lng,this.nodes[0].coords.lat]),{type:"Polygon",coordinates:[e]}}}class l extends n{constructor(e,s=[],r){super(e,r),t(this,"relations",[]),this.members=s}isMultipolygon(){return"multipolygon"===this.tags.type}getGeoJsonPolygon(){if(!this.isMultipolygon())return null;const e=this.members.find((e=>e.ref instanceof a&&"outer"===e.role));if(!e)return null;return{type:"Polygon",coordinates:[e,...this.members.filter((e=>e.ref instanceof a&&"inner"===e.role))].map((e=>e.ref.nodes.map((e=>[e.coords.lng,e.coords.lat]))))}}}exports.OsmElement=n,exports.OsmModel=i,exports.OsmNode=o,exports.OsmParser=class{static parseOsmXmlString(e){const t=new i,s=new r.SaxesParser;let n;const o=e=>e.attributes.action&&"delete"===e.attributes.action;return s.on("opentag",(e=>{switch(e.name){case"node":{if(o(e)){n=null;break}const s=this._parseNode(e.attributes);n=s,t.nodes.push(s);break}case"way":{if(o(e)){n=null;break}const s=this._parseWay(e.attributes);n=s,t.ways.push(s);break}case"relation":{if(o(e)){n=null;break}const s=this._parseRelation(e.attributes);n=s,t.relations.push(s);break}case"tag":{if(!n)return;const{k:t,v:s}=e.attributes;n.tags[t]=s;break}case"nd":{if(!(n&&n instanceof a))return;const s=Number(e.attributes.ref),r=t.getNodeById(s);if(!r)throw Error("Node: "+s+" in way "+n.id+" not found");n.nodes.push(r),r.ways.push(n);break}case"member":{if(!(n&&n instanceof l))return;const s=Number(e.attributes.ref),r=e.attributes.type;let i=null;if("node"===r&&(i=t.getNodeById(s)),"way"===r&&(i=t.getWayById(s)),"relation"===r&&(i=t.getRelationById(s)),!i)throw Error("Member: "+s+" in relation "+n.id+" not found");n.members.push({ref:i,role:e.attributes.role}),i.relations.push(n);break}}})),s.write(e),t.nodes.forEach((e=>e.computeCoordsLevelFromTags())),t.ways.forEach((e=>e.computeLevelFromTags())),t}static _parseNode(e){return new o(Number(e.id),new s.Coordinates(Number(e.lat),Number(e.lon)))}static _parseWay(e){return new a(Number(e.id))}static _parseRelation(e){return new l(Number(e.id))}},exports.OsmRelation=l,exports.OsmTagsUtils=class{static elementName(e){return e.name}static areStairs(e){return"steps"===e.highway&&!e.conveying}static isConveying(e){return Boolean(e.conveying)||this.isElevator(e)}static isElevator(e){return"elevator"===e.highway}static isEscalator(e){return"steps"===e.highway&&this.isConveying(e)}static isMovingWalkway(e){return Boolean(e.highway)&&"steps"!==e.highway&&this.isConveying(e)}static isOneway(e){const{highway:t,oneway:s,conveying:r}=e;return Boolean("yes"===s||r&&t&&["forward","backward"].includes(r))}static isOnewayBackward(e){return this.isOneway(e)&&"backward"===e.conveying}static needTicket(e){return!1}static getIncline(e){if(e.incline&&["up","down"].includes(e.incline))return e.incline}static getWheelchair(e){return"wheelchair"in e?e.wheelchair:void 0}static getSurface(e){return"surface"in e?e.surface:void 0}static getSmoothness(e){return"smoothness"in e?e.smoothness:void 0}static isSubwayEntrance(e){return"subway_entrance"===e.railway}static getRef(e){return e.ref}static isGate(e){return"gate"===e.barrier||"gate"===e.aeroway}static isArea(e){return"yes"===e.area}static isTurnstile(e){return"turnstile"===e.barrier}static isRoutingBounds(e){return"yes"===e["wemap:routing-bounds"]}static isRoutingBoundsEntryPoint(e){return"yes"===e["wemap:routing-io"]}},exports.OsmWay=a;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n\n get name(): string | undefined {\n return this.tags.name;\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nclass OsmNode extends OsmElement {\n\n coords: Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k as keyof OsmTags] = v as any;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":["OsmElement","constructor","id","tags","__publicField","this","name","OsmModel","nodes","ways","relations","getNodeById","find","node","getNodeByName","getWayById","way","getWayByName","getRelationById","getRelationByName","OsmNode","coords","super","computeCoordsLevelFromTags","level","Level","fromString","OsmWay","computeLevelFromTags","isGeometryClosed","length","getGeoJsonPolygon","coordinates","map","lng","lat","push","type","OsmRelation","members","isMultipolygon","outer","member","ref","role","filter","parseOsmXmlString","osmXmlString","model","parser","SaxesParser","buffer","isDeleted","element","attributes","action","on","osmNode","_parseNode","osmWay","_parseWay","osmRelation","_parseRelation","k","v","nodeId","Number","refNode","Error","memberId","memberType","refElement","write","forEach","attr","Coordinates","lon","elementName","areStairs","highway","conveying","isConveying","Boolean","isElevator","isEscalator","isMovingWalkway","isOneway","oneway","includes","isOnewayBackward","needTicket","getIncline","incline","getWheelchair","wheelchair","getSurface","surface","getSmoothness","smoothness","isSubwayEntrance","railway","getRef","isGate","barrier","aeroway","isArea","area","isRoutingBounds","isRoutingBoundsEntryPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n\n get name(): string | undefined {\n return this.tags.name;\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nclass OsmNode extends OsmElement {\n\n coords: Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k as keyof OsmTags] = v as any;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n static isTurnstile(tags: OsmTags) {\n return tags.barrier === 'turnstile';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":["OsmElement","constructor","id","tags","__publicField","this","name","OsmModel","nodes","ways","relations","getNodeById","find","node","getNodeByName","getWayById","way","getWayByName","getRelationById","getRelationByName","OsmNode","coords","super","computeCoordsLevelFromTags","level","Level","fromString","OsmWay","computeLevelFromTags","isGeometryClosed","length","getGeoJsonPolygon","coordinates","map","lng","lat","push","type","OsmRelation","members","isMultipolygon","outer","member","ref","role","filter","parseOsmXmlString","osmXmlString","model","parser","SaxesParser","buffer","isDeleted","element","attributes","action","on","osmNode","_parseNode","osmWay","_parseWay","osmRelation","_parseRelation","k","v","nodeId","Number","refNode","Error","memberId","memberType","refElement","write","forEach","attr","Coordinates","lon","elementName","areStairs","highway","conveying","isConveying","Boolean","isElevator","isEscalator","isMovingWalkway","isOneway","oneway","includes","isOnewayBackward","needTicket","getIncline","incline","getWheelchair","wheelchair","getSurface","surface","getSmoothness","smoothness","isSubwayEntrance","railway","getRef","isGate","barrier","aeroway","isArea","area","isTurnstile","isRoutingBounds","isRoutingBoundsEntryPoint"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -266,6 +266,9 @@ class OsmTagsUtils {
|
|
|
266
266
|
static isArea(tags) {
|
|
267
267
|
return tags.area === "yes";
|
|
268
268
|
}
|
|
269
|
+
static isTurnstile(tags) {
|
|
270
|
+
return tags.barrier === "turnstile";
|
|
271
|
+
}
|
|
269
272
|
// Wemap specific
|
|
270
273
|
static isRoutingBounds(tags) {
|
|
271
274
|
return tags["wemap:routing-bounds"] === "yes";
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n\n get name(): string | undefined {\n return this.tags.name;\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nclass OsmNode extends OsmElement {\n\n coords: Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k as keyof OsmTags] = v as any;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n\n get name(): string | undefined {\n return this.tags.name;\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nclass OsmNode extends OsmElement {\n\n coords: Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k as keyof OsmTags] = v as any;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n static isTurnstile(tags: OsmTags) {\n return tags.barrier === 'turnstile';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":[],"mappings":"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"}
|
package/dist/src/OsmTags.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type OsmSurface = 'asphalt' | 'compacted' | 'concrete' | 'grass' | 'gravel' | 'ground' | 'metal' | 'paving_stones' | 'wood';
|
|
2
2
|
export type OsmSmoothness = 'excellent' | 'good' | 'intermediate' | 'bad' | 'horrible';
|
|
3
|
-
export type OsmWheelchair = 'yes' | 'no' | 'designated';
|
|
3
|
+
export type OsmWheelchair = 'yes' | 'no' | 'limited' | 'designated';
|
|
4
4
|
export type OsmHighway = 'footway' | 'steps' | 'elevator' | 'moving_walkway';
|
|
5
5
|
export type OsmTags = {
|
|
6
6
|
name?: string;
|
|
@@ -15,7 +15,7 @@ export type OsmTags = {
|
|
|
15
15
|
wheelchair?: OsmWheelchair;
|
|
16
16
|
railway?: 'rail' | 'switch' | 'level_crossing' | 'subway_entrance' | 'platform';
|
|
17
17
|
ref?: string;
|
|
18
|
-
barrier?: 'gate' | 'fence' | 'wall' | 'hedge' | 'kerb';
|
|
18
|
+
barrier?: 'gate' | 'fence' | 'wall' | 'hedge' | 'kerb' | 'turnstile';
|
|
19
19
|
aeroway?: 'taxiway' | 'gate';
|
|
20
20
|
foot?: 'yes' | 'no' | 'designated';
|
|
21
21
|
access?: 'yes' | 'no' | 'private' | 'customers' | 'permissive' | 'destination';
|
|
@@ -17,6 +17,7 @@ export default class OsmTagsUtils {
|
|
|
17
17
|
static getRef(tags: OsmTags): string | undefined;
|
|
18
18
|
static isGate(tags: OsmTags): boolean;
|
|
19
19
|
static isArea(tags: OsmTags): boolean;
|
|
20
|
+
static isTurnstile(tags: OsmTags): boolean;
|
|
20
21
|
static isRoutingBounds(tags: OsmTags): boolean;
|
|
21
22
|
static isRoutingBoundsEntryPoint(tags: OsmTags): boolean;
|
|
22
23
|
}
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/osm"
|
|
13
13
|
},
|
|
14
14
|
"name": "@wemap/osm",
|
|
15
|
-
"version": "12.12.
|
|
15
|
+
"version": "12.12.3",
|
|
16
16
|
"bugs": {
|
|
17
17
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
18
18
|
},
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/geojson": "^7946.0.14"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "4f0a5de98a7403222c07fc9d225f74fc7ee02c9c"
|
|
50
50
|
}
|