@wemap/osm 12.10.9 → 12.11.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 +9 -0
- package/dist/index.mjs.map +1 -1
- package/dist/src/OsmTypes.d.ts +3 -0
- package/dist/src/OsmWay.d.ts +4 -0
- package/package.json +3 -3
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 i{constructor(e,s){t(this,"id"),t(this,"tags"),this.id=e,this.tags=s||{}}get name(){return this.tags.name}}class n{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 a extends i{constructor(e,s,r){super(e,r),t(this,"coords"),t(this,"ways",[]),t(this,"relations",[]),this.coords=s,this.computeCoordsLevelFromTags()}computeCoordsLevelFromTags(){"level"in this.tags&&(this.coords.level=s.Level.fromString(this.tags.level))}get isElevator(){return"elevator"===this.tags.highway}get isConveying(){return this.isElevator}get isGate(){return"gate"===this.tags.barrier||"gate"===this.tags.aeroway}get isSubwayEntrance(){return"subway_entrance"===this.tags.railway}get subwayEntranceRef(){if(this.isSubwayEntrance)return this.tags.ref}}class o extends i{constructor(e,s,r=null){super(e,s),t(this,"nodes",[]),t(this,"relations",[]),t(this,"level",null),this.level=r,this.computeLevelFromTags()}computeLevelFromTags(){"level"in this.tags&&(this.level=s.Level.fromString(this.tags.level))}get areStairs(){return"steps"===this.tags.highway&&!this.isConveying}get isConveying(){return Boolean(this.tags.conveying)}get areEscalators(){return"steps"===this.tags.highway&&this.isConveying}get isMovingWalkway(){return Boolean(this.tags.highway)&&"steps"!==this.tags.highway&&this.isConveying}get isElevator(){return"elevator"===this.tags.highway}get isOneway(){const{highway:e,oneway:t,conveying:s}=this.tags;return Boolean("yes"===t||"true"===t||"1"===t||s&&e&&["forward","backward"].includes(s))}get isOnewayBackward(){return this.isOneway&&"backward"===this.tags.conveying}get isArea(){return"yes"===this.tags.area}get isGeometryClosed(){return this.nodes[0]===this.nodes[this.nodes.length-1]}get needTicket(){return!1}get incline(){if(["up","down"].includes(this.tags.incline))return this.tags.incline}}class l extends i{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 o&&"outer"===e.role));if(!e)return null;return{type:"Polygon",coordinates:[e,...this.members.filter((e=>e.ref instanceof o&&"inner"===e.role))].map((e=>e.ref.nodes.map((e=>[e.coords.lng,e.coords.lat]))))}}}exports.OsmElement=i,exports.OsmModel=n,exports.OsmNode=a,exports.OsmParser=class{static parseOsmXmlString(e){const t=new n,s=new r.SaxesParser;let i;const a=e=>e.attributes.action&&"delete"===e.attributes.action;return s.on("opentag",(e=>{switch(e.name){case"node":{if(a(e)){i=null;break}const s=this._parseNode(e.attributes);i=s,t.nodes.push(s);break}case"way":{if(a(e)){i=null;break}const s=this._parseWay(e.attributes);i=s,t.ways.push(s);break}case"relation":{if(a(e)){i=null;break}const s=this._parseRelation(e.attributes);i=s,t.relations.push(s);break}case"tag":{if(!i)return;const{k:t,v:s}=e.attributes;i.tags[t]=s;break}case"nd":{if(!(i&&i instanceof o))return;const s=Number(e.attributes.ref),r=t.getNodeById(s);if(!r)throw Error("Node: "+s+" in way "+i.id+" not found");i.nodes.push(r),r.ways.push(i);break}case"member":{if(!(i&&i instanceof l))return;const s=Number(e.attributes.ref),r=e.attributes.type;let n=null;if("node"===r&&(n=t.getNodeById(s)),"way"===r&&(n=t.getWayById(s)),"relation"===r&&(n=t.getRelationById(s)),!n)throw Error("Member: "+s+" in relation "+i.id+" not found");i.members.push({ref:n,role:e.attributes.role}),n.relations.push(i);break}}})),s.write(e),t.nodes.forEach((e=>e.computeCoordsLevelFromTags())),t.ways.forEach((e=>e.computeLevelFromTags())),t}static _parseNode(e){return new a(Number(e.id),new s.Coordinates(Number(e.lat),Number(e.lon)))}static _parseWay(e){return new o(Number(e.id))}static _parseRelation(e){return new l(Number(e.id))}},exports.OsmRelation=l,exports.OsmWay=o;
|
|
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 i{constructor(e,s){t(this,"id"),t(this,"tags"),this.id=e,this.tags=s||{}}get name(){return this.tags.name}}class n{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 a extends i{constructor(e,s,r){super(e,r),t(this,"coords"),t(this,"ways",[]),t(this,"relations",[]),this.coords=s,this.computeCoordsLevelFromTags()}computeCoordsLevelFromTags(){"level"in this.tags&&(this.coords.level=s.Level.fromString(this.tags.level))}get isElevator(){return"elevator"===this.tags.highway}get isConveying(){return this.isElevator}get isGate(){return"gate"===this.tags.barrier||"gate"===this.tags.aeroway}get isSubwayEntrance(){return"subway_entrance"===this.tags.railway}get subwayEntranceRef(){if(this.isSubwayEntrance)return this.tags.ref}}class o extends i{constructor(e,s,r=null){super(e,s),t(this,"nodes",[]),t(this,"relations",[]),t(this,"level",null),this.level=r,this.computeLevelFromTags()}computeLevelFromTags(){"level"in this.tags&&(this.level=s.Level.fromString(this.tags.level))}get areStairs(){return"steps"===this.tags.highway&&!this.isConveying}get isConveying(){return Boolean(this.tags.conveying)}get areEscalators(){return"steps"===this.tags.highway&&this.isConveying}get isMovingWalkway(){return Boolean(this.tags.highway)&&"steps"!==this.tags.highway&&this.isConveying}get isElevator(){return"elevator"===this.tags.highway}get isOneway(){const{highway:e,oneway:t,conveying:s}=this.tags;return Boolean("yes"===t||"true"===t||"1"===t||s&&e&&["forward","backward"].includes(s))}get isOnewayBackward(){return this.isOneway&&"backward"===this.tags.conveying}get isArea(){return"yes"===this.tags.area}get isGeometryClosed(){return this.nodes[0]===this.nodes[this.nodes.length-1]}get needTicket(){return!1}get incline(){if(["up","down"].includes(this.tags.incline))return this.tags.incline}get wheelchair(){return"wheelchair"in this.tags?this.tags.wheelchair:void 0}get surface(){return"surface"in this.tags?this.tags.surface:void 0}get smoothness(){return"smoothness"in this.tags?this.tags.smoothness:void 0}}class l extends i{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 o&&"outer"===e.role));if(!e)return null;return{type:"Polygon",coordinates:[e,...this.members.filter((e=>e.ref instanceof o&&"inner"===e.role))].map((e=>e.ref.nodes.map((e=>[e.coords.lng,e.coords.lat]))))}}}exports.OsmElement=i,exports.OsmModel=n,exports.OsmNode=a,exports.OsmParser=class{static parseOsmXmlString(e){const t=new n,s=new r.SaxesParser;let i;const a=e=>e.attributes.action&&"delete"===e.attributes.action;return s.on("opentag",(e=>{switch(e.name){case"node":{if(a(e)){i=null;break}const s=this._parseNode(e.attributes);i=s,t.nodes.push(s);break}case"way":{if(a(e)){i=null;break}const s=this._parseWay(e.attributes);i=s,t.ways.push(s);break}case"relation":{if(a(e)){i=null;break}const s=this._parseRelation(e.attributes);i=s,t.relations.push(s);break}case"tag":{if(!i)return;const{k:t,v:s}=e.attributes;i.tags[t]=s;break}case"nd":{if(!(i&&i instanceof o))return;const s=Number(e.attributes.ref),r=t.getNodeById(s);if(!r)throw Error("Node: "+s+" in way "+i.id+" not found");i.nodes.push(r),r.ways.push(i);break}case"member":{if(!(i&&i instanceof l))return;const s=Number(e.attributes.ref),r=e.attributes.type;let n=null;if("node"===r&&(n=t.getNodeById(s)),"way"===r&&(n=t.getWayById(s)),"relation"===r&&(n=t.getRelationById(s)),!n)throw Error("Member: "+s+" in relation "+i.id+" not found");i.members.push({ref:n,role:e.attributes.role}),n.relations.push(i);break}}})),s.write(e),t.nodes.forEach((e=>e.computeCoordsLevelFromTags())),t.ways.forEach((e=>e.computeLevelFromTags())),t}static _parseNode(e){return new a(Number(e.id),new s.Coordinates(Number(e.lat),Number(e.lon)))}static _parseWay(e){return new o(Number(e.id))}static _parseRelation(e){return new l(Number(e.id))}},exports.OsmRelation=l,exports.OsmWay=o;
|
|
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"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\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, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.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 ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n get isGate() {\n return this.tags.barrier === 'gate' || this.tags.aeroway === 'gate';\n }\n\n get isSubwayEntrance() {\n return this.tags.railway === 'subway_entrance';\n }\n\n get subwayEntranceRef() {\n if (!this.isSubwayEntrance) return;\n return this.tags.ref;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.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 ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps' && !this.isConveying;\n }\n\n get isConveying() {\n return Boolean(this.tags.conveying);\n }\n\n get areEscalators() {\n return this.tags.highway === 'steps' && this.isConveying;\n }\n\n get isMovingWalkway() {\n return Boolean(this.tags.highway) && this.tags.highway !== 'steps' && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isOneway() {\n const { highway, oneway, conveying } = this.tags;\n return Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n get isOnewayBackward() {\n return this.isOneway && this.tags.conveying === 'backward';\n }\n\n get isArea() {\n return this.tags.area === 'yes';\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n get needTicket() {\n // TODO\n return false;\n }\n\n get incline(): 'up' | 'down' | undefined {\n if (['up', 'down'].includes(this.tags.incline))\n return this.tags.incline as 'up' | 'down';\n }\n}\n\nexport default OsmWay;\n","import OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\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';\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] = v;\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"],"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","isElevator","highway","isConveying","isGate","barrier","aeroway","isSubwayEntrance","railway","subwayEntranceRef","ref","OsmWay","computeLevelFromTags","areStairs","Boolean","conveying","areEscalators","isMovingWalkway","isOneway","oneway","includes","isOnewayBackward","isArea","area","isGeometryClosed","length","needTicket","incline","OsmRelation","members","isMultipolygon","type","getGeoJsonPolygon","outer","member","role","coordinates","filter","map","lng","lat","parseOsmXmlString","osmXmlString","model","parser","SaxesParser","buffer","isDeleted","element","attributes","action","on","osmNode","_parseNode","push","osmWay","_parseWay","osmRelation","_parseRelation","k","v","nodeId","Number","refNode","Error","memberId","memberType","refElement","write","forEach","attr","Coordinates","lon"],"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"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\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, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.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 ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n get isGate() {\n return this.tags.barrier === 'gate' || this.tags.aeroway === 'gate';\n }\n\n get isSubwayEntrance() {\n return this.tags.railway === 'subway_entrance';\n }\n\n get subwayEntranceRef() {\n if (!this.isSubwayEntrance) return;\n return this.tags.ref;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmSmoothness, OsmSurface, OsmWheelchair } from './OsmTypes.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 ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps' && !this.isConveying;\n }\n\n get isConveying() {\n return Boolean(this.tags.conveying);\n }\n\n get areEscalators() {\n return this.tags.highway === 'steps' && this.isConveying;\n }\n\n get isMovingWalkway() {\n return Boolean(this.tags.highway) && this.tags.highway !== 'steps' && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isOneway() {\n const { highway, oneway, conveying } = this.tags;\n return Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n get isOnewayBackward() {\n return this.isOneway && this.tags.conveying === 'backward';\n }\n\n get isArea() {\n return this.tags.area === 'yes';\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n get needTicket() {\n // TODO\n return false;\n }\n\n get incline(): 'up' | 'down' | undefined {\n if (['up', 'down'].includes(this.tags.incline))\n return this.tags.incline as 'up' | 'down';\n }\n\n get wheelchair(): OsmWheelchair | undefined {\n return 'wheelchair' in this.tags ? this.tags.wheelchair as OsmWheelchair : undefined;\n }\n\n get surface(): OsmSurface | undefined {\n return 'surface' in this.tags ? this.tags.surface as OsmSurface : undefined;\n }\n\n get smoothness(): OsmSmoothness | undefined {\n return 'smoothness' in this.tags ? this.tags.smoothness as OsmSmoothness : undefined;\n }\n}\n\nexport default OsmWay;\n","import OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\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';\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] = v;\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"],"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","isElevator","highway","isConveying","isGate","barrier","aeroway","isSubwayEntrance","railway","subwayEntranceRef","ref","OsmWay","computeLevelFromTags","areStairs","Boolean","conveying","areEscalators","isMovingWalkway","isOneway","oneway","includes","isOnewayBackward","isArea","area","isGeometryClosed","length","needTicket","incline","wheelchair","surface","smoothness","OsmRelation","members","isMultipolygon","type","getGeoJsonPolygon","outer","member","role","coordinates","filter","map","lng","lat","parseOsmXmlString","osmXmlString","model","parser","SaxesParser","buffer","isDeleted","element","attributes","action","on","osmNode","_parseNode","push","osmWay","_parseWay","osmRelation","_parseRelation","k","v","nodeId","Number","refNode","Error","memberId","memberType","refElement","write","forEach","attr","Coordinates","lon"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -126,6 +126,15 @@ class OsmWay extends OsmElement {
|
|
|
126
126
|
if (["up", "down"].includes(this.tags.incline))
|
|
127
127
|
return this.tags.incline;
|
|
128
128
|
}
|
|
129
|
+
get wheelchair() {
|
|
130
|
+
return "wheelchair" in this.tags ? this.tags.wheelchair : void 0;
|
|
131
|
+
}
|
|
132
|
+
get surface() {
|
|
133
|
+
return "surface" in this.tags ? this.tags.surface : void 0;
|
|
134
|
+
}
|
|
135
|
+
get smoothness() {
|
|
136
|
+
return "smoothness" in this.tags ? this.tags.smoothness : void 0;
|
|
137
|
+
}
|
|
129
138
|
}
|
|
130
139
|
class OsmRelation extends OsmElement {
|
|
131
140
|
constructor(id, members = [], tags) {
|
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"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\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, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.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 ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n get isGate() {\n return this.tags.barrier === 'gate' || this.tags.aeroway === 'gate';\n }\n\n get isSubwayEntrance() {\n return this.tags.railway === 'subway_entrance';\n }\n\n get subwayEntranceRef() {\n if (!this.isSubwayEntrance) return;\n return this.tags.ref;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.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 ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps' && !this.isConveying;\n }\n\n get isConveying() {\n return Boolean(this.tags.conveying);\n }\n\n get areEscalators() {\n return this.tags.highway === 'steps' && this.isConveying;\n }\n\n get isMovingWalkway() {\n return Boolean(this.tags.highway) && this.tags.highway !== 'steps' && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isOneway() {\n const { highway, oneway, conveying } = this.tags;\n return Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n get isOnewayBackward() {\n return this.isOneway && this.tags.conveying === 'backward';\n }\n\n get isArea() {\n return this.tags.area === 'yes';\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n get needTicket() {\n // TODO\n return false;\n }\n\n get incline(): 'up' | 'down' | undefined {\n if (['up', 'down'].includes(this.tags.incline))\n return this.tags.incline as 'up' | 'down';\n }\n}\n\nexport default OsmWay;\n","import OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\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';\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] = v;\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"],"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"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\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, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.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 ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n get isGate() {\n return this.tags.barrier === 'gate' || this.tags.aeroway === 'gate';\n }\n\n get isSubwayEntrance() {\n return this.tags.railway === 'subway_entrance';\n }\n\n get subwayEntranceRef() {\n if (!this.isSubwayEntrance) return;\n return this.tags.ref;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmSmoothness, OsmSurface, OsmWheelchair } from './OsmTypes.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 ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps' && !this.isConveying;\n }\n\n get isConveying() {\n return Boolean(this.tags.conveying);\n }\n\n get areEscalators() {\n return this.tags.highway === 'steps' && this.isConveying;\n }\n\n get isMovingWalkway() {\n return Boolean(this.tags.highway) && this.tags.highway !== 'steps' && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isOneway() {\n const { highway, oneway, conveying } = this.tags;\n return Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n get isOnewayBackward() {\n return this.isOneway && this.tags.conveying === 'backward';\n }\n\n get isArea() {\n return this.tags.area === 'yes';\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n get needTicket() {\n // TODO\n return false;\n }\n\n get incline(): 'up' | 'down' | undefined {\n if (['up', 'down'].includes(this.tags.incline))\n return this.tags.incline as 'up' | 'down';\n }\n\n get wheelchair(): OsmWheelchair | undefined {\n return 'wheelchair' in this.tags ? this.tags.wheelchair as OsmWheelchair : undefined;\n }\n\n get surface(): OsmSurface | undefined {\n return 'surface' in this.tags ? this.tags.surface as OsmSurface : undefined;\n }\n\n get smoothness(): OsmSmoothness | undefined {\n return 'smoothness' in this.tags ? this.tags.smoothness as OsmSmoothness : undefined;\n }\n}\n\nexport default OsmWay;\n","import OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\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';\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] = v;\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"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,WAAW;AAAA,EAKb,YAAY,IAAY,MAAgB;AAHxC;AACA;AAGI,SAAK,KAAK;AACL,SAAA,OAAO,QAAQ;EACxB;AAAA,EAEA,IAAI,OAA2B;AAC3B,WAAO,KAAK,KAAK;AAAA,EACrB;AACJ;ACZA,MAAM,SAAS;AAAA,EAMX,YAAY,OAAmB,MAAiB,WAA2B;AAJ3E;AACA;AACA;AAGS,SAAA,QAAQ,SAAS;AACjB,SAAA,OAAO,QAAQ;AACf,SAAA,YAAY,aAAa;EAClC;AAAA,EAEA,YAAY,IAAY;AACpB,WAAO,KAAK,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE,KAAK;AAAA,EACtD;AAAA,EAEA,cAAc,MAAc;AACjB,WAAA,KAAK,MAAM,KAAK,CAAA,SAAQ,KAAK,KAAK,SAAS,IAAI,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAW,IAAY;AACnB,WAAO,KAAK,KAAK,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACnD;AAAA,EAEA,aAAa,MAAc;AAChB,WAAA,KAAK,KAAK,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EAC5D;AAAA,EAEA,gBAAgB,IAAY;AACxB,WAAO,KAAK,UAAU,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACxD;AAAA,EAEA,kBAAkB,MAAc;AACrB,WAAA,KAAK,UAAU,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EACjE;AACJ;ACjCA,MAAM,gBAAgB,WAAW;AAAA,EAM7B,YAAY,IAAY,QAAqB,MAAgB;AACzD,UAAM,IAAI,IAAI;AALlB;AACA,gCAAiB,CAAA;AACjB,qCAA2B,CAAA;AAIvB,SAAK,SAAS;AACd,SAAK,2BAA2B;AAAA,EACpC;AAAA,EAEA,6BAA6B;AACrB,QAAA,WAAW,KAAK,MAAM;AACtB,WAAK,OAAO,QAAQ,MAAM,WAAW,KAAK,KAAK,KAAK;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,KAAK,YAAY,UAAU,KAAK,KAAK,YAAY;AAAA,EACjE;AAAA,EAEA,IAAI,mBAAmB;AACZ,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,oBAAoB;AACpB,QAAI,CAAC,KAAK;AAAkB;AAC5B,WAAO,KAAK,KAAK;AAAA,EACrB;AAEJ;ACvCA,MAAM,eAAe,WAAW;AAAA,EAM5B,YAAY,IAAY,MAAgB,QAAiB,MAAM;AAC3D,UAAM,IAAI,IAAI;AALlB,iCAAmB,CAAA;AACnB,qCAA2B,CAAA;AAC3B,iCAAiB;AAIb,SAAK,QAAQ;AACb,SAAK,qBAAqB;AAAA,EAC9B;AAAA,EAEA,uBAAuB;AACf,QAAA,WAAW,KAAK,MAAM;AACtB,WAAK,QAAQ,MAAM,WAAW,KAAK,KAAK,KAAK;AAAA,IACjD;AAAA,EACJ;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK,YAAY,WAAW,CAAC,KAAK;AAAA,EAClD;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,QAAQ,KAAK,KAAK,SAAS;AAAA,EACtC;AAAA,EAEA,IAAI,gBAAgB;AAChB,WAAO,KAAK,KAAK,YAAY,WAAW,KAAK;AAAA,EACjD;AAAA,EAEA,IAAI,kBAAkB;AACX,WAAA,QAAQ,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,YAAY,WAAW,KAAK;AAAA,EAC/E;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,WAAW;AACX,UAAM,EAAE,SAAS,QAAQ,UAAA,IAAc,KAAK;AAC5C,WAAO,QAAS,WAAW,SAAS,WAAW,UAAU,WAAW,OAC5D,aAAa,WAAW,CAAC,WAAW,UAAU,EAAE,SAAS,SAAS,CAAE;AAAA,EAChF;AAAA,EAEA,IAAI,mBAAmB;AACnB,WAAO,KAAK,YAAY,KAAK,KAAK,cAAc;AAAA,EACpD;AAAA,EAEA,IAAI,SAAS;AACF,WAAA,KAAK,KAAK,SAAS;AAAA,EAC9B;AAAA,EAEA,IAAI,mBAAmB;AACZ,WAAA,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,EAC7D;AAAA,EAEA,IAAI,aAAa;AAEN,WAAA;AAAA,EACX;AAAA,EAEA,IAAI,UAAqC;AACrC,QAAI,CAAC,MAAM,MAAM,EAAE,SAAS,KAAK,KAAK,OAAO;AACzC,aAAO,KAAK,KAAK;AAAA,EACzB;AAAA,EAEA,IAAI,aAAwC;AACxC,WAAO,gBAAgB,KAAK,OAAO,KAAK,KAAK,aAA8B;AAAA,EAC/E;AAAA,EAEA,IAAI,UAAkC;AAClC,WAAO,aAAa,KAAK,OAAO,KAAK,KAAK,UAAwB;AAAA,EACtE;AAAA,EAEA,IAAI,aAAwC;AACxC,WAAO,gBAAgB,KAAK,OAAO,KAAK,KAAK,aAA8B;AAAA,EAC/E;AACJ;ACzEA,MAAM,oBAAoB,WAAW;AAAA,EAIjC,YACI,IACO,UAA+B,CAAA,GACtC,MACF;AACE,UAAM,IAAI,IAAI;AAPlB,qCAA2B,CAAA;AAIhB,SAAA,UAAA;AAAA,EAIX;AAAA,EAEA,iBAAiB;AACN,WAAA,KAAK,KAAK,SAAS;AAAA,EAC9B;AAAA,EAEA,oBAAoC;AAC5B,QAAA,CAAC,KAAK,eAAe;AAAU,aAAA;AAC7B,UAAA,QAAQ,KAAK,QAAQ,KAAK,CAAA,WAAU,OAAO,eAAe,UAAU,OAAO,SAAS,OAAO;AACjG,QAAI,CAAC;AAAc,aAAA;AACb,UAAA,SAAS,KAAK,QAAQ,OAAO,CAAA,WAAU,OAAO,eAAe,UAAU,OAAO,SAAS,OAAO;AAC7F,WAAA;AAAA,MACH,MAAM;AAAA,MACN,aAAa,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,CAAU,WAAA;AAC1C,cAAM,MAAM,OAAO;AACZ,eAAA,IAAI,MAAM,IAAI,CAAQ,SAAA,CAAC,KAAK,OAAO,KAAK,KAAK,OAAO,GAAG,CAAa;AAAA,MAAA,CAC9E;AAAA,IAAA;AAAA,EAET;AACJ;ACxBA,MAAM,UAAU;AAAA,EAEZ,OAAO,kBAAkB,cAAsB;AAErC,UAAA,QAAQ,IAAI;AACZ,UAAA,SAAS,IAAI;AAEf,QAAA;AAEE,UAAA,YAAY,CAAC,YACf,QAAQ,WAAW,UAAU,QAAQ,WAAW,WAAW;AAExD,WAAA,GAAG,WAAW,CAAC,SAAS;AAE3B,cAAQ,KAAK,MAAM;AAAA,QACf,KAAK,QAAQ;AACL,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,UAAU,KAAK,WAAW,KAAK,UAAwB;AACpD,mBAAA;AACH,gBAAA,MAAM,KAAK,OAAO;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACJ,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,SAAS,KAAK,UAAU,KAAK,UAAuB;AACjD,mBAAA;AACH,gBAAA,KAAK,KAAK,MAAM;AACtB;AAAA,QACJ;AAAA,QACA,KAAK,YAAY;AACT,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,cAAc,KAAK,eAAe,KAAK,UAA4B;AAChE,mBAAA;AACH,gBAAA,UAAU,KAAK,WAAW;AAChC;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACR,cAAI,CAAC,QAAQ;AACT;AAAA,UACJ;AACM,gBAAA;AAAA,YACF;AAAA,YAAG;AAAA,UAAA,IACH,KAAK;AACF,iBAAA,KAAK,CAAC,IAAI;AACjB;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,cAAI,CAAC,UAAU,EAAE,kBAAkB,SAAS;AACxC;AAAA,UACJ;AACA,gBAAM,SAAS,OAAO,KAAK,WAAW,GAAG;AACnC,gBAAA,UAAU,MAAM,YAAY,MAAM;AACxC,cAAI,CAAC,SAAS;AACV,kBAAM,MAAM,WAAW,SAAS,aAAa,OAAO,KAAK,YAAY;AAAA,UACzE;AAEO,iBAAA,MAAM,KAAK,OAAO;AACjB,kBAAA,KAAK,KAAK,MAAM;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,UAAU;AACX,cAAI,CAAC,UAAU,EAAE,kBAAkB,cAAc;AAC7C;AAAA,UACJ;AACA,gBAAM,WAAW,OAAO,KAAK,WAAW,GAAG;AACrC,gBAAA,aAAa,KAAK,WAAW;AACnC,cAAI,aAAoD;AACxD,yBAAe,WAAW,aAAa,MAAM,YAAY,QAAQ;AACjE,yBAAe,UAAU,aAAa,MAAM,WAAW,QAAQ;AAC/D,yBAAe,eAAe,aAAa,MAAM,gBAAgB,QAAQ;AAEzE,cAAI,CAAC,YAAY;AACb,kBAAM,MAAM,aAAa,WAAW,kBAAkB,OAAO,KAAK,YAAY;AAAA,UAClF;AAEO,iBAAA,QAAQ,KAAK,EAAE,KAAK,YAAY,MAAM,KAAK,WAAW,KAAA,CAAM;AACxD,qBAAA,UAAU,KAAK,MAAM;AAChC;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA,CACH;AAED,WAAO,MAAM,YAAY;AAEzB,UAAM,MAAM,QAAQ,CAAQ,SAAA,KAAK,4BAA4B;AAC7D,UAAM,KAAK,QAAQ,CAAO,QAAA,IAAI,sBAAsB;AAE7C,WAAA;AAAA,EACX;AAAA,EAGA,OAAO,WAAW,MAAkB;AAChC,WAAO,IAAI;AAAA,MACP,OAAO,KAAK,EAAE;AAAA,MACd,IAAI,YAAY,OAAO,KAAK,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC;AAAA,IAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,UAAU,MAAsB;AACnC,WAAO,IAAI,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA,EACrC;AAAA,EAEA,OAAO,eAAe,MAAsB;AACxC,WAAO,IAAI,YAAY,OAAO,KAAK,EAAE,CAAC;AAAA,EAC1C;AACJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type OsmSurface = 'asphalt' | 'compacted' | 'concrete' | 'grass' | 'gravel' | 'ground' | 'metal' | 'paving_stones' | 'wood';
|
|
2
|
+
export type OsmSmoothness = 'excellent' | 'good' | 'intermediate' | 'bad' | 'horrible';
|
|
3
|
+
export type OsmWheelchair = 'yes' | 'no' | 'designated';
|
package/dist/src/OsmWay.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Level_t } from '@wemap/geo';
|
|
|
2
2
|
import { default as OsmElement, OsmTags } from './OsmElement.js';
|
|
3
3
|
import { default as OsmNode } from './OsmNode.js';
|
|
4
4
|
import { default as OsmRelation } from './OsmRelation.js';
|
|
5
|
+
import { OsmSmoothness, OsmSurface, OsmWheelchair } from './OsmTypes.js';
|
|
5
6
|
declare class OsmWay extends OsmElement {
|
|
6
7
|
nodes: OsmNode[];
|
|
7
8
|
relations: OsmRelation[];
|
|
@@ -19,5 +20,8 @@ declare class OsmWay extends OsmElement {
|
|
|
19
20
|
get isGeometryClosed(): boolean;
|
|
20
21
|
get needTicket(): boolean;
|
|
21
22
|
get incline(): 'up' | 'down' | undefined;
|
|
23
|
+
get wheelchair(): OsmWheelchair | undefined;
|
|
24
|
+
get surface(): OsmSurface | undefined;
|
|
25
|
+
get smoothness(): OsmSmoothness | undefined;
|
|
22
26
|
}
|
|
23
27
|
export default OsmWay;
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/osm"
|
|
13
13
|
},
|
|
14
14
|
"name": "@wemap/osm",
|
|
15
|
-
"version": "12.
|
|
15
|
+
"version": "12.11.3",
|
|
16
16
|
"bugs": {
|
|
17
17
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
18
18
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"license": "ISC",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@wemap/geo": "^12.
|
|
32
|
+
"@wemap/geo": "^12.11.3",
|
|
33
33
|
"@wemap/logger": "^12.10.9",
|
|
34
34
|
"saxes": "^5.0.1"
|
|
35
35
|
},
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/geojson": "^7946.0.14"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "720dada72f8a6e15e7054d86e082ff21b294708a"
|
|
50
50
|
}
|