[Qgis-user] Problem using Model Inputs variable in an Select by expression in the model Designer

Alexandre Neto senhor.neto at gmail.com
Mon Aug 23 15:09:24 PDT 2021


There's some missing spaces in the expression, but I think you got it.

A segunda, 23/08/2021, 23:07, Alexandre Neto <senhor.neto at gmail.com>
escreveu:

> I am a bit late, and Charles already provided a working solution, but
> don't forget the extremely useful function eval.
>
> The function as is will compare fieldname to fieldname (returning true)
> and then try to concatenate the string '2' to it...
>
> @NamelengthField != @NamelengthField || '2'
>
>
> Try this:
>
> @NamelengthField || '!=' || @NamelengthField || '2'
>
> It will return the expression you need.
>
> 'length != length2'
>
>  Now, just wrap it on eval() to calculate it.
>
> eval(@NamelengthField || '!=' || @NamelengthField || '2')
>
> Best regards
>
> Alexandre Neto
> User support
> www.qcooperative.net
>
>
>
>
>
>
>
>
>
>
>
> A segunda, 23/08/2021, 18:53, Charles Dixon-Paver <charles at kartoza.com>
> escreveu:
>
>> Honestly I have no idea 😂
>>
>> I mean, of course what is happening is QGIS is needing to identify a
>> field from a text string, and it's even possible that with some convoluted
>> chain of escape characters or funky regex the process could correct itself
>> and "just work".
>>
>> In all likelihood you could have just stumbled onto some obscure bug in
>> the underlying processing API where the context of that field object get's
>> dropped or orphaned when  trying to access it.
>>
>> My assumption is that using attribute() just compensates for whatever is
>> going on under the hood by reinstantiating the context behind the field
>> object, or at the very least provides a robust interface for referencing it
>> ¯\_(ツ)_/¯
>>
>> I would definitely call it a work around though
>>
>> On Mon, 23 Aug 2021 at 18:52, Nicolas Cadieux <
>> njacadieux.gitlab at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> if(attribute(to_string( @NamelengthField )) != "LENGTH2", TRUE, FALSE )
>>>
>>> ("LENGHT2" is an existing field and @NamelengthField was a model input
>>> string.)
>>>
>>> This worked  for me!   If you have the time, please explain why I needed
>>> the *attribute()* function for this to work.  I looked in the
>>> documentation and did not find it very clear.
>>>
>>> Thanks a million you saved my butt!
>>>
>>> Nicolas
>>>
>>>
>>> On 2021-07-20 5:53 a.m., Charles Dixon-Paver wrote:
>>>
>>> Hi Nicholas,
>>>
>>> I haven't had time to dig into this extensively or encountered this
>>> particular issue, but I would suggest trying to "force" the expression to
>>> retrieve the correct info regardless of context using something like this:
>>>
>>> with_variable('Length2',  to_string(@NamelengthField) || '2',
>>> if(attribute(to_string(@NamelengthField)) != attribute(@Length2), TRUE,
>>> FALSE))
>>>
>>> That's probably an extreme example but hopefully it illustrates my
>>> point. If you want to share a sample dataset/ model I can try to have a
>>> look at how to resolve it.
>>>
>>> Regards
>>>
>>> On Tue, 20 Jul 2021 at 10:46, Richard McDonnell <
>>> richard.mcdonnell at opw.ie> wrote:
>>>
>>>> Nicolas,
>>>>
>>>> I have not looked at this in too much detail, but at a quick glance,
>>>> could it not be the fact that you should be using the newly created fields?
>>>> As in instead of *@NamelengthField != @NamelengthField || '2'*, should
>>>> it not be more like your previous example *Length != Length2*
>>>>
>>>>
>>>>
>>>> Regards,
>>>>
>>>>
>>>>
>>>> Richard
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ——
>>>> Richard McDonnell MSc GIS, FME Certified Professional
>>>> *FRM Data Management*
>>>>
>>>> ——
>>>> Oifig na nOibreacha Poiblí
>>>> Office of Public Works
>>>>
>>>> Sráid Jonathan Swift, Baile Átha Troim, Co na Mí, C15 NX36
>>>> Jonathan Swift Street, Trim, Co Meath, C15 NX36
>>>> ——
>>>> M +353 87 688 5964 T +353 46 942 2409
>>>> https://gov.ie/opw
>>>>
>>>> ——
>>>> To send me files larger than 30MB, please use the link below
>>>> https://filetransfer.opw.ie/filedrop/richard.mcdonnell@opw.ie
>>>>
>>>> Email Disclaimer:
>>>> https://www.gov.ie/en/organisation-information/439daf-email-disclaimer/
>>>>
>>>> *From:* Qgis-user <qgis-user-bounces at lists.osgeo.org> *On Behalf Of *Nicolas
>>>> Cadieux
>>>> *Sent:* 20 July 2021 09:27
>>>> *To:* Qgis Users List <qgis-user at lists.osgeo.org>
>>>> *Subject:* Re: [Qgis-user] Problem using Model Inputs variable in an
>>>> Select by expression in the model Designer
>>>>
>>>>
>>>>
>>>> Hi,
>>>>
>>>> Does anyone have an idea?
>>>>
>>>> Nicolas Cadieux
>>>>
>>>> https://gitlab.com/njacadieux
>>>>
>>>>
>>>>
>>>> Le 8 juill. 2021 à 01:17, Nicolas Cadieux <njacadieux.gitlab at gmail.com>
>>>> a écrit :
>>>>
>>>> 
>>>>
>>>> Hi,
>>>>
>>>> I am creating a model that fixes Network files before they are used in
>>>> the QGIS Network analysis (Shortest path) tools.
>>>>
>>>> This is my work flow:
>>>>
>>>>    1. Create a "Length" field (value) and calculate $length in the
>>>>    field calculator
>>>>    2. Split the Multipart lines into Singlepart lines
>>>>    3. Create a "Length*2*" field (value) and calculate $length in the
>>>>    field calculator
>>>>    4. Select by expression Length != Length2.  This basically gives me
>>>>    a selection of line that have been modified by the Multipart to Singlepart
>>>>    algorithm. (I get 8 results)
>>>>
>>>> This works well
>>>>
>>>> The problem is when I create and Input String to let the user create a
>>>> "Length" field.  This become a variable called @NamelengthField. My work
>>>> flow become:
>>>>
>>>>    1. User input "Length" in the Model input. (@NamelengthField)
>>>>    2. Create a "Length" field using  @NamelengthField (as
>>>>    pre-calculated value) and calculate $length in the field calculator: This
>>>>    is OK
>>>>    3. Split the Multipart lines into Singlepart lines: This is OK
>>>>    4. Create a "Length2" field using  @NamelengthField ||'2'  (as
>>>>    pre-calculated value) and calculate $length in the field calculator: This
>>>>    is OK this field (Length2) is created and calculated properly.
>>>>    5. I get stuck  when I try Select by expression using
>>>>    @NamelengthField != @NamelengthField || '2' (as pre-calculated value) (I
>>>>    get all lines back) and the test does not work.
>>>>
>>>> I tried stuff like
>>>>
>>>> @NamelengthField != (@NamelengthField || '2')
>>>>
>>>> '@NamelengthField != @NamelengthField || '2''
>>>>
>>>> "@NamelengthField != @NamelengthField || '2'"
>>>>
>>>> "@NamelengthField"|| !=|| "@NamelengthField || '2'"
>>>>
>>>> Even simple @NamelengthField = 5.286365157529550 (which should extract
>>>> exactly one value).
>>>>
>>>> Any ideas?
>>>>
>>>> Nicolas
>>>>
>>>> QGIS 3.18.2 on Windows 10
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Nicolas Cadieux
>>>>
>>>> https://gitlab.com/njacadieux
>>>>
>>>> _______________________________________________
>>>> Qgis-user mailing list
>>>> Qgis-user at lists.osgeo.org
>>>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>>>
>>> --
>>> Nicolas Cadieuxhttps://gitlab.com/njacadieux
>>>
>>> _______________________________________________
>> Qgis-user mailing list
>> Qgis-user at lists.osgeo.org
>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20210823/c9f5818d/attachment.html>


More information about the Qgis-user mailing list