Java for calculating the distance between two coordinates | XM Community
Skip to main content
Solved

Java for calculating the distance between two coordinates

  • April 2, 2019
  • 5 replies
  • 87 views

Forum|alt.badge.img+1
Hello, I have two coordinates that a respondent reported: * A: 32.780491, -96.847283 * B: 32.764811, -96.831151 So, maybe x1 = 32.780491 y1 = -96.847283 x2 = 32.764811 y2 = -96.831151 Are there any ways to calculate the distance between these two points, and record the value of distance (perhaps in miles) for Qualtrics embedded data? Thank you very much in advance.

Best answer by Anonymous

> @jhwang said: > @Shashi, > > Thank you for your suggestion. But I still cannot see the embedded data value of the distance. > > Here is my code: > > Qualtrics.SurveyEngine.addOnReady(function() > { > var R = 6371; > var lat2 = Number("${e://Field/t1_dx}"); > var lat1 = Number("${e://Field/t1_ox}"); > var lon2 = Number("${e://Field/t1_dy}"); > var lon1 = Number("${e://Field/t1_oy}"); > > function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { > var R = 6371; // Radius of the earth in km > var dLat = deg2rad(lat2-lat1); // deg2rad below > var dLon = deg2rad(lon2-lon1); > var a = > Math.sin(dLat/2) * Math.sin(dLat/2) + > Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * > Math.sin(dLon/2) * Math.sin(dLon/2) > ; > var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); > var d = R * c; // Distance in km > return d; > } > > function deg2rad(deg) { > return deg * (Math.PI/180) > } > > Qualtrics.SurveyEngine.setEmbeddedData("dist1", getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) ); > > }); > > Here is more detailed information of variables: > * Coordinates of origin: (`t1_ox`, `t1_oy`) > * Coordinates of destination: (`t1_dx`, `t1_dy`) > > I checked if the embedded data of `t1_ox` ~ `t1_dy` work, and confirmed that they have no issues. > > However, I cannot see the embedded data of `dist1`. > > Thank you. Change the last line to: `Qualtrics.SurveyEngine.setEmbeddedData("dist1", getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) ); ` Hope you have created an embedded data dist1 in the survey flow before this question

5 replies

  • 0 replies
  • April 2, 2019
Hi @jhwang , You can use Math operation to do this.

Forum|alt.badge.img+1
  • Author
  • 22 replies
  • April 3, 2019
Hi @Shashi, I tried to calculate the distance between two coordinates, but I failed. Here is my code: Qualtrics.SurveyEngine.addOnReady(function() { var R = 6371; var t1_dx = parseFloat("${e://Field/t1_dx}"); var t1_ox = parseFloat("${e://Field/t1_ox}"); var t1_dy = parseFloat("${e://Field/t1_dy}"); var t1_oy = parseFloat("${e://Field/t1_oy}"); var latDistance = Math.toRadians(t1_dx - t1_ox); var lonDistance = Math.toRadians(t1_dy - t1_oy); var a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2) + Math.cos(Math.toRadians(t1_ox)) * Math.cos(Math.toRadians(t1_dx)) * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var distance = (R * c * 1000) / 1609.344; // convert to miles var height = 0.00; var distance2 = Math.pow(distance, 2) + Math.pow(height, 2); var dist1 = Math.sqrt(distance2); Qualtrics.SurveyEngine.setEmbeddedData("dist1", dist1); }); Could you or anyone please correct my code? Thank you very much.

  • 0 replies
  • April 3, 2019
Hi @jhwang Please use the below code: function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { var R = 6371; // Radius of the earth in km var dLat = deg2rad(lat2-lat1); // deg2rad below var dLon = deg2rad(lon2-lon1); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2) ; var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; // Distance in km return d; } function deg2rad(deg) { return deg * (Math.PI/180) }

Forum|alt.badge.img+1
  • Author
  • 22 replies
  • April 3, 2019
@Shashi, Thank you for your suggestion. But I still cannot see the embedded data value of the distance. Here is my code: Qualtrics.SurveyEngine.addOnReady(function() { var R = 6371; var lat2 = Number("${e://Field/t1_dx}"); var lat1 = Number("${e://Field/t1_ox}"); var lon2 = Number("${e://Field/t1_dy}"); var lon1 = Number("${e://Field/t1_oy}"); function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { var R = 6371; // Radius of the earth in km var dLat = deg2rad(lat2-lat1); // deg2rad below var dLon = deg2rad(lon2-lon1); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2) ; var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; // Distance in km return d; } function deg2rad(deg) { return deg * (Math.PI/180) } Qualtrics.SurveyEngine.setEmbeddedData("dist1", d); }); Here is more detailed information of variables: * Coordinates of origin: (`t1_ox`, `t1_oy`) * Coordinates of destination: (`t1_dx`, `t1_dy`) I checked if the embedded data of `t1_ox` ~ `t1_dy` work, and confirmed that they have no issues. However, I cannot see the embedded data of `dist1`. Thank you.

  • 0 replies
  • Answer
  • April 3, 2019
> @jhwang said: > @Shashi, > > Thank you for your suggestion. But I still cannot see the embedded data value of the distance. > > Here is my code: > > Qualtrics.SurveyEngine.addOnReady(function() > { > var R = 6371; > var lat2 = Number("${e://Field/t1_dx}"); > var lat1 = Number("${e://Field/t1_ox}"); > var lon2 = Number("${e://Field/t1_dy}"); > var lon1 = Number("${e://Field/t1_oy}"); > > function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { > var R = 6371; // Radius of the earth in km > var dLat = deg2rad(lat2-lat1); // deg2rad below > var dLon = deg2rad(lon2-lon1); > var a = > Math.sin(dLat/2) * Math.sin(dLat/2) + > Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * > Math.sin(dLon/2) * Math.sin(dLon/2) > ; > var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); > var d = R * c; // Distance in km > return d; > } > > function deg2rad(deg) { > return deg * (Math.PI/180) > } > > Qualtrics.SurveyEngine.setEmbeddedData("dist1", getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) ); > > }); > > Here is more detailed information of variables: > * Coordinates of origin: (`t1_ox`, `t1_oy`) > * Coordinates of destination: (`t1_dx`, `t1_dy`) > > I checked if the embedded data of `t1_ox` ~ `t1_dy` work, and confirmed that they have no issues. > > However, I cannot see the embedded data of `dist1`. > > Thank you. Change the last line to: `Qualtrics.SurveyEngine.setEmbeddedData("dist1", getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) ); ` Hope you have created an embedded data dist1 in the survey flow before this question