builder patterns are very common now because they make maintainability a lot easier, (i.e. if god forbid someone accidentally swapped vars in list of inputsof the same type), and secondly because you can use an annotation library to generate the boilerplate for you, you don't have to write any of it.
Although agreed it's used when you start to get to more parameters. I didn't check but it's possible there are a lot of null/default values like projection or something.
You can also have cached static instances(assuming immutability), eg Point.fromLonLat(0,0) can always return the same instance, whereas new Point(0,0) must allocate and return a new instance.
But why design Point so that you have to do:
`Point point = new Point.Builder() .latitude(25.2012544) .longitude(55.2569389) .build();`
Instead of:
`Point point = new Point(25.2012544,55.2569389)`
Cool project btw... working with geospatial data can be fun.