Skip to content

Commit

Permalink
Merge pull request #2693 from finnishtransportagency/DROTH-3744_rever…
Browse files Browse the repository at this point in the history
…t_roadlinkError_DROTH-3802

Droth 3744 revert roadlink error droth 3802
  • Loading branch information
sasuolanderSito authored Oct 16, 2023
2 parents 492b3d7 + 7032c36 commit 4c0b775
Show file tree
Hide file tree
Showing 11 changed files with 248 additions and 36 deletions.
6 changes: 6 additions & 0 deletions UI/src/controller/roadCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@
linkTypes.PedestrianZone.value, linkTypes.CableFerry.value, linkTypes.Unknown.value], data.linkType);
};

var isPedestrianCyclingRoad = function () {
return !_.isUndefined(data.linkType) && _.includes([linkTypes.CycleOrPedestrianPath.value,
linkTypes.PedestrianZone.value], data.linkType);
};

var isCarPedestrianCyclingRoad = function() {
return !_.isUndefined(data.linkType) && !_.includes([linkTypes.CableFerry.value, linkTypes.Unknown.value], data.linkType);
};
Expand All @@ -61,6 +66,7 @@
setLinkProperty: setLinkProperty,
isSelected: isSelected,
isCarTrafficRoad: isCarTrafficRoad,
isPedestrianCyclingRoad: isPedestrianCyclingRoad,
isCarPedestrianCyclingRoad: isCarPedestrianCyclingRoad,
select: select,
unselect: unselect,
Expand Down
36 changes: 35 additions & 1 deletion UI/src/model/selectedMassTransitStop.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@
currentAsset.payload.lat = position.lat;
currentAsset.payload.roadLinkId = position.roadLinkId;
currentAsset.payload.linkId = position.linkId;
currentAsset.linkId = position.linkId;
currentAsset.payload.validityDirection = position.validityDirection;
assetHasBeenModified = true;
changedProps = _.union(changedProps, ['bearing', 'lon', 'lat', 'roadLinkId']);
Expand Down Expand Up @@ -194,6 +195,7 @@

var open = function(asset) {
currentAsset.id = asset.id;
currentAsset.linkId = asset.linkId;
currentAsset.propertyMetadata = asset.propertyData;
currentAsset.payload = _.merge({}, _.pick(asset, usedKeysFromFetchedAsset), transformPropertyData(asset.propertyData));
currentAsset.validityPeriod = asset.validityPeriod;
Expand Down Expand Up @@ -233,6 +235,36 @@
});
};

var isWalkingCyclingLink = function () {
var selectedRoadLink = getRoadLink();
if (_.isEmpty(selectedRoadLink)) {
return false;
} else {
return selectedRoadLink.isPedestrianCyclingRoad();
}
};

var wrongStopTypeOnWalkingCyclingLink = function () {
var selectedRoadLink = getRoadLink();
if (_.isEmpty(selectedRoadLink)) {
return false;
} else {
var isOnlyTramStop = _.some(currentAsset.payload.properties, function (property) {
if (property.publicId == massTransitStopTypePublicId) {
return _.some(property.values, function (propertyValue) {
return (propertyValue.propertyValue == 1 && property.values.length == 1);
});
}
return false;
});
if (isWalkingCyclingLink()) {
return !isOnlyTramStop;
} else {
return false;
}
}
};

