Giter Club home page Giter Club logo

osrm-backend's Introduction

Open Source Routing Machine

osrm-backend CI Codecov Discord

High performance routing engine written in C++ designed to run on OpenStreetMap data.

The following services are available via HTTP API, C++ library interface and NodeJs wrapper:

  • Nearest - Snaps coordinates to the street network and returns the nearest matches
  • Route - Finds the fastest route between coordinates
  • Table - Computes the duration or distances of the fastest route between all pairs of supplied coordinates
  • Match - Snaps noisy GPS traces to the road network in the most plausible way
  • Trip - Solves the Traveling Salesman Problem using a greedy heuristic
  • Tile - Generates Mapbox Vector Tiles with internal routing metadata

To quickly try OSRM use our demo server which comes with both the backend and a frontend on top.

For a quick introduction about how the road network is represented in OpenStreetMap and how to map specific road network features have a look at this guide about mapping for navigation.

Related Project-OSRM repositories:

Documentation

Full documentation

Contact

  • Discord: join
  • IRC: irc.oftc.net, channel: #osrm (Webchat)
  • Mailinglist: https://lists.openstreetmap.org/listinfo/osrm-talk

Quick Start

The easiest and quickest way to setup your own routing engine is to use Docker images we provide.

There are two pre-processing pipelines available:

  • Contraction Hierarchies (CH)
  • Multi-Level Dijkstra (MLD)

we recommend using MLD by default except for special use-cases such as very large distance matrices where CH is still a better fit for the time being. In the following we explain the MLD pipeline. If you want to use the CH pipeline instead replace osrm-partition and osrm-customize with a single osrm-contract and change the algorithm option for osrm-routed to --algorithm ch.

Using Docker

We base our Docker images (backend, frontend) on Debian and make sure they are as lightweight as possible. Older backend versions can be found on Docker Hub.

Download OpenStreetMap extracts for example from Geofabrik

wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf

Pre-process the extract with the car profile and start a routing engine HTTP server on port 5000

docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf || echo "osrm-extract failed"

The flag -v "${PWD}:/data" creates the directory /data inside the docker container and makes the current working directory "${PWD}" available there. The file /data/berlin-latest.osm.pbf inside the container is referring to "${PWD}/berlin-latest.osm.pbf" on the host.

docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-partition /data/berlin-latest.osrm || echo "osrm-partition failed"
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-customize /data/berlin-latest.osrm || echo "osrm-customize failed"

Note there is no berlin-latest.osrm file, but multiple berlin-latest.osrm.* files, i.e. berlin-latest.osrm is not file path, but "base" path referring to set of files and there is an option to omit this .osrm suffix completely(e.g. osrm-partition /data/berlin-latest).

docker run -t -i -p 5000:5000 -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-routed --algorithm mld /data/berlin-latest.osrm

Make requests against the HTTP server

curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"

Optionally start a user-friendly frontend on port 9966, and open it up in your browser

docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'

In case Docker complains about not being able to connect to the Docker daemon make sure you are in the docker group.

sudo usermod -aG docker $USER

After adding yourself to the docker group make sure to log out and back in again with your terminal.

We support the following images in the Container Registry:

Name Description
latest master compiled with release flag
latest-assertions master compiled with with release flag, assertions enabled and debug symbols
latest-debug master compiled with debug flag
<tag> specific tag compiled with release flag
<tag>-debug specific tag compiled with debug flag

Building from Source

The following targets Ubuntu 22.04. For instructions how to build on different distributions, macOS or Windows see our Wiki.

Install dependencies

sudo apt install build-essential git cmake pkg-config \
libbz2-dev libxml2-dev libzip-dev libboost-all-dev \
lua5.2 liblua5.2-dev libtbb-dev

Compile and install OSRM binaries

mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install

Request Against the Demo Server

Read the API usage policy.

Simple query with instructions and alternatives on Berlin:

curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"

Using the Node.js Bindings

The Node.js bindings provide read-only access to the routing engine. We provide API documentation and examples here.

You will need a modern libstdc++ toolchain (>= GLIBCXX_3.4.26) for binary compatibility if you want to use the pre-built binaries. For older Ubuntu systems you can upgrade your standard library for example with:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev

You can install the Node.js bindings via npm install @project-osrm/osrm or from this repository either via

npm install

which will check and use pre-built binaries if they're available for this release and your Node version, or via

npm install --build-from-source

to always force building the Node.js bindings from source.

Unscoped packages

Prior to v5.27.0, the osrm Node package was unscoped. If you are upgrading from an old package, you will need to do the following:

npm uninstall osrm --save
npm install @project-osrm/osrm --save

Package docs

For usage details have a look these API docs.

An exemplary implementation by a 3rd party with Docker and Node.js can be found here.

References in publications

When using the code in a (scientific) publication, please cite

