non sono un grande esperto di espressioni regolari, ma se nel tuo primo pattern correggi come qua sotto, dovresti avere già i valori dei tag "longitudine" e "latitudine" nell'array che ti restuisce preg_match_all

Codice PHP:
$pattern '/\[TAG1 tipo="coordinate" latitudine="(\d*\.?\d+)" longitudine="(\d*\.?\d+)"/i'
tu invece fai la stessa cosa due volte e non mi sembra molto efficiente