How can I restructure a table of points with repeating lengthy text ids?
First, you shouldn't use those IDs in the database. To start off they're clearly a compound ID, with 


bigint (hex encoded)
uuid


The @@@ is a text-token. That means right off the bat you can make your table substantially smaller very easy.

ALTER TABLE foo
  ADD COLUMN id_uuid uuid,
  ADD COLUMN id_num bigint;


Now you need to populate it. (essentially we make sure you have 16 characters, prepend an x and then cast it to a bigint by proxy of ::bit(64))

UPDATE foo
SET id_num =
    (
      'x'
      || lpad(
        (regexp_match(id, '(.*?)@'))[0]
        , 16
        , '0'
      )
    )::bit(64)::bigint,
  id_uuid = (regexp_match(id, '.*@(.*)$'))[1]::uuid;


After this you could drop the original text id column. That's what you should do when you commit to a direction.

Now you have two id columns, but one of them is 16 bytes, the other is 8 bytes. compared to one text column that is 55 bytes (plus varlena overhead which is like 6 byts for you).

What you really want to do though is rewrite the table with these two columns at the start because that'll impact physical layout and make a big difference. Google for PostgreSQL Tetris for the reasons there..

At the point that you have two ids, and you can start to understand the data, the questions emerge.


Are both ids necessary, can I drop one and will it make it make difference
If they're both neccessary, can I store both of them as external vendor ids in a table and assign my own simplier int4 ids?


Depending on the answers to those questions you may want to structure some triggers so on insertion something (like a function you create) takes a text argument, decodes it into a composite type of (uuid,int) and assigns them to the new columns in one pass.

Moreover, you have another massive question here. This is a spatial problem. You have GPS coordinates. If you're talking about billion of rows, you may consider using a table like this until the routes are complete, and then migrating to a GIS solution with LINESTRINGS and PostGIS. Then you can map the routes in the database, and find what roads were traveled, how many miles the routes were, and place them on a map (or do other fancy goodness). The GIS solution makes the points columnar and gives you the ability to index them too.

You may want a consultant.