@inproceedings{luxen-vetter-2011,
 author = {Luxen, Dennis and Vetter, Christian},
 title = {Real-time routing with OpenStreetMap data},
 booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
 series = {GIS '11},
 year = {2011},
 isbn = {978-1-4503-1031-4},
 location = {Chicago, Illinois},
 pages = {513--516},
 numpages = {4},
 url = {http://doi.acm.org/10.1145/2093973.2094062},
 doi = {10.1145/2093973.2094062},
 acmid = {2094062},
 publisher = {ACM},
 address = {New York, NY, USA},
}

osrm-backend's People

Contributors

agruss avatar akashihi avatar alex85k avatar chaupow avatar daniel-j-h avatar danpat avatar dburnsii avatar deniskoronchik avatar dennisosrm avatar duizendnegen avatar emiltin avatar freenerd avatar frodrigo avatar gardster avatar ghoshkaj avatar karenzshea avatar miccolis avatar mjjbell avatar mloskot avatar oxidase avatar pa5cal avatar siarheifedartsou avatar sivetic avatar systemed avatar themarex avatar vng avatar wangyoucao577 avatar wilhelmberg avatar xlaussel avatar zimathias avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

osrm-backend's Issues

hangs when launching with ./osrm-routed

lauching osrm-routed with a relative path like ./osrm-routed, causes the server to hang:

~/code/Project-OSRM$ cd testing
~/code/Project-OSRM/testing$ ls
amager.osm.pbf amager.osrm.nodes osrm-prepare stxxl.errlog
amager.osrm amager.osrm.ramIndex osrm-routed stxxl.log
amager.osrm.fileIndex amager.osrm.restrictions server.ini
amager.osrm.hsgr extractor.ini speedprofile.ini
amager.osrm.names osrm-extract speedprofile_bicycle.ini
~/code/Project-OSRM/testing$ ./osrm-routed
[server] starting up engines, saved at Sat Nov 26 16:19:58 2011
[server] http 1.1 compression handled by zlib version 1.2.5
[objects] loading query data structures ...^C^ZKilled: 9
~/code/Project-OSRM/testing$

osrm hangs at "loading query data structures ..." with a lot of cpu and disk write activity, almost freezing up the computer. i need to force quit osrm. this happens every time. might be due to the way osrm locates .osrm files?

left/right turns should incur a delay

number of turns is important when people choose routes on bicycle (probably same with other modes). fewer turns are better.

left and right turns are different unless it's a one-way street; in countries with right-side driving, turning right is not as bad as turning left. because you're not crossing through the oncoming traffic.

Via routes not yet adapted to edge-based graph

~/code/osm$ osrm-routed
[server] starting up engines, saved at Tue Nov 29 20:46:27 2011
[server] http 1.1 compression handled by zlib version 1.2.5
[objects] loading query data structures ...ok
[handler] registering plugin hello
[handler] registering plugin locate
[handler] registering plugin nearest
[handler] registering plugin viaroute
[server] running and waiting for requests
[info Plugins/ViaRoutePlugin.h:112] [debug] via0: 5565895,1259031
[info Plugins/ViaRoutePlugin.h:155] Node1: 788
Node2: 4294967295
startCoord: (5565874,1259030)
targetCoord: (-2147483648,-2147483648)

[info Plugins/ViaRoutePlugin.h:155] Node1: 4294967295
Node2: 4294967295
startCoord: (-2147483648,-2147483648)
targetCoord: (-2147483648,-2147483648)

Assertion failed: (lat2 != INT_MIN), function ApproximateDistance, file Descriptors/../DataStructures/ExtractorStructs.h, line 325.
Abort trap: 6

html returned despite output=json

if the params in the request has invalid values, the string
<html><head><title>Bad Request</title></head><body><h1>400 Bad Request</h1></body></html>
is returned, even though output=json is specified.

perhaps it would be better to return a json indicating the error.

opening hours in parks

perhaps this is technically difficult, but it would be good if osrm could handle opening hours.

for example, there are a number of parks in copenhagen where you're allowed to bicycle. but the parks have opening hours. so during the day, you should be routed through the park, but not when they're closed in the evening/night. for this to work, a request should include a time and a departure/arrival flag.

traffic lights should incur a delay

passing an intersections with traffic lights should incur a delay.

but - in copenhagen (and probably other places too) we have green waves for bicycles: traffic signals are adjust to the speed of bikes. if you go at a typical bike cruising speed, you'll get green lights all the way. in the morning the green waves occurs towards the city; in the afternoon it's away from the city. optimally osrm would take this into account; it's these kind of things that we would like a bike route planner for copenhagen to handle.

Total Available Memory Confusion

There seems to still be confusion between what units GetPhysicalmemory() returns. Comment in MachineInfo.cpp reads that total physical memory returned is in kilobytes, however extractor.cpp divides the value by 1024_1024_1024, which assumes the memory returned is in bytes. I believe there was a ticket in the old SVN system for this.

In addition, at least on my Ubuntu machine, sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) returns the total memory in bytes, meaning that the result should be divided by 1024 to stay consistent with Apple/FreeBSD/Windows results.

other languages

output route descriptions in other languages than english. (in our case we need danish).

Scons compile fails "typedefs.h: No such file or directory"

Despite all dependencies with correct versions apparently being installed, Scons compile fails with the following message:

DataStructures/ConcurrentQueue.h:24:22: fatal error: typedefs.h: No such file or directory compilation terminated. scons: *** [extractor.o] Error 1 scons: building terminated because of errors.

I'm compiling for the first time on Fedora 15 64bit.

A file called typedefs.h does exist within the OSRM directory.

Unfortunately messages from the old sourceforge forum seem to have been removed so I cannot follow past debugging procedure with Scons.

Thanks,

Sam.

osrm (gui?) gets stuck after trying to route outside covered area

after moving start/end marker to an area outside of the covered area, or to an area not close to any ways, the server outputs:

[info Plugins/ViaRoutePlugin.h:143] Error occurred, single path not found

after this point, it refuses to process and requests, even without the area covered. instead it just repeats the output line above.
this could very well be a bug in the gui?

bicycling 940 meters takes 90 minutes?

~$ curl "http://localhost:5000/route&55.69412&12.55245&55.68923&12.55311"

12.55246,55.69412 12.55267,55.69396 12.55267,55.69396 12.55301,55.69373 12.55311,55.69354 12.55280,55.69334 12.55247,55.69316 12.55349,55.69247 12.55400,55.69213 12.55303,55.69152 12.55397,55.69089 12.55450,55.69053 12.55501,55.69019 12.55579,55.68971 12.55504,55.68886 12.55487,55.68866 12.55450,55.68824 12.55285,55.68851 12.55297,55.68882 12.55307,55.68912 12.55311,55.68922 drive for 60m drive for 80m drive for 150m drive for 90m drive for 270m drive for 180m drive for 110m drive for 70m drive for 10m

problems compiling on mac os x 10.7.1

i'm trying to get osrm working on mac os x 10.7.1, by using a homebrew formula i created:
https://github.com/emiltin/homebrew-alt/blob/master/duplicates/gcc.rb

osrm must be compiled with gcc newer than the 4.2 that's cames with os x 10.7.1, so the brew fomula first builds gcc 4.6, when uses that for building osrm. but the resulting osrm extractor crashes when parsing a protobuf file:

~/osm$ osrm-extract cph.osm.pbf
[extractor] extracting data from input file /Users/emil/osm/cph.osm.pbf
[error] Failed to open file extractor.ini for reading.
[STXXL-MSG] STXXL v1.3.1 (release)
[STXXL-ERRMSG] Warning: no config file found.
[STXXL-ERRMSG] Using default disk configuration.
[STXXL-MSG] 1 disks are allocated, total space: 1000 MiB
osrm-extract(59807) malloc: *** error for object 0x101a4f8a0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

this type of error seems to be a known compilation issue on newer mac systems:

http://newartisans.com/2009/10/a-c-gotcha-on-snow-leopard/
https://trac.macports.org/ticket/22234

so it might be related to the way gcc 4.6 is being build.

tonight i had a chat on IRC with the creator of the gcc 4.6 brew fomula, csharpsteen:

[18:55] MistyM: csharpsteen: emiltin was wondering about the GCC formula you wrote at homebrew-alt
[18:55] emiltin: hi
[18:56] csharpsteen: What was the question?
[18:56] emiltin: i'm trying to create a formula for open source routing machine, osrm: https://gist.github.com/1257319
[18:56] emiltin: it requires a newer version of gcc, so i'm using your formula to build gcc 4.6
[18:57] emiltin: but the resulting osrm binaries suffers from bugs related to malloc
[18:57] csharpsteen: Hmm. Never tried building it with clang.
[18:57] emiltin: http://newartisans.com/2009/10/a-c-gotcha-on-snow-leopard/
[18:58] emiltin: https://trac.macports.org/ticket/22234
[18:58] csharpsteen: When I developed the formula, I built it using gcc 4.2.1 from XCode 3.2.6. The GCC test suite seemed to pass alright---as I recall the only unexpected failures were in the link-time optimization tests.
[18:58] emiltin: it seems --enable-fully-dynamic-string is required, perhaps also when building the standard libs?
[18:59] emiltin: i could get the fomula to build without using clang
[18:59] emiltin: could not
[18:59] wolfman2000 left the chat room. (Remote host closed the connection)
[19:00] csharpsteen: Which version of XCode do you have?
[19:01] abyxcos: Which formula? I built gc-4.6.0 with clang (failed with llvm-gcc)
[19:01] emiltin: i'm on 10.7.1 with xcode 4.1, gcc version 4.2.1
[19:01] abyxcos: Don't know if I pulled in -cxx though.
[19:01] emiltin: abyxcos: yes the gcc 4.6 formula, i could also only get it to work using clang
[19:02] emiltin: i included the cxx option
[19:03] emiltin: here's the build g++ version: https://gist.github.com/1259929
[19:03] csharpsteen: Mmmm... was not aware of the "fully-dynamic-string" issue---looks like it should be used if MACOS_VERSION >= 10.6
[19:03] abyxcos: Mhh, I have no g++-4.6. Want me to rebuild it?
[19:03] emiltin: and this is the bug i'm encountering in the binaries that gcc 4.6 builds: osrm-extract(76625) malloc: *
* error for object 0x1084d78a0: pointer being freed was not allocated
[19:04] abyxcos: On the off chance, have you tried building OSRM with llvm-gcc or clang?
[19:05] abyxcos: I'm actually fighting with qemu-gcc right now
[19:05] emiltin: abyxcos: well i'm trying to build a formula for building osrm
[19:05] abyxcos: It won't build with the 10.7 clang snapshot (something about pointers to registers), and llvm-gcc causes it to segfault.
[19:05] csharpsteen: Also, on XCode 4.1, you should be able to force a vanilla GCC using brew install --use-gcc. Thant might work if there are problems with using Clang to bootstrap GCC.
[19:05] emiltin: but it uses openmp, which clang doesn't support
[19:06] abyxcos: csharpsteen: Well, unless you don't have a gcc to begin with
[19:06] emiltin: csharpsteen: problem is it requires a gcc never than the system one
[19:06] AdamBucketz joined the chat room.
[19:06] emiltin: that's why i'm using your 4.6 formula
[19:06] abyxcos: emiltin: What about recompiling gcc with a clang-built gcc?
[19:07] csharpsteen: I'm still talking about building GCC 4.6.x, not OSRM.
[19:07] emiltin: oh ok
[19:07] emiltin: how is --use-gcc different than no option when building gcc 4.6
[19:07] emiltin: ?
[19:08] csharpsteen: It sets CC, etc to gcc-4.2 instead of gcc which points to LLVM-GCC on XCode 4.x
[19:08] csharpsteen: So, --use-gcc forces a build to use vanilla GCC instead of LLVM-GCC
[19:09] csharpsteen: Unless you're running the XCode 4.2 beta, which doesn't have a vanilla GCC
[19:09] onewheelskyward: I found that out the hard way.
[19:09] emiltin: ok. it's worth a try i guess. but my suspicion is that your formula somehow requires --enable-fully-dynamic-string
[19:10] emiltin: i did a quick attempt at https://github.com/emiltin/homebrew-alt/blob/master/duplicates/gcc.rb
[19:10] abyxcos: Isn't gcc-4.2 also llvm-gcc?
[19:10] emiltin: but the build failed
[19:10] csharpsteen: abyxcos: No.
[19:11] csharpsteen: emiltin: I agree---I will add the --enable-fully-dynamic-string flag to the GCC duplicates on Homebrew-alt
[19:11] emiltin: but test it, because when i tried it the 'ld' tool bugged out
[19:12] emiltin: your suggestion was to try to build gcc 4.6 with something like: brew install --use-gcc --use-clang --enable-cxx https://github.com/adamv/homebrew-alt/raw/master/duplicates/gcc.rb
[19:12] emiltin: ?
[19:12] emiltin: which would use a vanilla gcc, not llvm-gcc?
[19:13] emiltin: ups. i mean: brew install --use-gcc --enable-cxx https://github.com/adamv/homebrew-alt/raw/master/duplicates/gcc.rb
[19:14] csharpsteen: emiltin: I'm suggesting that if you still get weird behavior from GCC 4.6, an option to explore would be re-building it with vanilla GCC instead of Clang
[19:14] emiltin: right. i'm trying that right now
[19:14] csharpsteen: But the dynamic string business seems to match the malloc errors you are getting, so I think that is the most likely culprit at the moment
[19:15] emiltin: i might try with my modified version of your formula at https://github.com/emiltin/homebrew-alt/blob/master/duplicates/gcc.rb which adds the dynamic option
[19:15] emiltin: unfortunately it didn't solve it for me to just to add it to your fomula
[19:15] abyxcos: So, it helps to pick the right host architecture when using qemu...
[19:16] emiltin: will everything not be build for the native architecture if no options are passed?
[19:18] emiltin: csharpsteen: any plans to update the formula to gcc 4.6.1? not that i need it...
[19:19] csharpsteen: emiltin: Yeah, I'll do that as well since it sounds like the testsuite needs to be run
[19:19] emiltin: cool
[19:20] onewheelskyward: So, I've created a brew for http://csl.sublevel3.org/jp2a/ , but I'm wondering if it falls into the category of less maintained than the organizers prefer. It hasn't been updated since 2009, but it's a jpeg-to-ascii generator which isn't going to shift a whole lot. Should I audit the brew and submit it, or just keep it in my fork?
[19:23] emiltin: csharpsteen: here's my fomula for OSRM, that's using your fomula. https://github.com/emiltin/homebrew/blob/master/Library/Formula/osrm.rb
[19:23] emiltin: (work in progress i might add...)
[19:23] csharpsteen: onewheelskyward: Is that the one submitted here: Homebrew/legacy-homebrew#7956 ?
[19:23] emiltin: everything builds, but running the osrm-extract binary with a protobuf file as input causes there malloc bugs
[19:24] onewheelskyward: csharpsteen: Indeed. Nevermind, then!
[19:25] csharpsteen: onewheelskyward: I don't have a problem with formulae from inactive projects---unless they start growing a list of patches. Then I'm tempted to axe them.
[19:25] onewheelskyward: Roger that.
[19:25] onewheelskyward: I thought this one was a good candidate because of its low dependency count.
[19:26] csharpsteen: Yeah, looks simple to me.
[19:26] onewheelskyward: And oh-so-handy for putting pictures of coworkers in the MOTD on the dev server.
[19:26] MistyM: lol
[19:27] locojay joined the chat room.
[19:28] mavin is now known as mavin|gone.
[19:29] csharpsteen: emiltin: Note that a formula that drags something in from Homebrew-alt is unlikely to be accepted into mxcl/master
[19:30] emiltin: csharpsteen: hmm yes. it unfortunate that osrm doesn't compile with gcc 4.2
[19:30] csharpsteen: It would probably be accepted in Homebrew-alt
[19:31] emiltin: so you need to use the url when installing, right?
[19:31] csharpsteen: Yeah. For now.
[19:31] emiltin: i just succeeded in building gcc 4.6 with plain vanilla gcc 4.2, using brew install --use-gcc --enable-cxx https://github.com/adamv/homebrew-alt/raw/master/duplicates/gcc.rb
[19:32] csharpsteen: I'm working on a couple of things that should make it easier to use formulae from repositories other than mxcl master
[19:32] mdwright left the chat room.
[19:32] csharpsteen: See: Homebrew/legacy-homebrew#6086 and keep an eye on Homebrew/legacy-homebrew#7643
[19:33] wilmoore_ joined the chat room.
[19:33] wilmoore left the chat room. (Read error: Connection reset by peer)
[19:35] emiltin: looks cool!
[19:36] emiltin: i rebuild osrm with the gcc4.6 build with vanilla gcc4.2 but sadly, the errors persist: osrm-extract(42260) malloc: *** error for object 0x10097c8a0: pointer being freed was not allocated
[19:40] csharpsteen: Did that rebuild include the dynamic-string fixes?
[19:41] emiltin: no
[19:41] emiltin: i will try if i can build gcc4.6 with that option when i'm using plain gcc4.2 to build
[19:42] emiltin: does this way of adding the option look reasonable to you? https://github.com/emiltin/homebrew-alt/blob/master/duplicates/gcc.rb
[19:44] csharpsteen: I added it on line 115 as args << '--enable-fully-dynamic-string' if MACOS_VERSION >= 10.6
[19:45] emiltin: alright, basically the same thing. let me try to run it
[19:46] killtheliterate left the chat room.
[19:48] Swimming_Bird left the chat room. (Quit: Computer has gone to sleep.)
[19:50] darkwhite left the chat room. (Read error: Connection reset by peer)
[19:50] darkwhite joined the chat room.
[19:50] darkwhite left the chat room. (Changing host)
[19:50] darkwhite joined the chat room.
[19:51] wilmoore_ left the chat room. (Ping timeout: 252 seconds)
[20:03] mavin|gone is now known as mavin.
[20:03] emiltin: csharpsteen: your formula bombs out when using the dynamic option: https://gist.github.com/1260079
[20:04] AdamBucketz left the chat room.
[20:05] csharpsteen: emiltin: Hmm, it just made it to make check on my machine---most of the way through the test suite with no unexpected failures so far.
[20:06] emiltin: interesting. you're on xcode 4.1?
[20:07] csharpsteen: I'm still on Snow Leopard using XCode 3.2.6
[20:08] emiltin: ok. maybe there's some change that affect this issue
[20:09] emiltin: interestingly, the build process fails the same same errors:
[20:09] emiltin: collect2: ld terminated with signal 6 [Abort trap: 6]
[20:09] emiltin: ld(98192) malloc: *** error for object 0x10a108be0: pointer being freed was not allocated
[20:13] Swimming_Bird joined the chat room.
[20:13] jimubao joined the chat room.
[20:14] emiltin: csharpsteen: i'm guess i'm out of ideas right now. maybe if you update gcc to 4.6.1 things will be different

Possible to specify a start/endpoint's osm way id?

Hi,

Would it be possible to create a command plugin that allowed the request to specify which osm way the point is on? i.e. be able to basically describe a start/ending PhantomNode? I'm working on some ideas around gps trace matching and being able to try different interpretations of the gps point would be quite important.

Or am I totally wrongheaded about OSRM's internal representation? If not consider this a tiny feature request or request for guidance as to how I could add this functionality myself.

robert.

Compiling

I get compiling erros on Ubuntu 10.04. Anyone a solution. Thanks
/usr/include/c++/4.4/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated.
In file included from Server/ServerConfiguration.h:24,
from routed.cpp:31:
Server/../Util/BaseConfiguration.h:76: error: wrong number of template arguments (1, should be 2)
/usr/include/boost/detail/container_fwd.hpp:80: error: provided for 'template<class T, class Allocator> struct std::vector'
Server/../Util/BaseConfiguration.h: In constructor 'BaseConfiguration::BaseConfiguration(const char_)':
Server/../Util/BaseConfiguration.h:45: error: wrong number of template arguments (1, should be 2)
/usr/include/boost/detail/container_fwd.hpp:80: error: provided for 'template<class T, class Allocator> struct std::vector'
Server/../Util/BaseConfiguration.h:45: error: invalid type in declaration before ';' token
Server/../Util/BaseConfiguration.h:47: error: request for member 'size' in 'tokens', which is of non-class type 'int'
Server/../Util/BaseConfiguration.h:48: error: invalid types 'int[int]' for array subscript
Server/../Util/BaseConfiguration.h:48: error: invalid types 'int[int]' for array subscript
Server/../Util/BaseConfiguration.h: In member function 'void BaseConfiguration::Tokenize(const std::string&, int&, const std::string&)':
Server/../Util/BaseConfiguration.h:84: error: request for member 'push_back' in 'tokens', which is of non-class type 'int'
scons: *_* [routed.o] Error 1
scons: building terminated because of errors.

Buildbot setup

Setup buildbot master with Windows, FreeBSD, Mac OS X and Linux slaves.

Also, push automated build results to web page hosted at github.

segfault in BinaryHeap.h:187

version from svn:
At revision 330.
web-request failed as routed crashed.
http://localhost:5000/viaroute&start=13.7527447,100.4940766&dest=18.723165225224,99.025881836657&via=13.69174,100.69163&z=12&output=json&jsonp=showResultsRoute&geomformat=cmp&instructions=true
Program terminated with signal 11, Segmentation fault.
#0 0x000000000045959d in BinaryHeap<unsigned int, int, int, _HeapData, ArrayStorage<unsigned int, unsigned int, false> >::WasInserted (this=0x7f0a94e3d250, node=65800) at Server/../DataStructures/BinaryHeap.h:187

187 return insertedNodes[index].node == node;
(gdb) bt
#0 0x000000000045959d in BinaryHeap<unsigned int, int, int, _HeapData, ArrayStorage<unsigned int, unsigned int, false> >::WasInserted (this=0x7f0a94e3d250, node=65800) at Server/../DataStructures/BinaryHeap.h:187
#1 0x000000000044df6b in SearchEngine<ContractionCleanup::Edge::EdgeData, StaticGraphContractionCleanup::Edge::EdgeData, NodeInformationHelpDesk>::_RoutingStep (this=0x1e16c70, _forwardHeap=..., _backwardHeap=...,

forwardDirection=@0x7f0a94e3d34d, middle=0x7f0a94e3d330, _upperbound=0x7f0a94e3d33c)
at Plugins/../DataStructures/SearchEngine.h:357