var requiredPropertiesMissing = function () {
var isRequiredProperty = function (publicId) {
var isTerminal = currentAsset.stopTypes && isTerminalType(_.head(currentAsset.stopTypes)) || currentAsset.payload && isTerminalBusStop(currentAsset.payload.properties);
Expand Down Expand Up @@ -448,7 +480,7 @@

var get = function() {
if (exists()) {
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(), currentAsset.payload.lon, currentAsset.payload.lat);
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForCarPedestrianCycling(), currentAsset.payload.lon, currentAsset.payload.lat);
var linkId = nearestLine.linkId;
if (!currentAsset.linkId)
currentAsset.linkId = linkId;
Expand Down Expand Up @@ -636,6 +668,8 @@
requiredPropertiesMissing: requiredPropertiesMissing,
place: place,
hasMixedVirtualAndRealStops:hasMixedVirtualAndRealStops,
wrongStopTypeOnWalkingCyclingLink: wrongStopTypeOnWalkingCyclingLink,
isWalkingCyclingLink: isWalkingCyclingLink,
copyDataFromOtherMasTransitStop: copyDataFromOtherMasTransitStop,
getCurrentAsset: getCurrentAsset,
deleteMassTransitStop: deleteMassTransitStop,
Expand Down
3 changes: 3 additions & 0 deletions UI/src/view/navigationpanel/massTransitStopBox.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@
'<div class="check-box-container">' +
'<input id="complementaryLinkCheckBox" type="checkbox" checked/> <lable>Näytä täydentävä geometria</lable>' +
'</div>' +
'<div class="check-box-container">' +
'<input id="walkingCyclingCheckbox" type="checkbox" unchecked/> <lable>Salli raitiovaunupysäkin luonti kävelyn ja pyöräilyn väylälle</lable>' +
'</div>' +
'</div>'
].join('');
};
Expand Down
61 changes: 53 additions & 8 deletions UI/src/view/point_asset/massTransitStopForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
var poistaSelected = false;
var authorizationPolicy;
var pointAssetToSave = false;
var tramStopToSave = false;

var rootElement = $("#feature-attributes");

Expand All @@ -21,7 +22,29 @@
return _.find(selectedMassTransitStopModel.getCurrentAsset().payload.properties, {'publicId' : public_id});
}

var ValidationErrorLabel = function() {
var walkingCyclingErrorLabel = function() {
var element = $('<span class="validation-error">Vain raitiovaunupysäkki voidaan tallentaa kävelyn ja pyöräilyn väylälle</span>');
var updateVisibility = function() {
if(selectedMassTransitStopModel.wrongStopTypeOnWalkingCyclingLink()) {
element.show();
}
else {
element.hide();
}
};

updateVisibility();

eventbus.on('asset:moved assetPropertyValue:changed', function() {
updateVisibility();
}, this);

return {
element: element
};
};

var missingInfoLabel = function() {
var element = $('<span class="validation-error">Pakollisia tietoja puuttuu</span>');

var updateVisibility = function() {
Expand Down Expand Up @@ -84,6 +107,15 @@
}

var SaveButton = function(busStopTypeSelected) {
function saveWithPossibleWalkingCyclingPopUp() {
if(selectedMassTransitStopModel.isWalkingCyclingLink()){
new GenericConfirmPopup('Oletko varma, että haluat luoda pysäkin kävelyn ja pyöräilyn väylälle?', {
successCallback: function () {
saveStop();
}});
} else saveStop();
}

var deleteMessage = 'pysäkin';

if (selectedMassTransitStopModel.isTerminalType(busStopTypeSelected))
Expand All @@ -99,29 +131,34 @@
selectedMassTransitStopModel.deleteMassTransitStop(poistaSelected);
}
});
} else if(tramStopToSave) {
new GenericConfirmPopup('Oletko varma, että haluat luoda pysäkin kävelyn ja pyöräilyn väylälle?', {
successCallback: function () {
saveStop();
}});
} else if (pointAssetToSave) {
saveStop();
saveWithPossibleWalkingCyclingPopUp();
} else {
if(optionalSave()){
if(saveNewBusStopStrategy()) {
new GenericConfirmPopup('Koska tämä bussipysäkki on määritetty vihjeeksi se ei saa LIVI-tunnusta. Haluatko silti tallentaa sen OTH:ssa?', {
successCallback: function () {
selectedMassTransitStopModel.setAdditionalProperty('liviIdSave', [{ propertyValue: 'false' }]);
saveStop();
saveWithPossibleWalkingCyclingPopUp();
}});
} else {
new GenericConfirmPopup('Haluatko antaa LIVI-tunnuksen?', {
successCallback: function () {
saveStop();
saveWithPossibleWalkingCyclingPopUp();
},
closeCallback: function () {
selectedMassTransitStopModel.setAdditionalProperty('liviIdSave', [{ propertyValue: 'false' }]);
saveStop();
saveWithPossibleWalkingCyclingPopUp();
}
});
}
} else {
saveStop();
saveWithPossibleWalkingCyclingPopUp();
}
}
});
Expand All @@ -141,7 +178,9 @@
var updateStatus = function() {
if(pointAssetToSave && !isValidServicePoint()){
element.prop('disabled', true);
} else if (selectedMassTransitStopModel.isDirty() && !selectedMassTransitStopModel.requiredPropertiesMissing() && !selectedMassTransitStopModel.hasMixedVirtualAndRealStops()){
} else if (selectedMassTransitStopModel.isDirty() && !selectedMassTransitStopModel.requiredPropertiesMissing() &&
!selectedMassTransitStopModel.hasMixedVirtualAndRealStops() &&
!selectedMassTransitStopModel.wrongStopTypeOnWalkingCyclingLink()){
element.prop('disabled', false);
} else if(poistaSelected) {
element.prop('disabled', false);
Expand Down Expand Up @@ -233,7 +272,9 @@

var buttons = function (busStopTypeSelected) {
return $('<div/>').addClass('mass-transit-stop').addClass('form-controls')
.append(new ValidationErrorLabel().element)
.append(new walkingCyclingErrorLabel().element)
.append($('<br>'))
.append(new missingInfoLabel().element)
.append(new SaveButton(busStopTypeSelected).element)
.append(new CancelButton().element);
};
Expand Down Expand Up @@ -1063,6 +1104,10 @@
pointAssetToSave = true;
}

if (property.publicId === "pysakin_tyyppi" && _.some(property.values, function (value) {return value.propertyValue === 1;})) {
tramStopToSave = true;
}

});

