Changeset 19467 in josm for trunk


Ignore:
Timestamp:
2026-01-16T11:11:30+01:00 (2 days ago)
Author:
stoecker
Message:

improve Power circuits relations presets and validation, fix #24456 - patch by francois.lacombe

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/resources/data/defaultpresets.xml

    r19436 r19467  
    499499            <combo key="windings:configuration" text="Windings configuration" values="star,delta,open-delta,zigzag,open,scott,leblanc" values_context="power_windings" />
    500500        </optional>
     501    </chunk>
     502    <chunk id="power_topology">
     503        <combo key="topology" text="Circuit topology" values="linear,branched" />
    501504    </chunk>
    502505    <chunk id="telecom_medium">
     
    1011610119                </roles>
    1011710120            </item> <!-- Detour Route -->
    10118             <item name="Power Route" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
    10119                 <link wiki="Tag:route=power" />
    10120                 <space/>
    10121                 <key key="type" value="route"/>
    10122                 <key key="route" value="power"/>
    10123                 <reference ref="name_ref_operator"/>
    10124                 <roles>
    10125                     <role key="line" text="route segment" requisite="required" type="way" member_expression="power=line|power=cable"/>
    10126                     <role key="substation" text="Power Substation" requisite="optional" type="way,closedway,multipolygon" member_expression="power"/>
    10127                 </roles>
    10128             </item> <!-- Power Route -->
    1012910121            <item name="Railway Route" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
    1013010122                <link wiki="Tag:route=railway" />
     
    1015910151                <space/>
    1016010152                <key key="type" value="superroute"/>
    10161                 <combo key="route" text="Type" values="bicycle,detour,foot,hiking,horse,mtb,piste,power,railway,road,ski" display_values="Bicycle Route,Detour Route,Walking Route,Hiking Route,Riding Route,Mountain Biking Route,Piste Route,Power Route,Railway Route,Road Route,Ski Route" />
     10153                <combo key="route" text="Type" values="bicycle,detour,foot,hiking,horse,mtb,piste,railway,road,ski" display_values="Bicycle Route,Detour Route,Walking Route,Hiking Route,Riding Route,Mountain Biking Route,Piste Route,Railway Route,Road Route,Ski Route" />
    1016210154                <reference ref="name_ref_operator"/>
    1016310155                <roles>
     
    1029810290            </roles>
    1029910291        </item> <!-- Tunnel -->
     10292        <group name="Power" icon="presets/power/power.svg">
     10293            <item name="Power circuit" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
     10294                <link wiki="Tag:power=circuit" />
     10295                <space/>
     10296                <key key="type" value="power"/>
     10297                <key key="power" value="circuit"/>
     10298                <space/>
     10299                <reference ref="cables"/>
     10300                <reference ref="voltage"/>
     10301                <reference ref="frequency"/>
     10302                <reference ref="power_topology"/>
     10303                <optional>
     10304                    <reference ref="name_ref_operator"/>
     10305                </optional>
     10306                <roles>
     10307                    <role key="substation" text="Power Substation" requisite="required" type="way,closedway,multipolygon" member_expression="power|substation"/>
     10308                    <role key="section" text="Circuit section" requisite="required" type="way,relation" member_expression="power=line|power=cable|power=minor_line|power=line_section"/>
     10309                    <role key="tap" text="Tap point" requisite="optional" type="node" member_expression="power=pole|power=tower|power=connection"/>
     10310                </roles>
     10311            </item> <!-- Power circuit -->
     10312            <item name="Power line section" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
     10313                <link wiki="Tag:power=line_section" />
     10314                <space/>
     10315                <key key="type" value="power"/>
     10316                <key key="power" value="line_section"/>
     10317                <space/>
     10318                <reference ref="cables"/>
     10319                <reference ref="voltage"/>
     10320                <optional>
     10321                    <reference ref="name_ref_operator"/>
     10322                </optional>
     10323                <roles>
     10324                    <role key="line" text="Section segment" requisite="required" type="way" member_expression="power=line|power=cable|power=minor_line"/>
     10325                </roles>
     10326            </item> <!-- Power circuit -->
     10327        </group>
    1030010328    </group> <!-- Relations -->
    1030110329</presets>
  • trunk/resources/data/validator/combinations.mapcss

    r19440 r19467  
    307307node[power=transformer][voltage],
    308308node[transformer=distribution][voltage][power=pole],
     309relation[power=circuit][wires],
     310relation[power=line_section][wires],
    309311*[amenity=vending_machine][shop],
    310312*[noname?][name],
     
    11381140  assertNoMatch: "way highway=primary oneway=yes bicycle:lanes=no|designated|yes cycleway:lanes=|lane|no";
    11391141}
     1142
     1143/* Prevent redundancy between relation and members, see #24456, #24457 */
     1144relation[power=circuit] > way[power=line][frequency],
     1145relation[power=circuit] > way[power=minor_line][frequency],
     1146relation[power=circuit] > way[power=cable][frequency] {
     1147  throwWarning: tr("Frequency tag should be on the circuit relation only, not on the power segment");
     1148  group: tr("redundant tagging");
     1149}
     1150relation[power=circuit] > relation[power=line_section][frequency] { 
     1151  throwWarning: tr("Frequency tag should be on the circuit relation only, not on the power section");
     1152  group: tr("redundant tagging");
     1153}
     1154
     1155/* Invalid topology with power circuit relation, see #24456 */
     1156relation[power=circuit][topology][topology!~/^(linear|branched)$/] {
     1157       throwError: tr("power=circuit relations should have a topology tag with value linear or branched");
     1158       assertMatch: "relation type=power power=circuit topology=branch";
     1159       assertNoMatch: "relation type=power power=circuit topology=branched";
  • trunk/resources/data/validator/deprecated.mapcss

    r19222 r19467  
    25842584}
    25852585
     2586/* route=power is deprecated, see #24456 */
     2587relation[route=power] {
     2588  throwWarning: tr("{0} is deprecated", "{0.tag}");
     2589  group: tr("deprecated tagging");
     2590  suggestAlternative: "type=power + power=circuit";
     2591}
     2592relation[power=branch] {
     2593  throwWarning: tr("{0} is deprecated", "{0.tag}");
     2594  group: tr("deprecated tagging");
     2595  suggestAlternative: "type=power + power=line_section";
     2596}
     2597
    25862598/* When tags are deprecated they should be added to ignoretags.cfg too. */
  • trunk/resources/data/validator/geometry.mapcss

    r19342 r19467  
    9191node[interval],
    9292node[route],
    93 node[restriction] {
     93node[restriction],
     94node[power=circuit],
     95node[power=line_section] {
    9496  throwError: tr("{0} on a node. Should be used in a relation", "{0.tag}");
    9597}
     
    140142way[type=multipolygon],
    141143way[interval][route!=ferry],
    142 way[route=bus] {
     144way[route=bus],
     145way[power=circuit],
     146way[power=line_section] {
    143147  throwError: tr("{0} on a way. Should be used in a relation", "{0.tag}");
    144148}
    145149
    146150/* {0} on a closed way, should be a unclosed way; #19981 */
    147 way:closed[power=line] {
     151way:closed[power=line],
     152way:closed[power=cable],
     153way:closed[power=minor_line] {
    148154  throwWarning: tr("{0} on a closed way. Should be used on an unclosed way.", "{1.tag}");
    149155}
  • trunk/resources/data/validator/ignoretags.cfg

    r19245 r19467  
    826826; This seems to be a region specific tag.
    827827K:valley=balka
     828K:route=power
     829K:power=branch
    828830
    829831; These tags should probably have better software support, but maybe they can be in the appropriate section in this file.
  • trunk/resources/data/validator/relation.mapcss

    r18369 r19467  
    7272  group: tr("suspicious tag combination");
    7373}
     74
     75/* Power relations, #24456 */
     76relation[type=power][!power],
     77relation[type=power][power][power!~/^(circuit|line_section)$/] {
     78       throwError: tr("Power relation misses or combined to wrong power=* value");
     79       assertMatch: "relation type=power";
     80  assertMatch: "relation type=power power=line";
     81       assertNoMatch: "relation type=power power=circuit";
     82}
  • trunk/test/unit/org/openstreetmap/josm/data/validation/tests/RelationCheckerTest.java

    r18870 r19467  
    126126
    127127    @Test
    128     void testPowerMemberExpression() {
    129         Relation r = createRelation("type=route route=power");
     128    void testPowerCircuitMemberExpression() {
     129        Relation r = createRelation("type=power power=circuit");
    130130        r.addMember(new RelationMember("", new Way()));
    131131
    132132        List<TestError> errors = testRelation(r);
    133133        assertEquals(2, errors.size());
    134         assertEquals("Role 'line' missing", errors.get(0).getDescription());
    135         assertEquals("Empty role found when expecting one of 'line/substation'", errors.get(1).getDescription());
     134        assertEquals("Role 'substation' missing", errors.get(0).getDescription());
     135        assertEquals("Empty role found when expecting one of 'substation/section/tap'", errors.get(1).getDescription());
    136136    }
    137137
Note: See TracChangeset for help on using the changeset viewer.