#2 0x00000000004455c4 in SearchEngine<ContractionCleanup::Edge::EdgeData, StaticGraphContractionCleanup::Edge::EdgeData, NodeInformationHelpDesk>::ComputeRoute (this=0x1e16c70, phantomNodes=..., path=...)

at Plugins/../DataStructures/SearchEngine.h:186

#3 0x000000000043e063 in ViaRoutePlugin::HandleRequest (this=0x1e12250, routeParameters=..., reply=...)

at Plugins/ViaRoutePlugin.h:142

#4 0x0000000000435293 in http::RequestHandler::handle_request (this=0x1a5bdd0, req=..., rep=...)

at Server/RequestHandler.h:88

#5 0x0000000000436eea in http::Connection::handleRead (this=0x1e575d0, e=..., bytes_transferred=444)

at Server/Connection.h:72

#6 0x0000000000494ea8 in boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>::callboost::shared_ptr<http::Connection, boost::system::error_code const, unsigned long> (this=0x7f0a94e3e220, u=..., b1=...,

b2=@0x7f0a94e3e040) at /usr/include/boost/bind/mem_fn_template.hpp:271

#7 0x0000000000494ccd in boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>::operator()boost::shared_ptr<http::Connection > (this=0x7f0a94e3e220, u=..., a1=..., a2=444)

