Skip to content
This repository has been archived by the owner on Jun 3, 2020. It is now read-only.

Point de départ (centroid) incorrect pour des lignes. #22

Closed
FERRATON opened this issue Jul 3, 2019 · 3 comments
Closed

Point de départ (centroid) incorrect pour des lignes. #22

FERRATON opened this issue Jul 3, 2019 · 3 comments
Assignees
Labels
enhancement New feature or request

Comments

@FERRATON
Copy link

FERRATON commented Jul 3, 2019

Si on utilise labelconnector sur des lignes, le point de départ qui est fixé sur le centroid n'est pas correct.
2019-07-03_09h15_54

Il faut utiliser une expression : line_interpolate_point($geometry, line_locate_point($geometry,centroid($geometry)))
comme point de départ.
2019-07-03_09h19_31

@haubourg haubourg self-assigned this Jul 9, 2019
@haubourg haubourg added the enhancement New feature or request label Jul 9, 2019
@haubourg haubourg added this to the 0.2 Bugfix release milestone Jul 9, 2019
@haubourg
Copy link
Contributor

@FERRATON j'ai essayé le point central de ligne, mais cela engendre des effets très étranges si la ligne est bien plus grande que l'écran, avec un connecteur qui travers l'écran pour aller chercher ce point central. J'ai remplacé cela par le point le plus proche, et cela me semble moins piégeux:

closest_point_label

n'hésite pas à réouvrir si cela ne convient pas

@haubourg
Copy link
Contributor

Je rouvre, le style "break aligned" est devenu extrèmement inefficient pour les polygones avec cette solution

Pour rappel, l'expression est monstrueuse. On ne peut pas passer simplement sur une fonction python plus efficiente sans nuire à la portabilité des projets:

/* Generated by LabelConnector plugin */
/* 
alias_en="Break aligned"
alias_fr="Lignes brisées régulières"
*/

   
geomfromwkt( 
-- start 01 upper left quadrant - more vertical move 
  if(  
    "auxiliary_storage_labeling_positionx" < x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" > y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and  ( abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) < abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ) ,         
    'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
    + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) - abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )) +' ' --middleX
    + to_string("auxiliary_storage_labeling_positiony") + ' ,'                                   --middleY
    + to_string("auxiliary_storage_labeling_positionx") + ' '
    + to_string("auxiliary_storage_labeling_positiony")+ ')' 
    
    ,  -- start 02 upper left quadrant - more horizontal move 
    
     if(  
        "auxiliary_storage_labeling_positionx" < x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" > y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and  abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) >= abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )  ,         
        'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
        + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )))  +' '                                                                --middleX
        + to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) + abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )) + ' ,' --middleY
        + to_string("auxiliary_storage_labeling_positionx") + ' '
        + to_string("auxiliary_storage_labeling_positiony")+ ')' 
        
        ,  
            -- start 03  lower left case 1 
            if(  
           "auxiliary_storage_labeling_positionx" < x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))   and "auxiliary_storage_labeling_positiony" <= y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and  abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) < abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )  ,         
            'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
            + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) - abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ))  +' '   --middleX
            + to_string( "auxiliary_storage_labeling_positiony") + ' ,'                                     --middleY
            + to_string("auxiliary_storage_labeling_positionx") + ' '
            + to_string("auxiliary_storage_labeling_positiony")+ ')' 
            , 
                 -- start 04  lower left case 2 
                if( "auxiliary_storage_labeling_positionx" < x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" <= y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and  abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) >= abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ,
                     'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
                    + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )))  +' '                                                                --middleX
                    + to_string( y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) - abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )) + ' ,'--middleY
                    + to_string("auxiliary_storage_labeling_positionx") + ' '
                    + to_string("auxiliary_storage_labeling_positiony")+ ')' 
                    ,
                    -- start 05  Upper right case 1
                    if( "auxiliary_storage_labeling_positionx" >= x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" > y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))     and abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) >= abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ,
                        'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
                        + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )))  +' '                                                                --middleX
                        + to_string( "auxiliary_storage_labeling_positiony" - abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )) + ' ,'--middleY
                        + to_string("auxiliary_storage_labeling_positionx") + ' '
                        + to_string("auxiliary_storage_labeling_positiony")+ ')' 
                        ,
                          -- start 06  Upper right case 2
                        if( "auxiliary_storage_labeling_positionx" >= x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))  and "auxiliary_storage_labeling_positiony" > y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) < abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ,
                            'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
                            + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) + abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ))  +' ' --middleX
                            + to_string("auxiliary_storage_labeling_positiony") + ' ,'                                    --middleY
                            + to_string("auxiliary_storage_labeling_positionx") + ' '
                            + to_string("auxiliary_storage_labeling_positiony")+ ')' 
                            ,
                            -- start 07  Lower right case 1
                            if( "auxiliary_storage_labeling_positionx" >= x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" <= y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) >= abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ,
                                'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
                                + to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )))  + ' '                                                               --middleX
                                + to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) - abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) )) + ' ,' --middleY
                                + to_string("auxiliary_storage_labeling_positionx") + ' '
                                + to_string("auxiliary_storage_labeling_positiony")+ ')' 
                                ,
                                -- start 08  Lower right case 2
                                if( "auxiliary_storage_labeling_positionx" >= x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) and "auxiliary_storage_labeling_positiony" <= y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))    and abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) < abs("auxiliary_storage_labeling_positionx" - x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) ,
                                    'LINESTRING('+ to_string(x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) +' '+ to_string(y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) ))) + ' , ' 
                                    + to_string( x(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) + abs("auxiliary_storage_labeling_positiony" - y(if( layer_property( @layer_name, 'geometry_type' ) = 'Line', closest_point( $geometry, make_point("auxiliary_storage_labeling_positionx"       , "auxiliary_storage_labeling_positiony") ), centroid($geometry) )) ) )  + ' ' --middleX
                                    + to_string("auxiliary_storage_labeling_positiony") + ' ,'                                       --middleY
                                    + to_string("auxiliary_storage_labeling_positionx") + ' '
                                    + to_string("auxiliary_storage_labeling_positiony")+ ')' 
                                    ,
                                    'ELSE'
                                
                                ) -- end 08
                            
                             ) -- end 07

                        ) -- end 06
                     
                    ) -- end 05

                ) -- end 04

            )  -- end 03

        ) -- end 02
    
    )  			
)

/* End of generated expression */

@haubourg
Copy link
Contributor

En fait non, c'est la version de développement d'aujourd'hui qui a des soucis de rendu, je referme

@haubourg haubourg reopened this Jul 18, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants