units in GreatCircle.sphericalDistance()?
jx5c opened this issue · 2 comments
The GreatCircle.sphericalDistance() expects parameters in the units of radians, but several invocations of GreatCircle.sphericalDistance() seem using latitude and longitude in the units of degree:
in Route.java, two invocations:
double timeLimitBase = GreatCircle.sphericalDistance(toLat, toLon, fromLat, fromLon)
/ worstConvoySpeed;
double crowsPathDistance = GreatCircle.sphericalDistance(toLat, toLon, nextLoc.getY(), nextLoc.getX());
in Road.java, two invocations:
kilometers += GreatCircle.sphericalDistance(prevPoint.getY(), prevPoint.getX(), thisPoint.getY(), thisPoint.getX());
double thisLength = GreatCircle.sphericalDistance(prevLat, prevLon, thisLat, thisLon);
These four statements are all invoked with arguments in units of degree.
Also, in the Road.java file, in the statement after the last invocation above,
if (thisLength >= kilometers) {
it compares kilometers with thisLength. The variable thisLength should represent arc distance, in the units of radians, not kilometers.
Jian
Thanks for updates - interesting tool you must be using, is that part of your research?
In fact, it is. I developed a prototype that supports adding semantic information from the real-world context to program elements, thereby enable checking more constraints/rules.
In your project, what I did was adding some units information to several files, e.g., geo.java, and LatLonPoint.java, and run an inference algorithm to propagate the units. Then, the prototype checked the whole project, and revealed some candidate errors. Up to now, I am still trying to understand the details of OpenMap. I hope I can contribute more in the future.
I have used my prototype for a few other Geographic applications, OpenMap is actually the largest one.