at /usr/include/boost/bind/mem_fn_template.hpp:286

#8 0x0000000000494f26 in boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()>::operator()<boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::_bi::list2<boost::system::error_code&, unsigned long&> > (this=0x7f0a94e3e230, f=..., a=...)

at /usr/include/boost/bind/bind.hpp:392

#9 0x0000000000494d9b in boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >::operator()<boost::system::error_code, unsigned long> (this=0x7f0a94e3e220, a1=..., a2=@0x7f0a94e3e250)

at /usr/include/boost/bind/bind_template.hpp:61

#10 0x0000000000494b0b in boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>::operator() (this=0x7f0a94e3e220)

at /usr/include/boost/asio/detail/bind_handler.hpp:96

#11 0x000000000049488b in boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (

function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:62

#12 0x0000000000494498 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (

function=..., context=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41

#13 0x0000000000494226 in boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::_bi::list3<boost::_bi::value<---Type to continue, or q to quit---

boost::shared_ptrhttp::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> (function=..., this_handler=0x7f0a94e3e350)
at /usr/include/boost/asio/detail/bind_handler.hpp:130
#14 0x0000000000493bbb in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (function=..., context=...)

at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41

#15 0x0000000000492ecf in boost::asio::detail::strand_service::dispatch<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (this=0x1a5eb90, impl=@0x7f0a94e3e558, handler=...) at /usr/include/boost/asio/detail/strand_service.hpp:357
#16 0x0000000000492858 in boost::asio::io_service::strand::dispatch<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (this=0x7f0a94e3e550, handler=...) at /usr/include/boost/asio/strand.hpp:158
#17 0x0000000000491cfa in boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >::operator()<boost::system::error_code, unsigned long> (this=0x7f0a94e3e550, arg1=..., arg2=@0x7f0a94e3e590)

at /usr/include/boost/asio/detail/wrapped_handler.hpp:71

#18 0x00000000004912c5 in boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>::operator() (this=0x7f0a94e3e550) at /usr/include/boost/asio/detail/bind_handler.hpp:96
#19 0x0000000000490722 in boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >::operator() (this=0x7f0a94e3e550)

at /usr/include/boost/asio/detail/wrapped_handler.hpp:143

#20 0x000000000048fedb in boost::asio::asio_handler_invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (function=...)

at /usr/include/boost/asio/handler_invoke_hook.hpp:62

#21 0x000000000048f50b in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<---Type to continue, or q to quit---

void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (function=..., context=...)
at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41
#22 0x000000000048ee32 in boost::asio::detail::asio_handler_invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (function=...,

this_handler=0x7f0a94e3e640) at /usr/include/boost/asio/detail/wrapped_handler.hpp:201

#23 0x000000000048e6e4 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (function=..., context=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41
#24 0x000000000048f67a in boost::asio::detail::strand_service::handler_wrapper<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > >::do_invoke (base=0x1a5f700, service_impl=..., impl=@0x7f0a94e3e798) at /usr/include/boost/asio/detail/strand_service.hpp:261
#25 0x00000000004335ad in boost::asio::detail::strand_service::handler_base::invoke (this=0x1a5f700, service_impl=...,

impl=@0x7f0a94e3e798) at /usr/include/boost/asio/detail/strand_service.hpp:109

#26 0x0000000000433638 in boost::asio::detail::strand_service::invoke_current_handler::operator() (this=0x7f0a94e3e790)

at /usr/include/boost/asio/detail/strand_service.hpp:144

#27 0x000000000047cbc9 in boost::asio::asio_handler_invokeboost::asio::detail::strand_service::invoke_current_handler (

function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:62

#28 0x00000000004767ab in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::strand_service::invoke_current_hand---Type to continue, or q to quit---

ler, boost::asio::detail::strand_service::invoke_current_handler> (function=..., context=...)
at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41
#29 0x000000000048d12f in boost::asio::detail::task_io_serviceboost::asio::detail::epoll_reactor::dispatchboost::asio::detail::strand_service::invoke_current_handler (this=0x1a5be50, handler=...)

at /usr/include/boost/asio/detail/task_io_service.hpp:180

#30 0x000000000048c753 in boost::asio::io_service::dispatchboost::asio::detail::strand_service::invoke_current_handler (

this=0x1a5bd98, handler=...) at /usr/include/boost/asio/impl/io_service.ipp:130

#31 0x000000000048d7ae in boost::asio::detail::strand_service::dispatch<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (

this=0x1a5eb90, impl=@0x7f0a94e3eb18, handler=...) at /usr/include/boost/asio/detail/strand_service.hpp:374

#32 0x000000000048ce52 in boost::asio::io_service::strand::dispatch<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (

