That 1MB rule of thumb is a guideline about the total wire serialized size of the top-level message.
If you have a very large data set and want each point to be a message, theres a number of different approaches that can be taken for the top-level-set-of-messages instead of having a single top-level message, including length-prefixed serialization (the functions named like parseDelimited), RecordIO, Riegeli, etc
Note that the true limit for what the max encoded size is 2GB, and many people do use Protobuf to serialize individual messages up to which are much larger than 1MB while still being less than 2 GB. The listed documentation is only about what Protobuf is best optimized for, where notably we don't really try to support parsing a subset of a `LocationArray` from your example; other formats would let you do parallelized parsing / mapreduce style operations over the data sets and have data sets which are much larger than 2GB.