March 1, 200718 yr I am trying to implement this Formula into my solution and am getting an invalid result. It is a Haversine Function and below is what I created as a custom Function with: Can any one figure out what I am doing wrong here? //Computes the Distance between two points on Earth's Surface // input: // lat1,long1,lat2,long2 = lat and long of two points, in DECIMAL DEGREES // units = "miles" or "km" // output: Distance between the two points in miles or kilometers Let ([ D = Case( Trim(Lower(Left(units;1))) = "m"; 3958.75; 6367.45 ); // Diameter of Earth in miles or km lat1R = Radians(lat1); lat2R = Radians(lat2); long1R = Radians(long1); long2R = Radians(long2); dlat = lat2R - lat1R; dlong = long2R - long1R; a = (Sin(dlat/2))^2 + Cos(lat1R) * Cos(lat2R) * (Sin(dlong/2))^2; c = 2 * Atan(Sqrt(a)/Sqrt(1-a)); result = D * c ]; result ) My fields are; MP_HOME_LATTITUDE MP_HOME_LONGITUDE VF_GPS_LATTITUDE VF_GPS_LONGITUDE My result Field with Calculation is: MILES = Haversine ( MILES ;MP_HOME_LATTITUDE; VF_GPS_LATTITUDE; MP_HOMELONGITUDE; VF_GPS_LONGITUDE ) Does any one know what I am missing here to get a valid result? My Calc settings are - Do not Evaluate if Referenced Fields are Empty (CHECKED) and Do not replace existing value for field (UNCHECKED) and Always Validate is set to on. Thanks for any help on this!
March 1, 200718 yr I don't see anything obvious - except perhaps the order of the input parameters does not match the order as defined in the function? Why don't you use a calculation field instead of auto-enter? And what is there to validate?
March 1, 200718 yr Author Comment, I sent a Reply, but do not see it, so will try again. Did you get this to work? I have tried everything and this is not a complex function. It has to be something simple that I am doing wrong. I changed the Validation and what do you mean by Calculation Field? Thanks
March 1, 200718 yr Can you post a file showing the problem? I don't know what counts as a valid result, so if it's not obvious, be sure to point it out. Calculation fields
March 1, 200718 yr Author Here is what I am trying to do. Also, just remember that the lat's and long's must be given in degrees and not minutes. Thanks for the Help Comment! Haversine.zip
March 1, 200718 yr OK. You have a field named 'miles'. And you are calling your function like this: Haversine ( Latitude1 ; Longitude1 ; Latitude2 ; Longitude2; miles;) Which means that the 'units' parameter is the value of the field 'miles'. Therefore you are getting the correct result, only in kilometers. Either call the function like this: Haversine ( Latitude1 ; Longitude1 ; Latitude2 ; Longitude2; "miles" ) or define a field for units, then: Haversine ( Latitude1 ; Longitude1 ; Latitude2 ; Longitude2; Units )
March 1, 200718 yr I tried posting this earlier, but I was having problems with the website. Comment pretty much summed up what i was ging to tell you to do. I took it a different route, by choosing to send R (radius of the earth value in either miles or km) as part of the CF parameter. Its just made more sense to me but in the end its just personal preference. Haversine_Function.zip
March 1, 200718 yr Author Ok. Thanks guys. I figured out what I was doing. I was trying to perform the calc on a related field from another table and when I did a cut and paste, it worked fine. Only thing is that I did a mapquest and google map on two different addresses that both showed as being 130 miles a part. When I looked up the Lat and Long from http://www.gpsvisualizer.com/geocode It gave me a 166.68 miles. Now I wonder who is right and who is wrong. But not your guys problem, just an observation. Thanks again for your help!
March 1, 200718 yr There will be always differences between various methods of computation. The earth's radius, in particular, is a difficult choice.
Create an account or sign in to comment