this=0x7f0a94e3eb10, handler=...) at /usr/include/boost/asio/strand.hpp:158

#33 0x000000000048c409 in boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (function=...,

this_handler=0x7f0a94e3eb10) at /usr/include/boost/asio/detail/wrapped_handler.hpp:176

#34 0x000000000048bc4f in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (function=..., context=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41
#35 0x000000000048b4a1 in boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long> (function=..., this_handler=0x7f0a94e3eb10)

at /usr/include/boost/asio/detail/bind_handler.hpp:130

#36 0x000000000048a9c9 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::---Type to continue, or q to quit---

error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long> > (function=..., context=...)
at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:41
#37 0x00000000004895d5 in handler_wrapper<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long> >::do_call (base=0x7f0a8c000960)

at /usr/include/boost/asio/detail/handler_queue.hpp:192

#38 0x0000000000431f53 in boost::asio::detail::handler_queue::handler::invoke (this=0x7f0a8c000960)

at /usr/include/boost/asio/detail/handler_queue.hpp:39

#39 0x000000000044792c in boost::asio::detail::task_io_serviceboost::asio::detail::epoll_reactor::do_one (

this=0x1a5be50, lock=..., this_idle_thread=0x7f0a94e3ecb0, ec=...)
at /usr/include/boost/asio/detail/task_io_service.hpp:268

#40 0x0000000000440012 in boost::asio::detail::task_io_serviceboost::asio::detail::epoll_reactor::run (

this=0x1a5be50, ec=...) at /usr/include/boost/asio/detail/task_io_service.hpp:103

#41 0x0000000000432641 in boost::asio::io_service::run (this=0x1a5bd98) at /usr/include/boost/asio/impl/io_service.ipp:68
#42 0x0000000000499dbd in boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator() (this=0x1e12820,

p=0x1a5bd98) at /usr/include/boost/bind/mem_fn_template.hpp:49

#43 0x0000000000499c69 in boost::_bi::list1boost::_bi::value<boost::asio::io_service* >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0> (this=0x1e12830, f=..., a=...)

at /usr/include/boost/bind/bind.hpp:243

#44 0x00000000004991da in boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1boost::_bi::value<boost::asio::io_service* > >::operator() (this=0x1e12820)

at /usr/include/boost/bind/bind_template.hpp:20

#45 0x00000000004957ce in boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1boost::_bi::value<boost::asio::io_service* > > >::run (this=0x1e126f0)

at /usr/include/boost/thread/detail/thread.hpp:56

#46 0x00007f0a99f7016e in thread_proxy () from /usr/lib/libboost_thread.so.1.42.0
#47 0x00007f0a98e32d8c in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#48 0x00007f0a98b7e04d in clone () from /lib/x86_64-linux-gnu/libc.so.6
#49 0x0000000000000000 in ?? ()

createHierarchy segfault

$ ./createHierarchy great_britain.osrm preprocessing data from input file great_britain.osrm using STL serial mode Importing n = 8291624 nodes ... and 8732334 edges ...ok initializing contractor ...Edge Weight too large -> May lead to invalid CH Edge Weight too large -> May lead to invalid CH Edge Weight too large -> May lead to invalid CH Edge Weight too large -> May lead to invalid CH Edge Weight too large -> May lead to invalid CH ok removed 15822 edges of 17464658 Contractor is using 2 threads initializing elimination PQ ...ok preprocessing .... 10% . 20% . 30% . 40% . 50% . 60% . 70% . 80% . 90% . 100% [contractor] checking sanity of generated data ...ok [contractor] max level: 95 sorting level info writing level info Scanning for useless shortcuts Removing edges Removed 1894 useless shortcuts Serializing edges . 10% . 20% . 30% . 40% . 50% . 60% . 70% . 80% . 90% . 100% writing node map ...ok [STXXL-MSG] STXXL v1.2.1 (release) [STXXL-ERRMSG] Warning: no config file found. [STXXL-ERRMSG] Using default disk configuration. [STXXL-MSG] 1 disks are allocated, total space: 1000 MB building grid .... 10% . 20% . 30% . 40% . 50% . 60% . 70% . 80% . 90% . 100% sorting grid data consisting of 9423259 edges...ok in 16.9068s writing data .... 10% . 20% . 30% . 40% . 50% . 60% . 70% . 80% . 90% . 100% finished Segmentation fault (core dumped)

Where is the core dump data saved to for inspection?

roundabout

a roundabout is not named/referenced after the road it interrupt/connect (at least in France)
we end up with routing like this
...
39. Continue on N 149 for 24 km
40. Continue on for 190 m
41. Continue on N 149 for 170 km
...
may be we can omit the item #40 if the previous and next item have the same name/ref AND the current item is a roundabout
and then merge the 3 items

segfault in KML output

The server segfaults on this:
#0 KMLDescriptor<SearchEngine?<ContractionCleanup::Edge::EdgeData?, StaticGraph?ContractionCleanup::Edge::EdgeData?, NodeInformationHelpDesk?> >::Run (this=0x2aaab82002b0, reply=..., rawRoute=...,

phantomNodes=..., sEngine=..., distance=1) at Plugins/KMLDescriptor.h:81
#1 0x000000000045f311 in RoutePlugin::HandleRequest? (this=0x6878b0, routeParameters=..., reply=...) at Plugins/RoutePlugin.h:148
#2 0x000000000045cee1 in http::RequestHandler::handle_request (this=, req=..., rep=...) at Server/RequestHandler.h:89
#3 0x000000000045e0d7 in http::Connection::handleRead (this=0x70f40f0, e=, bytes_transferred=) at Server/Connection.h:72
#4 0x00000000004504ca in callboost::shared_ptr<http::Connection, boost::system::error_code const, unsigned long> (function=, context=)

at /usr/include/boost141/boost/bind/mem_fn_template.hpp:265
#5 operator()boost::shared_ptr<http::Connection > (function=, context=) at /usr/include/boost141/boost/bind/mem_fn_template.hpp:279
#6 operator()<boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::_bi::list2<boost::system::error_code&, unsigned long&> > (function=,

context=) at /usr/include/boost141/boost/bind/bind.hpp:385
#7 operator()<boost::system::error_code, unsigned long> (function=, context=) at /usr/include/boost141/boost/bind/bind_template.hpp:61
#8 operator() (function=, context=) at /usr/include/boost141/boost/asio/detail/bind_handler.hpp:96
#9 asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (function=, context=)

at /usr/include/boost141/boost/asio/handler_invoke_hook.hpp:62
#10 invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (function=, context=)

at /usr/include/boost141/boost/asio/detail/handler_invoke_helpers.hpp:39
#11 asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> (

function=, context=) at /usr/include/boost141/boost/asio/detail/bind_handler.hpp:130
#12 invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long>, boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (

function=, context=) at /usr/include/boost141/boost/asio/detail/handler_invoke_helpers.hpp:39
#13 dispatch<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (function=, context=)

at /usr/include/boost141/boost/asio/detail/strand_service.hpp:421
#14 dispatch<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> >, boost::system::error_code, unsigned long> > (function=, context=)

at /usr/include/boost141/boost/asio/strand.hpp:118
#15 operator()<boost::system::error_code, unsigned long> (function=, context=) at /usr/include/boost141/boost/asio/detail/wrapped_handler.hpp:71
#16 operator() (function=, context=) at /usr/include/boost141/boost/asio/detail/bind_handler.hpp:96
#17 operator() (function=, context=) at /usr/include/boost141/boost/asio/detail/wrapped_handler.hpp:143
#18 asio_handler_invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > > (function=, context=) at /usr/include/boost141/boost/asio/handler_invoke_hook.hpp:62
#19 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::rewrapped_handler<boost::asio::detail::binder2<boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > >, boost::_bi::bind_t<void, boost::_mfi::mf2<void, http::Connection, boost::system::error_code const&, unsigned long>, boost::bi::list3boost::bi::value<boost::shared_ptr<http::Connection >, boost::arg<1> ()(), boost::arg<2> ()()> > > (function=, context=)

