Large table with geospatial data - slow queries during updates
You can use INSERT DELAYED to avoid blocking SELECTs:


  When a client uses INSERT DELAYED, it gets an okay from the server at
  once, and the row is queued to be inserted when the table is not in
  use by any other thread.
  
  Another major benefit of using INSERT DELAYED is that inserts from
  many clients are bundled together and written in one block. This is
  much faster than performing many separate inserts.


Unfortunately, there is no equivalent for UPDATE. You can do REPLACE DELAYED (which first deletes the existing row if one exists and then inserts a new row), but that's probably not useful to you.

A few other maybe useful optimizations: 

innodb_flush_method= O_DIRECT

innodb_flush_log_at_trx_commit= 2

Maybe consider if the geometry types (POINT) would be useful instead of your lat, lon doubles. Geometry types are indexable in InnoDB as of MariaDB 10.2.

Looking at your configuration, I think your query cache is set quite large. (Though it might make sense in your specific case, I don't know.) This can result in degraded performance due to lock contention, as the query cache is locked while it's updated.

I can see how the query cache might make sense in your use case if you're not writing to the database all that frequently. Note however that MySQL is retiring support for the query cache in MySQL 8.0. I don't know what the fate of the query cache is on the MariaDB side.