eventbus.on('busStop:selected', function(value) {
Expand Down
35 changes: 29 additions & 6 deletions UI/src/view/point_asset/massTransitStopLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
var selectedAsset;
var movementPermissionConfirmed = false;
var requestingMovePermission = false;
var walkingCyclingLinks = false;
var massTransitStopLayerStyles = PointAssetLayerStyles(roadLayer);
var visibleAssets;
var overrideMessageAllow = true;
Expand Down Expand Up @@ -158,6 +159,14 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro

var dragControl = defineOpenLayersDragControl();

function getCorrectRoadLinks() {
if(walkingCyclingLinks) {
return roadCollection.getRoadsForCarPedestrianCycling();
} else {
return roadCollection.getRoadsForPointAssets();
}
}

function defineOpenLayersDragControl() {

var dragControl = new ol.interaction.Translate({
Expand All @@ -167,7 +176,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
dragControl.set('name', 'translate_massTransitStop');

var translateSelectedAsset = function(event) {
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(),event.coordinate[0], event.coordinate[1]);
var roadLinks = getCorrectRoadLinks();
var nearestLine = geometrycalculator.findNearestLine(roadLinks, event.coordinate[0], event.coordinate[1]);
var angle = geometrycalculator.getLineDirectionDegAngle(nearestLine);
var position = geometrycalculator.nearestPointOnLine(nearestLine, { x: event.coordinate[0], y: event.coordinate[1]});

Expand All @@ -176,7 +186,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
};

var translateEndedAsset = function(event){
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(),event.coordinate[0], event.coordinate[1]);
var roadLinks = getCorrectRoadLinks();
var nearestLine = geometrycalculator.findNearestLine(roadLinks, event.coordinate[0], event.coordinate[1]);
var angle = geometrycalculator.getLineDirectionDegAngle(nearestLine);
var position = geometrycalculator.nearestPointOnLine(nearestLine, { x: event.coordinate[0], y: event.coordinate[1]});

Expand All @@ -203,7 +214,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
var pointTool = new PointsCursorTool(eventListener, assetLayer, selectControl, roadCollection, {
style : function(feature) {
return massTransitStopLayerStyles.default.getStyle(feature, {zoomLevel: zoomlevels.isInRoadLinkZoomLevel(zoomlevels.getViewZoom(map))});
}
},
walkingCycling : false
});

roadLayer.setLayerSpecificStyleProvider('massTransitStop', function() {
Expand Down Expand Up @@ -473,7 +485,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
var createNewAsset = function(coordinate, placement, stopTypes) {

var default_asset_direction = {BothDirections: 2, TowardsDigitizing: 2, AgainstDigitizing: 3};
var nearestLine = geometrycalculator.findNearestLine(excludeRoadByAdminClass(roadCollection.getRoadsForPointAssets()), coordinate.x, coordinate.y);
var roadLinks = getCorrectRoadLinks();
var nearestLine = geometrycalculator.findNearestLine(excludeRoadByAdminClass(roadLinks), coordinate.x, coordinate.y);
var lon, lat;

if(nearestLine.end && nearestLine.start){
Expand Down Expand Up @@ -680,7 +693,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
},
closeCallback: function(){
//Moves the stop to the original position
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(), originalCoordinates.lon, originalCoordinates.lat);
var roadLinks = getCorrectRoadLinks();
var nearestLine = geometrycalculator.findNearestLine(roadLinks, originalCoordinates.lon, originalCoordinates.lat);
var angle = geometrycalculator.getLineDirectionDegAngle(nearestLine);
doMovement(event, angle, nearestLine, originalCoordinates);
roadLayer.clearSelection();
Expand Down Expand Up @@ -731,7 +745,9 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro

selectedMassTransitStopModel.move({
lon: event.coordinate[0],
lat: event.coordinate[1]
lat: event.coordinate[1],
roadLinkId: nearestLine.roadLinkId,
linkId: nearestLine.linkId
});
}
};
Expand Down Expand Up @@ -939,6 +955,8 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
});
eventListener.listenTo(eventbus, 'massTransitStop-complementaryLinks:show', showWithComplementary);
eventListener.listenTo(eventbus, 'massTransitStop-complementaryLinks:hide', hideComplementary);
eventListener.listenTo(eventbus, 'massTransitStop-walkingCyclingLinks:show', toggleWalkingCyclingLinks);
eventListener.listenTo(eventbus, 'massTransitStop-walkingCyclingLinks:hide', toggleWalkingCyclingLinks);
eventListener.listenTo(eventbus, 'road-type:selected', roadLayer.toggleRoadTypeWithSpecifiedStyle);

eventListener.listenTo(eventbus, 'application:readOnly', toggleMode);
Expand Down Expand Up @@ -984,6 +1002,11 @@ window.MassTransitStopLayer = function(map, roadCollection, mapOverlay, assetGro
me.show(map);
};

var toggleWalkingCyclingLinks = function() {
walkingCyclingLinks = !walkingCyclingLinks;
pointTool.toggleWalkingCycling();
};

var showWithComplementary = function() {
massTransitStopsCollection.activeComplementary(true);
registerRoadLinkFetched();
Expand Down
21 changes: 17 additions & 4 deletions UI/src/view/point_asset/pointsCursorTool.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,28 @@
});
};