at /usr/include/boost141/boost/asio/detail/handler_invoke_helpers.hpp:39
I.e this line:
lastNodeID = (lastNodeID == rawRoute.segmentEndCoordinates[segmentIdx].startPhantom.startNode
This is the bt full output for the first two entries:
#0 KMLDescriptor<SearchEngine?<ContractionCleanup::Edge::EdgeData?, StaticGraph?ContractionCleanup::Edge::EdgeData?, NodeInformationHelpDesk?> >::Run (this=0x2aaab82002b0, reply=..., rawRoute=...,

phantomNodes=..., sEngine=..., distance=1) at Plugins/KMLDescriptor.h:81
tmpDistance = 2.3177964249919518e-310
path = @0x2aaab8200270
segmentIdx =
lastNodeID = 37942867
s =
travelTime =
#1 0x000000000045f311 in RoutePlugin::HandleRequest? (this=0x6878b0, routeParameters=..., reply=...) at Plugins/RoutePlugin.h:148

phantomNodes = {startPhantom = {startNode = 37942867, targetNode = 46942484, ratio = 0.51219512194653316, location = {lat = 5259999, lon = 173325}}, targetPhantom = {startNode = 37942867,
targetNode = 37942007, ratio = 0.9694173583904041, location = {lat = 5259972, lon = 173479}}}
JSONParameter = {static npos = 18446744073709551615, _M_dataplus = {std::allocator = {<gnu_cxx::new_allocator> = {}, }, _M_p = 0x67f398 ""}}
descriptorConfig = {instructions = false, geometry = false, encodeGeometry = false, z = 18, pc = {}}
path = {<std::_Vector_base<_PathData, std::allocator<_PathData> >> = {_M_impl = {std::allocator<_PathData> = {<gnu_cxx::new_allocator<_PathData>> = {}, },
_M_start = 0x2aaab82003b0, _M_finish = 0x2aaab82003b4, _M_end_of_storage = 0x2aaab82003b4}}, }
rawRoute = {routeSegments = {<std::_Vector_base<std::vector<_PathData, std::allocator<_PathData> >, std::allocator<std::vector<_PathData, std::allocator<_PathData> > > >> = {
_M_impl = {<std::allocator<std::vector<_PathData, std::allocator<_PathData> > >> = {<gnu_cxx::new_allocator<std::vector<_PathData, std::allocator<_PathData> > >> = {}, }, _M_start = 0x2aaab8200270, _M_finish = 0x2aaab8200288, _M_end_of_storage = 0x2aaab8200288}}, },

segmentEndCoordinates = {<std::_Vector_base<PhantomNodes?, std::allocator<PhantomNodes?> >> = {
_M_impl = {std::allocator<PhantomNodes?> = {<gnu_cxx::new_allocator<PhantomNodes?>> = {}, }, _M_start = 0x0, _M_finish = 0x0,

_M_end_of_storage = 0x0}}, }, rawViaNodeCoordinates = {<std::_Vector_base<_Coordinate, std::allocator<_Coordinate> >> = {
_M_impl = {std::allocator<_Coordinate> = {<gnu_cxx::new_allocator<_Coordinate>> = {}, }, _M_start = 0x0, _M_finish = 0x0,

_M_end_of_storage = 0x0}}, }}
distance = 1
desc = 0x2aaab82002b0
descriptorType = 0
lat1 =
lon1 =
tmp = {static npos = 18446744073709551615, _M_dataplus = {std::allocator = {<gnu_cxx::new_allocator> = {}, }, _M_p = 0x0}}
lat2 = 0
lon2 = 1252060736
startCoord = {lat = 5260000, lon = 173333}
targetCoord = {lat = 5259971, lon = 173479}
zoom =

