Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
bagage committed Jan 24, 2019
2 parents 031619c + cd25f96 commit f86b24c
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 5 deletions.
117 changes: 112 additions & 5 deletions js/router/BRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ L.BRouter = L.Class.extend({
statics: {
// NOTE: the routing API used here is not public!
// /brouter?lonlats=1.1,1.2|2.1,2.2|3.1,3.2|4.1,4.2&nogos=-1.1,-1.2,1|-2.1,-2.2,2&profile=shortest&alternativeidx=1&format=kml
URL_TEMPLATE: '/brouter?lonlats={lonlats}&nogos={nogos}&profile={profile}&alternativeidx={alternativeidx}&format={format}',
URL_TEMPLATE: '/brouter?lonlats={lonlats}&nogos={nogos}&polylines={polylines}&polygons={polygons}&profile={profile}&alternativeidx={alternativeidx}&format={format}',
URL_PROFILE_UPLOAD: BR.conf.host + '/brouter/profile',
PRECISION: 6,
NUMBER_SEPARATOR: ',',
Expand Down Expand Up @@ -41,9 +41,15 @@ L.BRouter = L.Class.extend({
if (this._getLonLatsString(latLngs) != null)
params.lonlats = this._getLonLatsString(latLngs);

if (this._getNogosString(this.options.nogos).length > 0)
if (this.options.nogos && this._getNogosString(this.options.nogos).length > 0)
params.nogos = this._getNogosString(this.options.nogos);

if (this.options.polylines && this._getNogosPolylinesString(this.options.polylines).length > 0)
params.polylines = this._getNogosPolylinesString(this.options.polylines);

if (this.options.polygons && this._getNogosPolygonsString(this.options.polygons).length > 0)
params.polygons = this._getNogosPolygonsString(this.options.polygons);

if (this.options.profile != null)
params.profile = this.options.profile;

Expand Down Expand Up @@ -75,6 +81,12 @@ L.BRouter = L.Class.extend({
if (params.nogos) {
opts.nogos = this._parseNogos(params.nogos);
}
if (params.polylines) {
opts.polylines = this._parseNogosPolylines(params.polylines);
}
if (params.polygons) {
opts.polygons = this._parseNogosPolygons(params.polygons);
}
if (params.alternativeidx) {
opts.alternative = params.alternativeidx;
}
Expand All @@ -92,6 +104,10 @@ L.BRouter = L.Class.extend({
args.push(L.Util.template('lonlats={lonlats}', urlParams));
if (urlParams.nogos != null)
args.push(L.Util.template('nogos={nogos}', urlParams));
if (urlParams.polylines != null)
args.push(L.Util.template('polylines={polylines}', urlParams));
if (urlParams.polygons != null)
args.push(L.Util.template('polygons={polygons}', urlParams));
if (urlParams.profile != null)
args.push(L.Util.template('profile={profile}', urlParams));
if (urlParams.alternativeidx != null)
Expand Down Expand Up @@ -221,6 +237,10 @@ L.BRouter = L.Class.extend({
s += this._formatLatLng(circle.getLatLng());
s += L.BRouter.NUMBER_SEPARATOR;
s += Math.round(circle.getRadius());
if (circle.options.nogoWeight) {
s += L.BRouter.NUMBER_SEPARATOR;
s += circle.options.nogoWeight;
}
if (i < (nogos.length - 1)) {
s += L.BRouter.GROUP_SEPARATOR;
}
Expand All @@ -239,13 +259,100 @@ L.BRouter = L.Class.extend({

groups = s.split(L.BRouter.GROUP_SEPARATOR);
for (var i = 0; i < groups.length; i++) {
// lng,lat,radius
// lng,lat,radius(,weight)
numbers = groups[i].split(L.BRouter.NUMBER_SEPARATOR);
// TODO refactor: pass simple obj, create circle in NogoAreas; use shapeOptions of instance
// [lat,lng],radius
nogos.push(L.circle([numbers[1], numbers[0]], {radius: numbers[2]}));
// Parse as a nogo circle
var nogoOptions = {radius: numbers[2]};
if (numbers.length > 3) {
nogoOptions.nogoWeight = numbers[3];
}
nogos.push(L.circle([numbers[1], numbers[0]], nogoOptions));
}

return nogos;
},

_getNogosPolylinesString: function(nogos) {
var s = '';
for (var i = 0, polyline, vertices; i < nogos.length; i++) {
polyline = nogos[i];
vertices = polyline.getLatLngs();
for (var j = 0; j < vertices.length; j++) {
if (j > 0) {
s += L.BRouter.NUMBER_SEPARATOR;
}
s += this._formatLatLng(vertices[j]);
}
if (i < (nogos.length - 1)) {
s += L.BRouter.GROUP_SEPARATOR;
}
}
return s;
},

_parseNogosPolylines: function(s) {
var groups,
numbers,
latlngs,
nogos = [];

groups = s.split(L.BRouter.GROUP_SEPARATOR);
for (var i = 0; i < groups.length; i++)
{
numbers = groups[i].split(L.BRouter.NUMBER_SEPARATOR);
if (numbers.length > 1)
{
latlngs = [];
for (var j = 0; j < numbers.length - 1;)
{
latlngs.push([numbers[j++], numbers[j++]]);
}
nogos.push(L.polyline(latlngs));
}
}
return nogos;
},

_getNogosPolygonsString: function(nogos) {
var s = '';
for (var i = 0, polygon, vertices; i < nogos.length; i++) {
polygon = nogos[i];
vertices = polygon.getLatLngs()[0];
for (var j = 0; j < vertices.length; j++) {
if (j > 0) {
s += L.BRouter.NUMBER_SEPARATOR;
}
s += this._formatLatLng(vertices[j]);
}
if (i < (nogos.length - 1)) {
s += L.BRouter.GROUP_SEPARATOR;
}
}
return s;
},

_parseNogosPolygons: function(s) {
var groups,
numbers,
latlngs,
nogos = [];

groups = s.split(L.BRouter.GROUP_SEPARATOR);
for (var i = 0; i < groups.length; i++)
{
numbers = groups[i].split(L.BRouter.NUMBER_SEPARATOR);
if (numbers.length > 1)
{
latlngs = [];
for (var j = 0; j < numbers.length - 1;)
{
latlngs.push([numbers[j++], numbers[j++]]);
}
nogos.push(L.polygon(latlngs));
}
}
return nogos;
},

Expand All @@ -261,4 +368,4 @@ L.BRouter = L.Class.extend({

L.bRouter = function (options) {
return new L.BRouter(options);
};
};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"description": "Web client for BRouter",
"main": "js/index.js",
"scripts": {
"build": "gulp",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
Expand Down

0 comments on commit f86b24c

Please sign in to comment.