var updateByPosition = function(mousePoint) {
var nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(), mousePoint[0], mousePoint[1]);
var projectionOnNearestLine = geometrycalculator.nearestPointOnLine(nearestLine, { x: mousePoint[0], y:mousePoint[1] });
var toggleWalkingCycling = function () {
settings.walkingCycling = !settings.walkingCycling;
};

var updateByPosition = function (mousePoint) {
var nearestLine;
if (settings.walkingCycling === true) {
nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForCarPedestrianCycling(), mousePoint[0], mousePoint[1]);
} else {
nearestLine = geometrycalculator.findNearestLine(roadCollection.getRoadsForPointAssets(), mousePoint[0], mousePoint[1]);
}
var projectionOnNearestLine = geometrycalculator.nearestPointOnLine(nearestLine, {
x: mousePoint[0],
y: mousePoint[1]
});
moveTo(projectionOnNearestLine.x, projectionOnNearestLine.y);
};

return {
activate: activate,
deactivate: deactivate
deactivate: deactivate,
toggleWalkingCycling: toggleWalkingCycling
};
};
})(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ class Digiroad2Api(val roadLinkService: RoadLinkService,
val massTransitStop = massTransitStopReturned._1.map { stop =>

Map("id" -> stop.id,
"linkId" -> stop.linkId,
"nationalId" -> stop.nationalId,
"stopTypes" -> stop.stopTypes,
"lat" -> stop.lat,
Expand Down
Loading

0 comments on commit 4c0b775

Please sign in to comment.