Sorry but I don't have enough time this late in the day to track down the actual request that caused this.
(gdb) p rawRoute.segmentEndCoordinates
$3 = {<std::_Vector_base<PhantomNodes?, std::allocator<PhantomNodes?> >> = {_M_impl = {std::allocator<PhantomNodes?> = {<gnu_cxx::new_allocator<PhantomNodes?>> = {}, },

_M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, }
(gdb) p rawRoute.segmentEndCoordinates[segmentIdx].startPhantom.startNode
One of the arguments you tried to pass to operator[] could not be converted to what the function wants.

start/stop anywhere at ferry routes?

i guess it's a little weird that you can start/stop anywhere on a ferry route - which would be in the middle of the water. at least when your transport mode is bicycle, and not boat?

terminate called after throwing an instance of 'std::bad_alloc'

central_europe.osrm is a file which is produced by an osmosis filter --bb left=5 right=17 top=55 bottom=45 from a very recent planet file (i.e. Nov 28):

./osrm-prepare ../../data/central_europe.osrm ../../data/central_europe.osrm.restrictions
[info createHierarchy.cpp:77] Using restrictions from file: ../../data/central_europe.osrm.restrictions
[info createHierarchy.cpp:87] Loaded 0 restrictions from file
preprocessing data from input file ../../data/central_europe.osrm using STL serial mode
Importing n = 30412732 nodes ... and 32189780 edges ...ok
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted

"Segmentation fault: 11" when running osrm-prepare

i'm using a small test file extracted from with osmosis:

~/code/osm$ osmosis --read-pbf file=denmark.osm.pbf --bounding-box top=55.6667 left=12.56713 bottom=55.65435 right=12.59742 --write-pbf file=bryggen.osm.pbf omitmetadata=true
Nov 29, 2011 8:22:17 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.39
Nov 29, 2011 8:22:17 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
Nov 29, 2011 8:22:17 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
Nov 29, 2011 8:22:17 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
Nov 29, 2011 8:22:27 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline complete.
Nov 29, 2011 8:22:27 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Total execution time: 9977 milliseconds.

but osrm-extract works, but osrm-prepare segfaults:

~/code/osm$ osrm-extract bryggen.osm.pbf
[extractor] extracting data from input file bryggen.osm.pbf
[info extractor.cpp:107] Loading speed profiles
[info extractor.cpp:109] Found the following speed profiles:
[0]bike
[1]car
[info extractor.cpp:117] Using profile "bike"
[debug extractor.cpp:121] inserting footway=16
[debug extractor.cpp:121] inserting footpath=16
[debug extractor.cpp:121] inserting trunk=16
[debug extractor.cpp:121] inserting trunk_link=16
[debug extractor.cpp:121] inserting primary=16
[debug extractor.cpp:121] inserting primary_link=16
[debug extractor.cpp:121] inserting secondary=16
[debug extractor.cpp:121] inserting secondary_link=16
[debug extractor.cpp:121] inserting tertiary=16
[debug extractor.cpp:121] inserting unclassified=16
[debug extractor.cpp:121] inserting residential=16
[debug extractor.cpp:121] inserting living_street=16
[debug extractor.cpp:121] inserting service=16
[debug extractor.cpp:121] inserting track=16
[debug extractor.cpp:121] inserting cycleway=16
[debug extractor.cpp:121] inserting path=16
[debug extractor.cpp:121] inserting ferry=5
[debug extractor.cpp:121] inserting pier=5
[debug extractor.cpp:121] inserting obeyPollards=0
[debug extractor.cpp:121] inserting useRestrictions=0
[debug extractor.cpp:121] inserting accessTag=bicycle
[extractor] using 2 GB of RAM for buffers
[STXXL-MSG] STXXL v1.3.1 (release)
[STXXL-ERRMSG] Warning: no config file found.
[STXXL-ERRMSG] Using default disk configuration.
[STXXL-MSG] 1 disks are allocated, total space: 1000 MiB
Parse Data Thread Finished
[info] blocks: 1
[info] groups: 3
[extractor] parsing finished after 0.079576 seconds
[extractor] Sorting used nodes ... ok, after 0.07075s
[extractor] Erasing duplicate nodes ... ok, after 0.00101399s
[extractor] Sorting all nodes ... ok, after 0.077153s
[extractor] Sorting used ways ... ok, after 0.0700879s
[extractor] Sorting restrctns. by from... ok, after 0.0701451s
[extractor] Fixing restriction starts ... ok, after 0.070153s
[extractor] Sorting restrctns. by to ... ok, after 1.19209e-05s
[extractor] Fixing restriction ends ... ok, after 2.14577e-06s
[extractor] Confirming used nodes ... ok, after 0.00279403s
[extractor] setting number of nodes ... ok
[extractor] Sorting edges by start ... ok, after 0.0784719s
[extractor] Setting start coords ... ok, after 0.00303388s
[extractor] Sorting edges by target ... ok, after 0.0637341s
[extractor] Setting target coords ... ok, after 0.00564885s
[extractor] setting number of edges ... ok
[extractor] writing street name index ... ok, after 0.000108004s
[extractor] finished.
~/code/osm$ osrm-prepare bryggen.osrm bryggen.osrm.restrictions
[info createHierarchy.cpp:66] Using restrictions from file: bryggen.osrm.restrictions
[info createHierarchy.cpp:76] Loaded 0 restrictions from file
[error] Failed to open file contractor.ini for reading.
preprocessing data from input file bryggen.osrm using STL serial mode
Importing n = 756 nodes ... and 911 edges ...[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
[warning] unresolved source NodeID: 754
ok
[info Contractor/EdgeBasedGraphFactory.cpp:78] Converted 873 node-based edges into 1675 edge-based nodes.
[info Contractor/EdgeBasedGraphFactory.cpp:96] Generating Edge based representation of input data
Segmentation fault: 11

route 'flickering'

as you move either the start or stop marker, the route keeps flickering between two different routes; one that is generally clockwise around the obstacles between start and stop, and one counterclockwise. one of these way can be significally longer than the other.

route description for paths without names

the route description needs to be different for ways no names. as it is now, odd descriptions result:

  1. Head on Njalsgade for 80 m
  2. Turn right on for 89 m <--------------- odd grammar
  3. You have reached your destination

i'm also noticing that turns from a way without a name, to another way without a name seems to be excluded altogether from the route description. for example this route description is output for route that in fact includes 3 turn (at path intersections):

  1. Head on for 352 m
  2. You have reached your destination

an idea could be to use the type of path in place of the name, for example: "turn right on cycleway", "turn left on footway", "continue on residential road", etc.

bicycle=yes/no should override highway and access tags

to have osrm even consider ways with highway=footway i need to add it to the speedprofile.

but now it seems osrm allows routing on all ways with highway=footway, even though there's no bicycle=yes tag.

bicycle=yes or bicycle=no should take precedence over the highway type, and also the acces=.. tag.

demo site routing length mismatch

Re: http://map.project-osrm.org/4c
The above route reports:
"Distance: 0.98 km - Duration: 4 min(s)"
With directions:
"1. Head southwest on Norvic Drive for 10 m
2. Turn sharp left on C801 for 330 m
3. Bear right on C821 for 640 m
4. Turn right on C183 for 1 km
5. You have reached your destination"
Summing the directions distances gives 1.98 km, yet the route distance is reported as 0.98 km.
Reverse the start and end points and the route distance is reported as ~1.68 km.

strange routing result

Re: http://map.project-osrm.org/2n
OSRM takes an odd detour leaving a 30 mph trunk road via a 30 mph residential road to return to the same trunk road, including two additional 90-degree junctions and a small amount of extra distance. The underlying OSM data appears correct. I suspect that the trunk and residential road sharing the same name might be a potential cause during the routing network creation.

OpenMP support

Visual C++ compiler only supports OpenMP 2.0, which stipulates that the for directive must use an int variable. ContractionCleanup.h (line 174) uses an unsigned, which fails to compile on Visual C++. To stay compatible with Visual C++, the loop variable will need to be changed to an int. Code:

#pragma omp parallel for
        for ( int i = 0; i < _graph.size(); i++ ) {
...

Memory Leaks

I've been struggling to find a memory leak in extractor that causes the process to eat up excessive amounts of memory on Windows and eventually crash. I've only run into the problem when processing a large file (I'm trying a North America extract, which is just shy of 5GB). I've spent a few hours trying to track the leak down with little success. The leak isn't specific to Windows, as I can see data lost when running extractor through valgrind (I've attached the output). I have not managed to parse the entire 5GB file when running through valgrind (last attempt was over 24 hours and running, had to kill the process), so I've used a smaller PBF file, which is only 3MB.

Note: valgrind run was done with the unmodified version (before my Windows commit) of OSRM to eliminate any issues that may have been introduced with my Windows changes. Both extractor runs were done on the same pbf file (3MB).

Relevant output from valgrind:

==25520==
==25520== HEAP SUMMARY:
==25520==     in use at exit: 174,255 bytes in 4,015 blocks
==25520==   total heap usage: 1,750,355 allocs, 1,746,340 frees, 667,610,759 bytes allocated
==25520==
==25520== Thread 1:
==25520== 60 bytes in 1 blocks are still reachable in loss record 1 of 6
==25520==    at 0x4026864: malloc (vg_replace_malloc.c:236)
==25520==    by 0x4419B41: ??? (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x441FA82: ??? (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x441AB3C: omp_set_num_threads (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x8079BED: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== 140 bytes in 1 blocks are indirectly lost in loss record 2 of 6
==25520==    at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==25520==    by 0x43929F7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x4394C33: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x43953C4: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x8065CAB: GetRandomString() (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8079811: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== 192 bytes in 1 blocks are still reachable in loss record 3 of 6
==25520==    at 0x4026864: malloc (vg_replace_malloc.c:236)
==25520==    by 0x4419B41: ??? (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x441F7DE: ??? (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x441E21D: GOMP_parallel_start (in /usr/lib/i386-linux-gnu/libgomp.so.1.0.0)
==25520==    by 0x80B2E07: PBFParser::Parse() (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8079C80: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== 65,536 bytes in 1 blocks are indirectly lost in loss record 4 of 6
==25520==    at 0x4026864: malloc (vg_replace_malloc.c:236)
==25520==    by 0x808E6F3: google::dense_hashtable<std::pair<std::string const, unsigned int>, std::string, std::tr1::hash<std::string>, google::dense_hash_map<std::string, unsigned int, std::tr1::hash<std::string>, std::equal_to<std::string>, std::allocator<unsigned int> >::SelectKey, google::dense_hash_map<std::string, unsigned int, std::tr1::hash<std::string>, std::equal_to<std::string>, std::allocator<unsigned int> >::SetKey, std::equal_to<std::string>, std::allocator<unsigned int> >::copy_from(google::dense_hashtable<std::pair<std::string const, unsigned int>, std::string, std::tr1::hash<std::string>, google::dense_hash_map<std::string, unsigned int, std::tr1::hash<std::string>, std::equal_to<std::string>, std::allocator<unsigned int> >::SelectKey, google::dense_hash_map<std::string, unsigned int, std::tr1::hash<std::string>, std::equal_to<std::string>, std::allocator<unsigned int> >::SetKey, std::equal_to<std::string>, std::allocator<unsigned int> > const&, unsigned int) (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x80A51F2: ExtractorCallbacks::wayFunction(_Way&) (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8077CC9: wayFunction(_Way) (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8098270: PBFParser::parseWay(PBFParser::_ThreadData*) (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x807842B: _ZN9PBFParser5ParseEv.omp_fn.0 (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x80B2E0F: PBFParser::Parse() (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8079C80: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== 108,267 bytes in 4,010 blocks are indirectly lost in loss record 5 of 6
==25520==    at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==25520==    by 0x43929F7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x4393C77: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x439459E: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==25520==    by 0x8097F46: PBFParser::parseWay(PBFParser::_ThreadData*) (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x807842B: _ZN9PBFParser5ParseEv.omp_fn.0 (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x80B2E0F: PBFParser::Parse() (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==    by 0x8079C80: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== 174,003 (60 direct, 173,943 indirect) bytes in 1 blocks are definitely lost in loss record 6 of 6
==25520==    at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==25520==    by 0x8079410: main (in /home/mioadmin/osrm_svn/osrm/extractor)
==25520==
==25520== LEAK SUMMARY:
==25520==    definitely lost: 60 bytes in 1 blocks
==25520==    indirectly lost: 173,943 bytes in 4,012 blocks
==25520==      possibly lost: 0 bytes in 0 blocks
==25520==    still reachable: 252 bytes in 2 blocks
==25520==         suppressed: 0 bytes in 0 blocks

Three different stack traces for leaked memory allocations from Visual Studio:

msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=448, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166e4b0)  Line 387   C++
    msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=448, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166e4b0)  Line 239 + 0x19 bytes C++
    msvcr90d.dll!_nh_malloc_dbg(unsigned int nSize=448, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 296 + 0x1d bytes  C++
    msvcr90d.dll!malloc(unsigned int nSize=448)  Line 56 + 0x15 bytes   C++
    msvcr90d.dll!operator new(unsigned int size=448)  Line 59 + 0x9 bytes   C++
    extractor.exe!std::_Allocate<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >(unsigned int _Count=14, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * __formal=0x00000000)  Line 43 + 0xc bytes    C++
    extractor.exe!std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::allocate(unsigned int _Count=14)  Line 145 + 0xb bytes C++
    extractor.exe!std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Insert<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *>(std::_Vector_const_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > _Where={_Bx={...} _Mysize=??? _Myres=??? }, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _First="motorway", std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _Last="X ™�˜i™�", std::forward_iterator_tag __formal={...})  Line 950 + 0xf bytes    C++
    extractor.exe!std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::insert<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *>(std::_Vector_const_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > _Where={_Bx={...} _Mysize=??? _Myres=??? }, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _First="motorway", std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _Last="X ™�˜i™�")  Line 890   C++
    extractor.exe!main(int argc=2, char * * argv=0x01992350)  Line 121 + 0x5a bytes C++
    extractor.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes    C
    extractor.exe!mainCRTStartup()  Line 403    C
    kernel32.dll!7711339a()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  
    ntdll.dll!776c9ed2()    
    ntdll.dll!776c9ea5()    
msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=4, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166d854)  Line 387 C++
    msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=4, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166d854)  Line 239 + 0x19 bytes   C++
    msvcr90d.dll!_nh_malloc_dbg(unsigned int nSize=4, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 296 + 0x1d bytes    C++
    msvcr90d.dll!malloc(unsigned int nSize=4)  Line 56 + 0x15 bytes C++
    msvcr90d.dll!operator new(unsigned int size=4)  Line 59 + 0x9 bytes C++
    extractor.exe!std::_Allocate<char const *>(unsigned int _Count=1, const char * * __formal=0x00000000)  Line 43 + 0xc bytes  C++
    extractor.exe!std::allocator<char const *>::allocate(unsigned int _Count=1)  Line 145 + 0xb bytes   C++
    extractor.exe!std::vector<void (__cdecl*)(void),std::allocator<void (__cdecl*)(void)> >::_Insert_n(std::_Vector_const_iterator<void (__cdecl*)(void),std::allocator<void (__cdecl*)(void)> > _Where=..., unsigned int _Count=1, void (void)* const & _Val=0xffffffff)  Line 1173 + 0xf bytes    C++
    extractor.exe!std::vector<int,std::allocator<int> >::resize(unsigned int _Newsize=1, int _Val=-1)  Line 719 + 0x5f bytes    C++
    extractor.exe!stxxl::vector<_Node,4,stxxl::lru_pager<8>,2097152,stxxl::RC,unsigned __int64>::reserve(unsigned __int64 n=1)  Line 887    C++
    extractor.exe!stxxl::vector<_Node,4,stxxl::lru_pager<8>,2097152,stxxl::RC,unsigned __int64>::_resize(unsigned __int64 n=1)  Line 924    C++
    extractor.exe!stxxl::vector<_Node,4,stxxl::lru_pager<8>,2097152,stxxl::RC,unsigned __int64>::resize(unsigned __int64 n=1)  Line 910 C++
    extractor.exe!stxxl::vector<_Node,4,stxxl::lru_pager<8>,2097152,stxxl::RC,unsigned __int64>::push_back(const _Node & obj={...})  Line 989   C++
    extractor.exe!ExtractorCallbacks::nodeFunction(_Node & n={...})  Line 87    C++
    extractor.exe!nodeFunction(_Node n={...})  Line 447 C++
    extractor.exe!PBFParser::parseDenseNode(PBFParser::_ThreadData * threadData=0x0199a908)  Line 225 + 0x29 bytes  C++
    extractor.exe!PBFParser::Parse$omp$1()  Line 176    C++
    vcomp90d.dll!_vcomp::fork_helper(void (<no type>)* funclet=0x00405b90, int arg_count=1, char * argptr=0x0166e858)  Line 333 C++
    vcomp90d.dll!_vcomp::ParallelRegion::HandlerThreadFunc(void * context=0x00312808, unsigned long index=0)  Line 293 + 0x1a bytes C++
    vcomp90d.dll!InvokeThreadTeam(_THREAD_TEAM * ptm=0x726d4028, void (void *, unsigned long)* pfn=0x726c2fb0, void * pvContext=0x00312808)  Line 563   C++
    vcomp90d.dll!_vcomp_fork(int if_test=1, int arg_count=1, void (<no type>)* funclet=0x00405b90, ...)  Line 186   C++
    extractor.exe!PBFParser::Parse()  Line 142 + 0x35 bytes C++
    extractor.exe!main(int argc=2, char * * argv=0x01992350)  Line 138 + 0x15 bytes C++
    extractor.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes    C
    extractor.exe!mainCRTStartup()  Line 403    C
    kernel32.dll!7711339a()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  
    ntdll.dll!776c9ed2()    
    ntdll.dll!776c9ea5()    
msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=32, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166da94)  Line 387    C++
    msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=32, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x0166da94)  Line 239 + 0x19 bytes  C++
    msvcr90d.dll!_nh_malloc_dbg(unsigned int nSize=32, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 296 + 0x1d bytes   C++
    msvcr90d.dll!malloc(unsigned int nSize=32)  Line 56 + 0x15 bytes    C++
    msvcr90d.dll!operator new(unsigned int size=32)  Line 59 + 0x9 bytes    C++
    msvcp90d.dll!std::_Allocate<char>(unsigned int _Count=32, char * __formal=0x00000000)  Line 43 + 0x9 bytes  C++
    msvcp90d.dll!std::allocator<char>::allocate(unsigned int _Count=32)  Line 151 + 0xb bytes   C++
    msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy(unsigned int _Newsize=20, unsigned int _Oldlen=0)  Line 2103 + 0x12 bytes  C++
    msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow(unsigned int _Newsize=20, bool _Trim=false)  Line 2133 + 0x13 bytes    C++
    msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right="Wolseley Avenue West", unsigned int _Roff=0, unsigned int _Count=4294967295)  Line 1065 + 0xe bytes  C++
    msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right="Wolseley Avenue West")  Line 1052    C++
    msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator=(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _Right="Wolseley Avenue West")  Line 927  C++
>   extractor.exe!stxxl::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,4,stxxl::lru_pager<8>,2097152,stxxl::RC,unsigned __int64>::push_back(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & obj="Wolseley Avenue West")  Line 989 + 0x1e bytes   C++
    extractor.exe!ExtractorCallbacks::wayFunction(_Way & w={...})  Line 190 C++
    extractor.exe!wayFunction(_Way w={...})  Line 462   C++
    extractor.exe!PBFParser::parseWay(PBFParser::_ThreadData * threadData=0x0191a908)  Line 336 + 0x28 bytes    C++
    extractor.exe!PBFParser::Parse$omp$1()  Line 164    C++
    vcomp90d.dll!_vcomp::fork_helper(void (<no type>)* funclet=0x00405b90, int arg_count=1, char * argptr=0x0166e858)  Line 333 C++
    vcomp90d.dll!_vcomp::ParallelRegion::HandlerThreadFunc(void * context=0x001b2808, unsigned long index=0)  Line 293 + 0x1a bytes C++
    vcomp90d.dll!InvokeThreadTeam(_THREAD_TEAM * ptm=0x5afe4028, void (void *, unsigned long)* pfn=0x5afd2fb0, void * pvContext=0x001b2808)  Line 563   C++
    vcomp90d.dll!_vcomp_fork(int if_test=1, int arg_count=1, void (<no type>)* funclet=0x00405b90, ...)  Line 186   C++
    extractor.exe!PBFParser::Parse()  Line 142 + 0x35 bytes C++
    extractor.exe!main(int argc=2, char * * argv=0x01912350)  Line 138 + 0x15 bytes C++
    extractor.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes    C
    extractor.exe!mainCRTStartup()  Line 403    C
    kernel32.dll!7711339a()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]  
    ntdll.dll!776c9ed2()    
    ntdll.dll!776c9ea5()    

contractor is now slower

after the last round of updates, the contractor takes much longer to complete. in the 'preprocesssing' steps, the first part is very fast, but the last part takes a long time. the last 5% takes longer that the previous 95%. i don't think this was the case before.

include a .osm.pbf test file

it would be useful to include a small test file in .osm.pbf format, and adjust the included server.ini file to point to it. that way you can download the code, build it, run routed and test it easily.

for this to work routed needs be able to parse relative paths (from the folder you execute the command) instead of only absolute parths.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.