// ==UserScript==
// @name WME IRAN Rule Checker
// @namespace https://www.waze.com/user/editor/B4ckTrace
// @description Checks segments and places according to waze rules in Iran
// @author B4ckTrace
// @include https://www.waze.com/*/editor*
// @include https://www.waze.com/editor*
// @include https://beta.waze.com/*
// @exclude https://www.waze.com/*user/*editor/*
// @version 1.1.1
// @grant none
// ==/UserScript==
var wmeIRC_Icon = 'data:image/png;base64,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';
(function() {
// global variables
var wmeIRC_ver = "1.1.1"
function bootstrap(tries) {
tries = tries || 1;
if (W &&
W.map &&
W.model &&
W.loginManager.user
) {
init();
} else if (tries < 1000)
setTimeout(function () {bootstrap(tries++);}, 200);
}
function saveSettings() {
if (localStorage) {
var localsetting = [];
if (localStorage.wmeIRChecker_Settings)
localsetting = JSON.parse(localStorage.wmeIRChecker_Settings);
localsetting[1] = getId('_cbCheckUnPaved').checked;
localsetting[2] = getId('_cbCheckSmallSegments').checked;
localsetting[3] = getId('_cbCheckWrongSegmentNames').checked;
localsetting[4] = getId('_cbCheckWrongSegmentLocks').checked;
localsetting[5] = getId('_cbCheckWrongSpeed').checked;
localsetting[6] = getId('_cbCheckSegmentWithoutCityName').checked;
localsetting[10] = getId('_cbCheckWrongPlaces').checked;
localsetting[11] = getId('_cbCheckWrongPlaceEntryPoint').checked;
localsetting[12] = getId('_cbCheckPlaceLockOne').checked;
try {
localStorage.setItem('wmeIRChecker_Settings', JSON.stringify(localsetting));
} catch(e) {
return false;
}
}
}
function init()
{
console.log("WME Iran Rule Checker Init");
// Add new tab item
var userTabs = getId('user-info');
var navTabs = getElementsByClassName('nav-tabs', userTabs)[0];
var tabContent = getElementsByClassName('tab-content', userTabs)[0];
var addon = document.createElement('section');
addon.id = "sidepanel-wmeIRChecker";
addon.className = "tab-pane";
addon.innerHTML += '<b>نسخه ' + wmeIRC_ver + '</b>';
var section = document.createElement('p');
section.style.paddingTop = "0px";
section.id = "wmeIRChecker-box";
section.className = 'checkbox';
section.innerHTML = '<b>بررسی سگمنت ها</b><br>'
+ '<label style="color: ' + Color_unPaved + ';" title="بررسی سگمنت های خاکی"><input type="checkbox" id="_cbCheckUnPaved" /> '
+ 'بررسی سگمنت های خاکی</label><br>'
+ '<label style="color: ' + Color_SmallSegments + ';" title="سگمنت های زیر ده متر یا دارای ژئونود اضافه"><input type="checkbox" id="_cbCheckSmallSegments" /> '
+ 'بررسی سگمنت های کوتاه یا ژئونود دار</label><br>'
+ '<label style="color: ' + Color_WrongName + ';" title="بررسی نامگذاری اشتباه سگمنت"><input type="checkbox" id="_cbCheckWrongSegmentNames" /> '
+ 'بررسی نامگذاری اشتباه سگمنت</label><br>'
+ '<label style="color: ' + Color_WrongLocks + ';" title="بررسی قفل های اشتباه سگمنت"><input type="checkbox" id="_cbCheckWrongSegmentLocks" /> '
+ 'بررسی قفل های اشتباه سگمنت</label><br>'
+ '<label style="color: ' + Color_WrongSpeed + ';" title="بررسی سرعت اعمال شده روی سگمنت"><input type="checkbox" id="_cbCheckWrongSpeed" /> '
+ 'بررسی سرعت اعمال شده روی سگمنت</label><br>'
+ '<label style="color: ' + Color_NoCityNameSegment + ';" title="بررسی سگمنت های بدون نام شهر"><input type="checkbox" id="_cbCheckSegmentWithoutCityName" /> '
+ 'بررسی سگمنت های بدون نام شهر</label><br>'
+ '<br><b>بررسی مکان ها</b><br>'
+ '<label style="color: ' + Color_WrongPlace + ';" title="بررسی مکان ها"><input type="checkbox" id="_cbCheckWrongPlaces" /> '
+ 'بررسی مکان ها</label><br>'
+ '<label title="بررسی نقطه ورود"><input type="checkbox" id="_cbCheckWrongPlaceEntryPoint" /> '
+ 'بررسی نقطه ورود</label><br>'
+ '<label title="مشخص کردن مکان با لاک یک"><input type="checkbox" id="_cbCheckPlaceLockOne" /> '
+ 'مشخص کردن مکان با لاک یک</label><br>'
;
addon.appendChild(section);
newtab = document.createElement('li');
newtab.innerHTML = '<a href="#sidepanel-wmeIRChecker" data-toggle="tab"><img style="padding-bottom: 6px;width: 18px;padding-right: 1px;" id="wmeIRC_Icon" class="wmeIRC_IconClass" src="' + wmeIRC_Icon + '">IR Checker</a>';
navTabs.appendChild(newtab);
tabContent.appendChild(addon);
// Load settings
if (localStorage.wmeIRChecker_Settings) {
var localsettings = JSON.parse(localStorage.wmeIRChecker_Settings);
getId('_cbCheckUnPaved').checked = localsettings[1];
getId('_cbCheckSmallSegments').checked = localsettings[2];
getId('_cbCheckWrongSegmentNames').checked = localsettings[3];
getId('_cbCheckWrongSegmentLocks').checked = localsettings[4];
getId('_cbCheckWrongSpeed').checked = localsettings[5];
getId('_cbCheckSegmentWithoutCityName').checked = localsettings[6];
getId('_cbCheckWrongPlaces').checked = localsettings[10];
getId('_cbCheckWrongPlaceEntryPoint').checked = localsettings[11];
getId('_cbCheckPlaceLockOne').checked = localsettings[12];
}
// Checkbox handlers
getId('_cbCheckUnPaved').onclick = CheckSegments;
getId('_cbCheckSmallSegments').onclick = CheckSegments;
getId('_cbCheckWrongSegmentNames').onclick = CheckSegments;
getId('_cbCheckWrongSegmentLocks').onclick = CheckSegments;
getId('_cbCheckWrongSpeed').onclick = CheckSegments;
getId('_cbCheckSegmentWithoutCityName').onclick = CheckSegments;
getId('_cbCheckWrongPlaces').onclick = CheckPlaces;
getId('_cbCheckWrongPlaceEntryPoint').onclick = CheckPlaces;
getId('_cbCheckPlaceLockOne').onclick = CheckPlaces;
window.setInterval(CheckSegments, 200);
window.setInterval(CheckPlaces, 250);
} // End of init
var Color_unPaved = "#ababab";
var Color_SmallSegments = "#003287";
var Color_WrongName = "#910650";
var Color_WrongLocks = "#d707de";
var Color_WrongSpeed = "#cc990c";
var Color_NoCityNameSegment = "#0fd626";
var Color_WrongPlace = "#1bc4b6";
// road types
var ROAD_STREET = 1
var ROAD_PRIMARY_STREET = 2
var ROAD_FREEWAY = 3
var ROAD_RAMP = 4
var ROAD_MAJOR_HIGHWAY = 6
var ROAD_MINOR_HIGHWAY = 7
var ROAD_OFF_ROAD = 8
var ROAD_PRIVATE = 17
var ROAD_RAIL_ROAD = 18
var ROAD_PARKING_LOT = 20
var ROAD_NARROW = 22
var RoadTypePriority = {
0: 0,
1: 1,
2: 2,
3: 5,
4: 0,
5: 0,
6: 4,
7: 3,
8: .5,
10: 0,
16: 0,
17: .7,
18: 0,
19: 0,
20: .8,
21: .6
};
// Check segment main function
function CheckSegments(event) {
var showPaved = getId('_cbCheckUnPaved').checked; //true;
var showSmallSegments = getId('_cbCheckSmallSegments').checked; //true;
var ShowWrongNames = getId('_cbCheckWrongSegmentNames').checked; //true;
var ShowWrongLocks = getId('_cbCheckWrongSegmentLocks').checked; //true;
var ShowWrongSpeed = getId('_cbCheckWrongSpeed').checked; //true;
var ShowSegmentWithoutCityName = getId('_cbCheckSegmentWithoutCityName').checked; //true;
// Set the base
if (event && event.type && /click|change/.test(event.type))
{
for (var seg in W.model.segments.objects) {
var segment = W.model.segments.getObjectById(seg);
var line = getId(segment.geometry.id);
if (line === null) {
continue;
}
var opacity = line.getAttribute("stroke-opacity");
if (opacity > 0.1 && opacity < 1) {
line.setAttribute("stroke", "#ee8811");
line.setAttribute("stroke-opacity", 0);
line.setAttribute("stroke-dasharray", "none");
}
}
}
for (var seg in W.model.segments.objects) {
var segment = W.model.segments.getObjectById(seg);
if (!W.map.getExtent().intersectsBounds(segment.geometry.getBounds())){
continue;
}
var attributes = segment.attributes;
var line = getId(segment.geometry.id);
if (line === null) {
continue;
}
var sid = attributes.primaryStreetID;
var opacity = line.getAttribute("stroke-opacity");
var lineWidth = line.getAttribute("stroke-width");
if (opacity == 1 || lineWidth == 9)
continue;
var roadType = attributes.roadType;
if (W.map.zoom <= 3 && (roadType < 2 || roadType > 7) ) {
if (opacity > 0.1) {
line.setAttribute("stroke","#ee8811");
line.setAttribute("stroke-opacity",0.001);
line.setAttribute("stroke-dasharray", "none");
}
continue;
}
var street = W.model.streets.getObjectById(sid);
if (street == null)
continue;
var name = street.name;
// START CHECKING HERE...
var strErrors = '';
if (showPaved && (attributes.flags & 16)) {
if (opacity < 0.1) {
line.setAttribute("stroke",Color_unPaved);
line.setAttribute("stroke-opacity",0.60);
line.setAttribute("stroke-width", 10);
strErrors += '* سگمنت خاکی';
strErrors += '\n';
}
}
var roundabout = attributes.junctionID !== null;
var BadRA = false;
var wrong_Speed = false;
if (roundabout)
{
var Junction = W.model.junctions.objects[attributes.junctionID]
var Junction_Segments = Junction.attributes.segIDs
var total_junction_length = 0;
var Connected_Segments = [];
var Connected_Segments_types = [];
var MinCurrType = 1000;
if (Junction_Segments.length < 2)
{
wrong_Speed = true;
strErrors += '* میدان با یک سگمنت اشتباه است';
strErrors += '\n';
BadRA = true;
}
else
{
for (var index = 0; index < Junction_Segments.length; index++)
{
var Junction_Segment = W.model.segments.getObjectById(Junction_Segments[index]);
total_junction_length += Junction_Segment.attributes.length;
if (RoadTypePriority[Junction_Segment.attributes.roadType]<MinCurrType)
MinCurrType = RoadTypePriority[Junction_Segment.attributes.roadType];
var fromNodeID = Junction_Segment.attributes.fromNodeID;
var NodeSegments = W.model.nodes.objects[fromNodeID].attributes.segIDs;
for (var j = 0; j < NodeSegments.length; j++)
{
if (!Junction_Segments.includes(NodeSegments[j]))
{
var connected_segment = Waze.model.segments.get(NodeSegments[j]);
Connected_Segments.push(connected_segment);
Connected_Segments_types.push(connected_segment.attributes.roadType);
}
}
}
}
//var
}
// Short segments
var wrong_length = false;
////////////////////// CHECK EXTRA GEONODES /////////////////////////////////////
var dmax = 2.5;
var segment = W.model.segments.getObjectById(seg);
var attributes = segment.attributes;
var line = getId(segment.geometry.id);
if (segment.type == "segment" && segment.geometry.components.length > 2 && attributes.junctionID == null && segment.state != "Delete" && !attributes.hasClosures && attributes.updatedBy && segment.getVirtualNodes().length == 0) {
var ax = Math.abs(segment.geometry.components[0].x - segment.geometry.components[1].x);
var ay = Math.abs(segment.geometry.components[0].y - segment.geometry.components[1].y);
var da = Math.sqrt(ax * ax + ay * ay);
var bx = Math.abs(segment.geometry.components[segment.geometry.components.length - 2].x - segment.geometry.components[segment.geometry.components.length - 1].x);
var by = Math.abs(segment.geometry.components[segment.geometry.components.length - 2].y - segment.geometry.components[segment.geometry.components.length - 1].y);
var db = Math.sqrt(bx * bx + by * by);
var a1 = null;
var b1 = null;
if (da < dmax) {
a1 = segment.geometry.components[1].clone();
}
if (db < dmax) {
b1 = segment.geometry.components[segment.geometry.components.length - 2].clone();
}
if (a1 != null && b1 != null && a1.x == b1.x && a1.y == b1.y) {
b1 = null;
}
var geo = segment.geometry.simplify(0.8);
if (segment.geometry.components.length != geo.components.length) {
if (a1 != null) {
if (a1.x != geo.components[1].x || a1.y != geo.components[1].y) {
geo.addPoint(a1, 1);
}
}
if (b1 != null) {
if (b1.x != geo.components[geo.components.length - 2].x || b1.y != geo.components[geo.components.length - 2].y) {
geo.addPoint(b1, geo.components.length - 1);
}
}
}
var reduced = segment.geometry.components.length - geo.components.length;
if (reduced) {
wrong_length = true;
strErrors += '* ژئونود اضافه حدف گردد';
strErrors += '\n';
}
}
/////////////////////////// END OF EXTRA GEONODE CHECKING ////////////////////////////////
if (showSmallSegments) {
if (attributes.length<10){
wrong_length = true;
strErrors += '* طول سگمنت کمتر از 10';
strErrors += '\n';
}
if ((opacity < 0.1) && wrong_length) {
line.setAttribute("stroke",Color_SmallSegments);
line.setAttribute("stroke-opacity",0.60);
line.setAttribute("stroke-width", 10);
}
}
// https://wazeopedia.waze.com/wiki/Iran/%D9%82%D9%88%D8%A7%D9%86%DB%8C%D9%86_%D9%88_%D9%85%D9%82%D8%B1%D8%B1%D8%A7%D8%AA#.D9.86.D8.A7.D9.85.E2.80.8C.DA.AF.D8.B0.D8.A7.D8.B1.DB.8C_.D8.B1.D8.A7.D9.87.E2.80.8C.D9.87.D8.A7_.D9.88_.D8.A7.D8.B5.D8.B7.D9.84.D8.A7.D8.AD.D8.A7.D8.AA_.DA.A9.D9.88.D8.AA.D8.A7.D9.87_.D8.B4.D8.AF.D9.87_.28.D8.AA.D9.84.D8.AE.DB.8C.D8.B5.E2.80.8C.D9.87.D8.A7.29
var noCity = false;
var countryID = 0;
if (segment != null && segment.attributes.primaryStreetID != null){
var adress = segment.getAddress().attributes;
var city = adress.city.attributes.name;
noCity = adress.city.attributes.isEmpty;
}
var lock_num = attributes.lockRank === null ? 0 : Number(attributes.lockRank) + 1;
var hasRestrictions = attributes.restrictions !== undefined && attributes.restrictions.length > 0;
var two_way = attributes.fwdDirection === true && attributes.revDirection === true;
if (ShowSegmentWithoutCityName && noCity){
if ((opacity < 0.1)) {
line.setAttribute("stroke", Color_NoCityNameSegment);
line.setAttribute("stroke-opacity", 0.60);
line.setAttribute("stroke-width", 10);
strErrors += '* سگمنت بدون نام شهر';
strErrors += '\n';
}
}
if (ShowWrongSpeed){
if (roundabout && (!BadRA)){
var ra_diameter = total_junction_length/Math.PI;
if ( (ra_diameter < 10*2) )
{
// less than 10
wrong_Speed = true;
strErrors += '* شعاع میدان کمتر از 10 متر';
strErrors += '\n';
}
if (two_way)
{
// less than 10
wrong_Speed = true;
strErrors += '* سگمنت میدان دو طرفه رسم شده است';
strErrors += '\n';
}
}
if (attributes.fwdMaxSpeed || attributes.revMaxSpeed)
{
if (roadType == ROAD_RAMP){
if (name)
{
if ( !name.match(/local lane/i) && !name.match(/کنارگذر/) && !name.match(/کنار گذر/) )
{
wrong_Speed = true;
strErrors += '* روی رمپها سرعت ثبت نمی گردد';
strErrors += '\n';
}
}
else
{
wrong_Speed = true;
strErrors += '* روی رمپها سرعت ثبت نمی گردد';
strErrors += '\n';
}
}
if (roundabout && ((attributes.fwdMaxSpeed && attributes.fwdDirection) || (attributes.revMaxSpeed && attributes.revDirection))){ // Has speed?!
wrong_Speed = true;
strErrors += '* سگمنت میدان نباید سرعت داشته باشد';
strErrors += '\n';
}
else if ( (attributes.fwdMaxSpeed > 120) || (attributes.revMaxSpeed > 120) )
{
wrong_Speed = true;
strErrors += '* سرعت بیشتر از 120 مجاز است؟';
strErrors += '\n';
}
else if ( (attributes.fwdMaxSpeed && attributes.fwdMaxSpeed < 10) || (attributes.revMaxSpeed && attributes.revMaxSpeed < 10) )
{
wrong_Speed = true;
strErrors += '* سرعت کمتر از 10 مجاز است؟';
strErrors += '\n';
}
else if (roadType == ROAD_STREET && ( (attributes.fwdMaxSpeed > 30) || (attributes.revMaxSpeed > 30) ))
{
wrong_Speed = true;
strErrors += '* خیابان با سرعت بیشتر از سی؟';
strErrors += '\n';
}
}
if ((roadType == ROAD_OFF_ROAD) && (attributes.flags & 16) ) // We have no upaved off-road
{
wrong_Speed = true;
strErrors += '* برای آفرود تیک خاکی نیازی نیست';
strErrors += '\n';
}
if ((opacity < 0.1) && wrong_Speed) {
line.setAttribute("stroke", Color_WrongSpeed);
line.setAttribute("stroke-opacity", 0.60);
line.setAttribute("stroke-width", 10);
}
}
var wrong_name = false;
if (name && ShowWrongNames){
if (roundabout)
{
wrong_name = true;
strErrors += '* سگمنت میدان نباید نام داشته باشد';
strErrors += '\n';
}
if ( (roadType == ROAD_RAIL_ROAD) && (!noCity) )
{
wrong_name = true;
strErrors += '* نام شهر برای سگمنت راه آهن ضروری نیست ';
strErrors += '\n';
}
// check SPACE DASH SPACE
if (!name.match(/\s-\s/) && (roadType != ROAD_MAJOR_HIGHWAY) && (roadType != ROAD_MINOR_HIGHWAY) && (roadType != ROAD_FREEWAY) && (name.indexOf("/") < 0)){
wrong_name = true;
strErrors += '* در نام باید فاصله خط تیره فاصله ( - ) وجود داشته باشد';
strErrors += '\n';
//console.log('+++' + name + '\tdash')
}
if ( (name.match(/[a-z]/i) && !name.match(/^\d/) && !(/^[A-Z]/.test(name))))
{
wrong_name = true;
strErrors += '* حرف اول باید به صورت بزرگ نوشته شود';
strErrors += '\n';
}
if (name.match(/\s\s/)){
wrong_name = true;
strErrors += '* دو فاصله پشت سرهم در نام وجود دارد';
strErrors += '\n';
}
if (name.match(/سینزده/)){
wrong_name = true;
strErrors += '* سیزده اشتباه نوشته شده';
strErrors += '\n';
}
if (name.match(/فلکه/)){
wrong_name = true;
strErrors += '* نباید در نام فلکه نوشته شود';
strErrors += '\n';
}
if (name.match(/هیفده/)){
wrong_name = true;
strErrors += '* هفده اشتباه نوشته شده';
strErrors += '\n';
}
if (name.match(/شیش\s/)){
wrong_name = true;
strErrors += '* شش اشتباه نوشته شده';
strErrors += '\n';
}
if (name.match(/ي/)){
wrong_name = true;
strErrors += '* دارای ي عربی';
strErrors += '\n';
}
if (name.match(/ك/)){
wrong_name = true;
strErrors += '* دارای ك عربی';
strErrors += '\n';
}
if (name.match(/oo/)){
wrong_name = true;
strErrors += '* به جای oo از u استفاده کنید';
strErrors += '\n';
}
var match = name.match(/\d+/g);
if (match){
var numbers = match.map(Number);
if ((numbers.length > 1) && (name.indexOf("/") < 0)){
wrong_name = true;
strErrors += '* تعداد دو عدد در نام استفاده شده';
strErrors += '\n';
}
}
if (name.match(/\sجاده/) && name.match(/-/)){
if (!name.match(/\sRd\s\.\s/i)){
wrong_name = true;
strErrors += '* آیا نیازی به وجود Rd . در نام نیست؟';
strErrors += '\n';
}
}
if (name.match(/Towhid/i)){
wrong_name = true;
strErrors += '* توحید باید در انگلیسی Tohid نوشته شود';
strErrors += '\n';
}
if (name.match(/توحید/)){
var correct_alter = false;
if (!name.match(/Tohid/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Guya/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* Tohid در نام یا آلتر دیده نمیشود';
strErrors += '\n';
}
}
if (name.match(/Guya/i)){
var correct_alter = false;
if (!name.match(/گویا/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/گویا/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* گویا در نام یا آلتر دیده نمی شود';
strErrors += '\n';
}
}
if (name.match(/گویا/)){
var correct_alter = false;
if (!name.match(/Guya/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Guya/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* Guya در نام یا آلتر دیده نمیشود';
strErrors += '\n';
}
}
if (name.match(/Firuz/i)){
var correct_alter = false;
if (!name.match(/فیروز/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/فیروز/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* فیروز در نام یا آلتر دیده نمی شود';
strErrors += '\n';
}
}
if (name.match(/فیروز/)){
var correct_alter = false;
if (!name.match(/Firuz/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Firuz/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* Firuz در نام یا آلتر دیده نمیشود';
strErrors += '\n';
}
}
if (name.match(/عی/) && !name.match(/سعید/)){
var correct_alter = false;
if (!name.match(/ei/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/ei/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* برای عی حروف ei را در نام یا آلتر بنویسید';
strErrors += '\n';
}
}
if (name.match(/جام/)){
var correct_alter = false;
if (!name.match(/Jām/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Jām/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* Jām را در نام یا آلتر بنویسید';
strErrors += '\n';
}
}
// Use Blvd for بلوار
if (name.match(/\sBlvd/)){
var correct_alter = false;
if (!name.match(/بلوار/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/بلوار/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tBlvd')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت بلوار است باید در نام یا آلتر بلوار نوشته شود';
strErrors += '\n';
}
}
if (name.match(/بلوار/)){
var correct_alter = false;
if (!name.match(/\sBlvd/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sBlvd/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tبلوار')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت بلوار است باید در نام یا آلتر Blvd نوشته شود';
strErrors += '\n';
}
}
// Use Expy for بزرگراه
if (name.match(/\sExpy/)){
var correct_alter = false;
if (!name.match(/بزرگراه/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/بزرگراه/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tExpy')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت Expy است باید در نام یا آلتر بزرگراه نوشته شود';
strErrors += '\n';
}
}
// Use Hwy for بزرگراه
if (name.match(/\sHwy/)){
var correct_alter = false;
if (!name.match(/بزرگراه/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/بزرگراه/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت Hwy است باید در نام یا آلتر بزرگراه نوشته شود';
strErrors += '\n';
}
}
if (name.match(/بزرگراه/)){
var correct_alter = false;
if ( (!name.match(/\sHwy/)) && (!name.match(/\sExpy/)) ){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if ( (alter.name.match(/\sHwy/)) || (alter.name.match(/\sExpy/)) ){
correct_alter = false;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت بزرگراه است باید در نام یا آلتر Hwy یا Expy نوشته شود';
strErrors += '\n';
}
}
if (name.match(/\sFwy/)){
var correct_alter = false;
if (!name.match(/آزادراه/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/آزادراه/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tBlvd')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت Fwy است باید در نام یا آلتر آزاد راه نوشته شود';
strErrors += '\n';
}
}
if (name.match(/آزادراه/)){
var correct_alter = false;
if (!name.match(/\sFwy/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sFwy/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tبلوار')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* اگر سگمنت آزادراه است باید در نام یا آلتر Fwy نوشته شود';
strErrors += '\n';
}
}
// Use W for غربی
if (name.match(/\sW\s/)){
var correct_alter = false;
if (!name.match(/غربی/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/غربی/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر غربی نوشته شود';
strErrors += '\n';
}
}
if (name.match(/غربی/)){
var correct_alter = false;
if (!name.match(/\sW\s/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sW\s/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر W نوشته شود';
strErrors += '\n';
}
}
// Use E for شرقی
if (name.match(/\sE\s/)){
var correct_alter = false;
if (!name.match(/شرقی/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/شرقی/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر شرقی نوشته شود';
strErrors += '\n';
}
}
if (name.match(/شرقی/)){
var correct_alter = false;
if (!name.match(/\sE\s/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sE\s/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر E نوشته شود';
strErrors += '\n';
}
}
// Use S for جنوبی
if (name.match(/\sS\s/)){
var correct_alter = false;
if (!name.match(/جنوبی/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/جنوبی/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر جنوبی نوشته شود';
strErrors += '\n';
}
}
if (name.match(/جنوبی/)){
var correct_alter = false;
if (!name.match(/\sS\s/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sS\s/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر S نوشته شود';
strErrors += '\n';
}
}
// Use N for شمالی
if (name.match(/\sN\s/)){
var correct_alter = false;
if (!name.match(/شمالی/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/شمالی/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر شمالی نوشته شود';
strErrors += '\n';
}
}
if (name.match(/شمالی/)){
var correct_alter = false;
if (!name.match(/\sN\s/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sN\s/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر N نوشته شود';
strErrors += '\n';
}
}
if ( ((name.match(/غ/) || []).length==1) && (name.match(/غربی/)) ){
}
else if ( ((name.match(/غ/) || []).length>1) ){
var correct_alter = false;
if (!name.match(/Gh/) || (!name.match(/gh/))){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Gh/) || alter.name.match(/gh/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نوشتن غ و ق دقت شود';
strErrors += '\n';
}
}
// Check gh for غ
if (name.match(/Gh/) || (name.match(/gh/))){
var correct_alter = false;
if (!name.match(/غ/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/غ/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نوشتن غ و ق دقت شود';
strErrors += '\n';
}
}
if ( ((name.match(/ق/) || []).length==1) && (name.match(/شرقی/)) ){
}
else if ( ((name.match(/ق/) || []).length>1) ){
var correct_alter = false;
if (!name.match(/q/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/q/i)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نوشتن غ و ق دقت شود';
strErrors += '\n';
}
}
// Check q for ق
if (name.match(/q/i)){
var correct_alter = false;
if (!name.match(/ق/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/ق/)){
correct_alter = true;
break;
}
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نوشتن غ و ق دقت شود';
strErrors += '\n';
}
}
// Check Imam for امام
if (name.match(/Imam/)){
var correct_alter = false;
if (!name.match(/امام/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/امام/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tImam')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر امام نوشته شود';
strErrors += '\n';
}
}
if (name.match(/\sامام/)){
var correct_alter = false;
if (!name.match(/Imam/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Imam/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tامام')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Imam نوشته شود';
strErrors += '\n';
}
}
// Check Seyyed for امام
if (name.match(/Seyyed/)){
var correct_alter = false;
if (!name.match(/سید/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/سید/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tSeyyed')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر سید نوشته شود';
strErrors += '\n';
}
}
if (name.match(/سید/)){
var correct_alter = false;
if (!name.match(/Seyyed/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Seyyed/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tسید')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Seyyed نوشته شود';
strErrors += '\n';
}
}
// Check Hosein for حسین
if (name.match(/Hosein/i)){
var correct_alter = false;
if (!name.match(/حسین/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/حسین/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tHosein')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام با آلتر حسین نوشته شود';
strErrors += '\n';
}
}
if (name.match(/حسین/)){
var correct_alter = false;
if (!name.match(/Hosein/i)){
wrong_name = true;
strErrors += '* در نام یا آلتر Hosein نوشته شود';
strErrors += '\n';
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Hosein/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tحسین')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Hosein نوشته شود';
strErrors += '\n';
}
}
// Check Khomeini for خمینی
if (name.match(/Khomeini/)){
var correct_alter = false;
if (!name.match(/خمینی/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/خمینی/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tKhomeini')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر خمینی نوشته شود';
strErrors += '\n';
}
}
if (name.match(/خمینی/)){
var correct_alter = false;
if (!name.match(/Khomeini/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Khomeini/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tخمینی')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Khomeini نوشته شود';
strErrors += '\n';
}
}
// Check Mohammad for محمد
if (name.match(/Mohammad/i)){
var correct_alter = false;
if (!name.match(/محمد/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/محمد/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tMohammad')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر محمد نوشته شود';
strErrors += '\n';
}
}
if (name.match(/محمد/)){
var correct_alter = false;
if (!name.match(/Mohammad/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Mohammad/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tمحمد')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Mohammad نوشته شود';
strErrors += '\n';
}
}
// Check for شهید
if (name.match(/شهید\s/)){
wrong_name = true;
strErrors += '* شهید در نام نوشته شده';
strErrors += '\n';
//console.log('+++' + name + '\tشهید')
}
if ( (roadType==ROAD_STREET) || (roadType==ROAD_PRIMARY_STREET) )
{
// Check for خیابان
if (name.match(/خیابان\s/)){
wrong_name = true;
strErrors += '* خیابان در نام نوشته شده';
strErrors += '\n';
//console.log('+++' + name + '\tخیابان')
}
if (name.match(/Avenue/i)){
wrong_name = true;
strErrors += '* Avenue در نام نوشته شده';
strErrors += '\n';
}
if (name.match(/\sST[\s-]/i)){
wrong_name = true;
strErrors += '* st در نام نوشته شده';
strErrors += '\n';
}
// Check for کوچه
if (name.match(/کوچه/)){
wrong_name = true;
strErrors += '* کوچه در نام نوشته شده';
strErrors += '\n';
//console.log('+++' + name + '\tکوچه')
}
// Check for بنبست
if (name.match(/بنبست/) || name.match(/بن بست/)){
wrong_name = true;
strErrors += '* بن بست در نام نوشته شده';
strErrors += '\n';
//console.log('+++' + name + '\tبنبست')
}
}
// Check local lane for کنارگذر
if (name.match(/local lane/i)){
var correct_alter = false;
if (!name.match(/کنارگذر/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/کنارگذر/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tlocal lane')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر کنارگذر نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/کنارگذر/)){
var correct_alter = false;
if (!name.match(/local lane/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/local lane/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tکنارگذر')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر local lane با حروف کوچک نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/1st/i) && (!name.match(/,\s/))){
var correct_alter = false;
if ( (!name.match(/\sاول/)) && (!name.match(/\sیکم/)) && (!name.match(/\sنخست/)) ){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/\sاول/) || alter.name.match(/\sیکم/) || alter.name.match(/\sنخست/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\t1st')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر اول یا یکم یا نخست اضافه شود';
strErrors += '\n';
}
}
if ( ((name.match(/\sاول/)) || (name.match(/\sیکم/)) || (name.match(/\sنخست/))) && !name.match(/\متری/) ){
var correct_alter = false;
if (!name.match(/1st/i)){
if (!name.match(/Metri/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/1st/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tاول')
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر 1st نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/2nd/i) && (!name.match(/,\s/))){
var correct_alter = false;
if (!name.match(/دوم/)) {
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/دوم/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\t2nd')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر دوم نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/دوم/) && !name.match(/\متری/)) {
var correct_alter = false;
if (!name.match(/2nd/i)){
if (!name.match(/Metri/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/2nd/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tدوم')
}
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر 2nd نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/3rd/i) && (!name.match(/,\s/))){
var correct_alter = false;
if (!name.match(/سوم/)) {
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/سوم/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\t3rd')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر سوم نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/سوم/) && !name.match(/\متری/)) {
var correct_alter = false;
if (!name.match(/3rd/i)){
if (!name.match(/Metri/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/3rd/i)){
correct_alter = true;
break;
}
}
}
//console.log('+++' + name + '\tسوم')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر 3rd نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/Metri/i)){
var correct_alter = false;
if (!name.match(/متری/)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/متری/)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tMohammad')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر متری نوشته نیست';
strErrors += '\n';
}
}
if (name.match(/متری/)){
var correct_alter = false;
if (!name.match(/Metri/i)){
// Check alter names
for (var i = 0; i < attributes.streetIDs.length; i++) {
alter = W.model.streets.get(attributes.streetIDs[i]);
if (alter.name.match(/Metri/i)){
correct_alter = true;
break;
}
}
//console.log('+++' + name + '\tمحمد')
}
else
{
correct_alter = true;
}
if (!correct_alter)
{
wrong_name = true;
strErrors += '* در نام یا آلتر Metri نوشته نیست';
strErrors += '\n';
}
}
if ((opacity < 0.1) && wrong_name) {
line.setAttribute("stroke",Color_WrongName);
line.setAttribute("stroke-opacity",0.60);
line.setAttribute("stroke-width", 10);
continue;
}
}
if (lock_num && ShowWrongLocks){
var wrong_lock = false
if (lock_num == 1)
{
wrong_lock = true;
strErrors += '* لاک یک را بهتر است روی خودکار قرار دهید';
strErrors += '\n';
}
if (roundabout){
if (lock_num < 3)
{
wrong_lock = true;
strErrors += '* سگمنت میدان باید حداقل لاک سه بگیرد';
strErrors += '\n';
}
}
if (hasRestrictions){
if (lock_num < 3)
{
wrong_lock = true;
strErrors += '* سگمنت محدودیت دار باید حداقل لاک سه بگیرد';
strErrors += '\n';
}
}
if (!roundabout && !hasRestrictions)
{
switch(roadType) {
case ROAD_STREET:
// Avoid خیابان، کوچه و بنبست
if (lock_num > 2)
{
wrong_lock = true;
strErrors += '* نوع خیابان لاک بالاتر از دو گرفته است';
strErrors += '\n';
}
break;
case ROAD_PRIMARY_STREET:
// Avoid خیابان، کوچه و بنبست
if ((lock_num > 3) || (lock_num < 2))
{
wrong_lock = true;
strErrors += '* نوع خیابان اصلی لاک بالای سه یا پایین دو گرفته است';
strErrors += '\n';
}
break;
case ROAD_FREEWAY:
// code block
if (lock_num < 5)
{
wrong_lock = true;
strErrors += '* نوع آزادراه لاک کمتر از پنج گرفته است';
strErrors += '\n';
}
break;
case ROAD_RAMP:
// code block
if ((lock_num < 3) || (lock_num > 5))
{
wrong_lock = true;
strErrors += '* نوع رمپ لاک کمتر از سه یا بیشتر از پنج گرفته است';
strErrors += '\n';
}
break;
case ROAD_MAJOR_HIGHWAY:
// code block
if (lock_num != 4)
{
wrong_lock = true;
strErrors += '* نوع بزرگراه اصلی لاک غیر از چهار گرفته است';
strErrors += '\n';
}
break;
case ROAD_MINOR_HIGHWAY:
// code block
if (lock_num < 3)
{
wrong_lock = true;
strErrors += '* نوع بزرگراه فرعی لاک کمتر از سه گرفته است';
strErrors += '\n';
}
break;
case ROAD_PRIVATE:
// code block
if (lock_num > 2)
{
wrong_lock = true;
strErrors += '* نوع سگمنت خصوصی لاک بیشتر از دو گرفته است';
strErrors += '\n';
}
break;
case ROAD_PARKING_LOT:
// code block
for (var venue_obj in W['model']['venues']['objects']) {
var venue_obj_id = W['model']['venues']['getObjectById'](venue_obj);
// If segment is inside a gas station
if (venue_obj_id['geometry']['intersects'](attributes['geometry'])) {
var venueCategories = venue_obj_id.attributes.categories;
if ( (venueCategories.indexOf("GAS_STATION") > -1) && (lock_num != 3) )
{
wrong_lock = true;
strErrors += '* لاک سگمنت جایگاه سوخت باید سه باشد';
strErrors += '\n';
break;
}
}
}
if (lock_num > 3)
{
wrong_lock = true;
strErrors += '* نوع پارکینگ لاک بیشتر از سه گرفته است';
strErrors += '\n';
}
break;
case ROAD_NARROW:
// code block
break;
}
}
if ((opacity < 0.1) && wrong_lock) {
line.setAttribute("stroke", Color_WrongLocks);
line.setAttribute("stroke-opacity",0.60);
line.setAttribute("stroke-width", 10);
continue;
}
}
if ((wrong_Speed || wrong_lock || wrong_name || wrong_length) && line.getElementsByTagName('title').length < 1)
{
var nodeTitle = document.createElementNS("http://www.w3.org/2000/svg", 'title');
var errors = document.createTextNode(strErrors.trim());
nodeTitle.appendChild(errors);
line.appendChild(nodeTitle);
}
} // end of loop
saveSettings();
} // end of function
function CheckPlaces(event) {
if (typeof W.model.venues == "undefined") {
return;
}
if (W.model.active == false) {
return;
}
var ShowWrongPlaces = getId('_cbCheckWrongPlaces').checked; //true;
var ShowWrongPlaceEntryPoint = getId('_cbCheckWrongPlaceEntryPoint').checked; //true;
var ShowPlaceLockOne = getId('_cbCheckPlaceLockOne').checked; //true;
if (event && event.type && /click|change/.test(event.type)) {
if (ShowWrongPlaces == false)
{
for (var mark in W.model.venues.objects) {
var venue = W.model.venues.getObjectById(mark);
var poly = getId(venue.geometry.id);
if (poly !== null && poly.getAttribute("stroke-opacity") == 0.987) {
if (venue.isPoint()) {
poly.setAttribute("stroke","white");
} else {
poly.setAttribute("stroke","#ca9ace");
poly.setAttribute("stroke-width",2);
poly.setAttribute("stroke-dasharray","none");
}
poly.setAttribute("fill","#c290c6");
poly.setAttribute("stroke-opacity", 1)
}
}
}
}
if (ShowWrongPlaces)
{
for (var mark in W.model.venues.objects) {
var venue = W.model.venues.getObjectById(mark);
var approved = venue.attributes.approved
var venueCategories = venue.attributes.categories;
var venueServices = venue.attributes.services;
var venueName = venue.attributes.name;
var venueAliases = venue.attributes.aliases;
var poly = getId(venue.geometry.id);
var entryPoint = venue.attributes.entryExitPoints;
var venuePhone = venue.attributes.phone;
var lock_num = venue.attributes.lockRank === null ? 0 : Number(venue.attributes.lockRank) + 1;
var address = venue.getAddress().attributes.street;
var hasPicture = venue.attributes.images.length;
if (!approved){
continue;
}
if (poly == null || mark.state == "Update" || venue.selected) {
continue;
}
if (poly.getAttribute("fill") == poly.getAttribute("stroke")) {
continue;
}
if (poly.getAttribute("stroke-opacity") == 0.987) {
continue;
}
var venueArea = null;
if (!venue.isPoint())
{
var venueArea = venue.geometry.getGeodesicArea(W.map.getProjectionObject());
venueArea = venueArea.toFixed(0);
}
poly.setAttribute("stroke-opacity", 0.987);
var wrong_place = false;
//for (i = 0, n = venueAliases.length; i < n; i++) {
// alter = W.model.streets.get(venueAliases[i]);
// if (alter.name.match(/Mohammad/i)){
// wrong_name = false;
// break;
// }
//}
var strErrors = '';
if (ShowPlaceLockOne)
{
if(lock_num==1)
{
wrong_place = true;
strErrors += '* مکان دارای لاک یک';
strErrors += '\n';
}
}
if ((venueCategories.indexOf("JUNCTION_INTERCHANGE") == -1 ) && (address === null))
{
wrong_place = true;
strErrors += '* لطفا وضعیت آدرس مکان را مشخص کنید';
strErrors += '\n';
}
if (venue.attributes.houseNumber)
{
if ( (venue.attributes.houseNumber.startsWith("+")) || (venue.attributes.houseNumber.startsWith("0")) || (venue.attributes.houseNumber.length>=5) )
{
wrong_place = true;
strErrors += '* آیا شماره پلاک این مکان درست است؟';
strErrors += '\n';
}
}
if ( (venueName.match(/[a-z]/i) && !venueName.match(/^\d/) && !(/^[A-Z]/.test(venueName))))
{
wrong_place = true;
strErrors += '* حرف اول باید به صورت بزرگ نوشته شود';
strErrors += '\n';
}
if ( (!venue.isPoint()) && (venueArea < 500) && (venueCategories.indexOf("GAS_STATION") == -1) && (venueCategories.indexOf("JUNCTION_INTERCHANGE") == -1) )
{
wrong_place = true;
strErrors += '* بهتر است مکانهای محیطی کوچک را به نقطه ای تبدیل کنید';
strErrors += '\n';
}
if (venuePhone && (!venuePhone.startsWith("+98")))
{
wrong_place = true;
strErrors += '* استاندارد شماره تلفن به صورت 980000000000+ می باشد';
strErrors += '\n';
}
if (venueCategories.indexOf("RESIDENCE_HOME") == -1)
{
if (!venueName){
wrong_place = true;
strErrors += '* یک نام برای این مکان ثبت کنید';
strErrors += '\n';
}
else if (venueName && venueName.match(/-/) && !venueName.match(/\s-\s/)){
wrong_place = true;
strErrors += '* فاصله قبل و بعد از خط تیره در نام';
strErrors += '\n';
}
if (venueName && venueName.match(/-/) && venueAliases.length<1){
wrong_place = true;
strErrors += '* حداقل یک آلتر اضافه گردد';
strErrors += '\n';
}
if (ShowWrongPlaceEntryPoint && !venue.isPoint() && entryPoint.length==0 && (venueCategories.indexOf("JUNCTION_INTERCHANGE") == -1)){
wrong_place = true;
strErrors += '* مکان محیطی حداقل یک نقطه ورود دارد';
strErrors += '\n';
}
}
if (venueName.match(/میدان/))
{
if (!venueName.match(/Sq\s-/i)) {
wrong_place = true;
strErrors += '* اگر اینجا میدان است عبارت Sq را نیز در نام اضافه کنید';
strErrors += '\n';
}
}
else if (venueName.match(/Sq\s/i))
{
if (!venueName.match(/میدان/)) {
wrong_place = true;
strErrors += '* اگر اینجا میدان است کلمه میدان را نیز درنام اضافه کنید';
strErrors += '\n';
}
}
if (venueName.match(/مسجد/) || venueName.match(/Mosque/i))
{
if (venueCategories.indexOf("RELIGIOUS_CENTER") == -1)
{
wrong_place = true;
strErrors += '* اگر اینجا مسجد است باید در دسته بندی مرکز مذهبی قرار گیرد';
strErrors += '\n';
}
}
if (venueCategories){ //
if ( (!venue.isPoint()) && (venueCategories.indexOf("JUNCTION_INTERCHANGE") == -1) && (venueCategories.indexOf("PARKING_LOT") == -1) && (venueCategories.indexOf("GAS_STATION") == -1) && (lock_num < 2) )
{
wrong_place = true;
strErrors += '* حداقل لاک دو برای مکانهای محیطی مناسب است';
strErrors += '\n';
}
else if (venueCategories.indexOf("PHARMACY") > -1)
{
if ( (!venueName.match(/داروخانه/)) || (!venueName.match(/Pharmacy/i)) )
{
wrong_place = true;
strErrors += '* داروخانه و Pharmacy در نام اضافه شود';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("AIRPORT") > -1)
{
if ( !venueName.match(/فرودگاه/) )
{
wrong_place = true;
strErrors += '* فرودگاه در نام اضافه شود';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("PARK") > -1)
{
if (venue.isPoint()){ // Should be as polygon
wrong_place = true;
strErrors += '* پارک یا بوستان باید به صورت محیطی باشد';
strErrors += '\n';
}
if (venueServices.indexOf("RESTROOMS") > -1)
{
var found = false;
for (var venue_obj in W['model']['venues']['objects']) {
var venue_obj_id = W['model']['venues']['getObjectById'](venue_obj);
// If segment object is visible
if (!W.map.getExtent().intersectsBounds(venue_obj_id.geometry.getBounds())){
continue;
}
if (venue === venue_obj_id)
{
continue;
}
if (venue['geometry']['intersects'](venue_obj_id['geometry'])) {
if (venue_obj_id.attributes.services.indexOf("RESTROOMS") > -1) {
found = true;
break;
}
}
}
if (!found)
{
wrong_place = true;
strErrors += '* برای این پارک باید سرویس بهداشتی را جداگانه نیز تعربف نمایید';
strErrors += '\n';
}
}
if ( venueName && !venueName.match(/بوستان/) )
{
wrong_place = true;
strErrors += '* از بوستان در نام استفاده کنید';
strErrors += '\n';
}
if ( venueName && !venueName.match(/Park -/i) )
{
wrong_place = true;
strErrors += '* از Park در نام استفاده کنید';
strErrors += '\n';
}
}
else if ( (venueCategories.indexOf("ATM") > -1) && (venueCategories.length == 1) )
{
if ( !venueName.match(/خودپرداز/) )
{
wrong_place = true;
strErrors += '* در نام خودپرداز را اضافه کنید';
strErrors += '\n';
}
if ( !venueName.match(/ATM/i) )
{
wrong_place = true;
strErrors += '* در نام ATM اضافه کنید';
strErrors += '\n';
}
}
else if ( (venueCategories.indexOf("EMBASSY_CONSULATE") > -1) )
{
if (hasPicture)
{
wrong_place = true;
strErrors += '* عکس برداری از نمای سفارتخانه ها قانونا ممنوع است و مکان نباید دارای عکس باشد';
strErrors += '\n';
}
if ( !venueName.match(/سفارت/) )
{
wrong_place = true;
strErrors += '* اگر اینجا سفارت است در نام سفارت اضافه کنید';
strErrors += '\n';
}
if ( !venueName.match(/Embassy/i) )
{
wrong_place = true;
strErrors += '* اگر اینجا سفارت است در نام Embassy اضافه کنید';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("MILITARY") > -1)
{
if (hasPicture)
{
wrong_place = true;
strErrors += '* عکس برداری از اماکن نظامی قانونا ممنوع است و مکان نباید دارای عکس باشد';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("TUNNEL") > -1)
{
if (venue.isPoint())
{
wrong_place = true;
strErrors += '* تونل باید به صورت محیطی تعریف شود';
strErrors += '\n';
break;
}
}
else if (venueCategories.indexOf("BUS_STATION") > -1)
{
if ( !venueName.match(/ایستگاه/) )
{
wrong_place = true;
strErrors += '* اگر اینجا ایستگاه اتوبوس است در نام ایستگاه اضافه کنید';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("GAS_STATION") > -1)
{
if (venue.isPoint())
{
wrong_place = true;
strErrors += '* جایگاه سوخت نباید به صورت نقطه ای تعریف شود';
strErrors += '\n';
break;
}
var any_segment = false;
for (var seg_obj in W['model']['segments']['objects']) {
var seg_obj_id = W['model']['segments']['getObjectById'](seg_obj);
// If segment object is visible
if (!W.map.getExtent().intersectsBounds(seg_obj_id.geometry.getBounds())){
continue;
}
if (venue['geometry']['intersects'](seg_obj_id['geometry'])) {
any_segment = true;
var two_way = seg_obj_id.attributes.fwdDirection === true && seg_obj_id.attributes.revDirection === true;
if (seg_obj_id['attributes']['roadType'] != ROAD_PARKING_LOT) {
wrong_place = true;
strErrors += '* سگمنت جایگاه سوخت باید از نوع راه داخل پارگینگ باشد';
strErrors += '\n';
break;
}
if ( (venueArea < 1000) && (!two_way) )
{
wrong_place = true;
strErrors += '* اگر مساحت این جایگاه، کوچک است نوع سگمنت جایگاه دوطرفه مناسب است';
strErrors += '\n';
//break;
}
}
}
if (!any_segment){
wrong_place = true;
strErrors += '* آیا اطمینان دارید که برای این جایگاه نباید سگمنتی رسم شود؟';
strErrors += '\n';
}
if (venue.isPoint()){ // Should be as polygon
wrong_place = true;
strErrors += '* جایگاه سوخت به صورت محیطی باید باشد';
strErrors += '\n';
}
if (lock_num < 3)
{
wrong_place = true;
strErrors += '* لاک جایگاه سوخت حداقل سه است';
strErrors += '\n';
}
if (!venueName.match(/جایگاه/))
{
wrong_place = true;
strErrors += '* در نام فارسی کلمه جایگاه نوشته نیست';
strErrors += '\n';
}
if (venueName.match(/[a-z]/i))
{
wrong_place = true;
strErrors += '* در نام اصلی جایگاه سوخت نباید از حروف انگلیسی استفاده شود';
strErrors += '\n';
}
if (venueAliases.length<1)
{
wrong_place = true;
strErrors += '* آلتر جایگاه سوخت فراموش شده است';
strErrors += '\n';
}
else
{
if (venueName.match(/جایگاه سوخت/))
{
var blPetrolStation = false;
for (var index=0; index<venueAliases.length; index++)
{
if (venueAliases[index].match(/Petrol Station/i))
{
blPetrolStation = true;
break;
}
}
if (!blPetrolStation)
{
wrong_place = true;
strErrors += '* در آلتر Petrol Station نوشته شود';
strErrors += '\n';
}
}
if (venueName.match(/جایگاه گاز طبیعی/))
{
var blCNG_Station = false;
for (var index=0; index<venueAliases.length; index++)
{
if (venueAliases[index].match(/CNG Station/i))
{
blCNG_Station = true;
break;
}
}
if (!blCNG_Station)
{
wrong_place = true;
strErrors += '* در آلتر CNG Station نوشته شود';
strErrors += '\n';
}
}
if (venueName.match(/جایگاه چندمنظوره/))
{
blPetrol_CNG_Station = false;
for (var index=0; index<venueAliases.length; index++)
{
if (venueAliases[index].match(/Petrol & CNG Station/i))
{
blPetrol_CNG_Station = true;
break;
}
}
if (!blPetrol_CNG_Station)
{
wrong_place = true;
strErrors += '* در آلتر Petrol & CNG Station نوشته شود';
strErrors += '\n';
}
}
}
}
else if (venueCategories.indexOf("FACTORY_INDUSTRIAL") > -1)
{
if (!venueName.match(/صنعتی/))
{
wrong_place = true;
strErrors += '* اگر اینجا شهرک صنعتی است در نام اضافه کنید';
strErrors += '\n';
}
else
{
for (var seg_obj in W['model']['segments']['objects']) {
var seg_obj_id = W['model']['segments']['getObjectById'](seg_obj);
// If segment object is visible
if (!W.map.getExtent().intersectsBounds(seg_obj_id.geometry.getBounds())){
continue;
}
if (venue['geometry']['intersects'](seg_obj_id['geometry'])) {
if (seg_obj_id['attributes']['roadType'] != ROAD_PRIVATE) {
wrong_place = true;
strErrors += '* سگمنت شهرک های صنعتی از نوع راه اختصاصی می باشد';
strErrors += '\n';
break;
}
}
}
}
}
else if (venueCategories.indexOf("PARKING_LOT") > -1)
{
if (venue.isPoint()){ // Should be as polygon
wrong_place = true;
strErrors += '* پارکینگ عمومی به صورت محیطی باشد';
strErrors += '\n';
}
else if ( (venue.attributes.categoryAttributes.PARKING_LOT.parkingType == 'PUBLIC') && (lock_num < 3) )
{
wrong_place = true;
strErrors += '* لاک پارکینگ عمومی حداقل سه است';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("REST_AREAS") > -1)
{
if ( (venueServices.indexOf("RESTROOMS") > -1) && (!venue.isPoint()) ){ // Should be as point
wrong_place = true;
strErrors += '* سرویس بهداشتی جدا باید به صورت نقطه ای با تیک سرویس باشد';
strErrors += '\n';
}
else if (venueServices.indexOf("RESTROOMS") == -1)
{
wrong_place = true;
strErrors += '* اگر اینجا سرویس بهداشتی است، تیک سرویس بهداشتی را نیز بزنید';
strErrors += '\n';
}
}
else if (venueCategories.indexOf("JUNCTION_INTERCHANGE") > -1)
{
for (var ven_obj in W['model']['venues']['objects']) {
var ven_obj_id = W['model']['venues']['getObjectById'](ven_obj);
// If segment object is visible
if (!W.map.getExtent().intersectsBounds(ven_obj_id.geometry.getBounds())){
continue;
}
if (ven_obj_id.attributes.categories.indexOf("JUNCTION_INTERCHANGE") == -1)
{
continue;
}
if (venue.attributes.id == ven_obj_id.attributes.id)
{
continue;
}
if (venue['geometry']['intersects'](ven_obj_id['geometry'])) {
wrong_place = true;
strErrors += '* میدان یا تقاطع روی هم رسم شده اند';
strErrors += '\n';
}
}
var venueStreetObj = ((typeof venue.attributes.streetID == 'undefined' || venue.attributes.streetID == null) ? null : Waze.model.streets.get(venue.attributes.streetID));
var venueStreetName = (venueStreetObj ? venueStreetObj.name : null);
if (venue.isPoint()){ // Should be as polygon
wrong_place = true;
strErrors += '* میدان یا تقاطع باید به صورت محیطی باشد';
strErrors += '\n';
}
else if (venueStreetName){
wrong_place = true;
strErrors += '* اگر اینجا میدان است نام خیابان را حذف نمایید';
strErrors += '\n';
}
else if (lock_num < 3)
{
wrong_place = true;
strErrors += '* لاک مکان میدان یا تقاطع حداقل سه باشد';
strErrors += '\n';
}
else if (venueName && !venueName.match(/Sq\s-/i)) {
wrong_place = true;
strErrors += '* اگر اینجا میدان است عبارت Sq را نیز در نام اضافه کنید';
strErrors += '\n';
}
else if (venueName && !venueName.match(/میدان/)) {
wrong_place = true;
strErrors += '* اگر اینجا میدان است کلمه میدان را نیز درنام اضافه کنید';
strErrors += '\n';
}
}
else if ( (venueCategories.length==1) && (venueCategories.indexOf("ATM") > -1) )
{
wrong_place = true;
strErrors += '* در بانکها یا دیگر دستهبندیهایی که در آنها خودپرداز وجود دارد، نیازی به ایجاد یک مکان جداگانه برای خودپرداز نمیباشد';
strErrors += '\n';
}
}
if ( (venueName.match(/سرویس بهداشتی/)) && ((venueCategories.indexOf("REST_AREAS") == -1)) ){
wrong_place = true;
strErrors += '* سرویس بهداشتی باید در دسته بندی استراحتگاه قرار گیرد';
strErrors += '\n';
}
if ( (venueName.match(/بوستان\s/) || venueName.match(/پارک\s/)) && ((venueCategories.indexOf("PARK") == -1)) ){
wrong_place = true;
strErrors += '* پارک یا بوستان باید در دسته بندی پارک قرار گیرد';
strErrors += '\n';
}
if (wrong_place){
if (poly.getElementsByTagName('title').length < 1)
{
var nodeTitle = document.createElementNS("http://www.w3.org/2000/svg", 'title');
var errors = document.createTextNode(strErrors.trim());
nodeTitle.appendChild(errors);
poly.appendChild(nodeTitle);
}
if (venue.isPoint())
{
poly.setAttribute("stroke-dasharray", "3 3");
poly.setAttribute("stroke", Color_WrongPlace);
}
else
{
poly.setAttribute("fill", Color_WrongPlace);
poly.setAttribute("fill-opacity", "0.6");
poly.setAttribute("stroke-dasharray", "3 6");
poly.setAttribute("stroke-width", "3");
}
}
} // End of for
}
saveSettings();
}
/* My utils */
function getElementsByClassName(classname, node) {
if(!node) node = document.getElementsByTagName("body")[0];
var a = [];
var re = new RegExp('\\b' + classname + '\\b');
var els = node.getElementsByTagName("*");
for (var i=0,j=els.length; i<j; i++)
if (re.test(els[i].className)) a.push(els[i]);
return a;
}
function getId(node) {
return document.getElementById(node);
}
bootstrap();
})();