【问题标题】:How to send Geolocation from google form?如何从谷歌表单发送地理位置?
【发布时间】:2021-02-18 12:38:33
【问题描述】:

任何人都需要我的帮助。我正在构建一个谷歌表单,我需要将地理编码添加到表单中,以便用户可以使用填写的表单发送他们的位置。所以我从 Maxi Research (link) 那里得到了这段代码。我做的一切都是正确的,但是当用户必须单击地理位置 webapp 链接以发送位置坐标时,我收到错误(“异常:找不到名为 Index 的 HTML 文件。(第 2 行,文件“代码")"

我需要帮助来识别代码中的问题。谢谢

function doGet() {
 return HtmlService.createHtmlOutputFromFile('Index');
}

function getLoc(value) {
 var destId = FormApp.getActiveForm().getDestinationId() ;
 var ss = SpreadsheetApp.openById(destId) ;
 var respSheet = ss.getSheets()[0]  ;
 var data = respSheet.getDataRange().getValues() ; 
 var headers =  data[0]   ;
 var numColumns = headers.length ;  
 var numResponses = data.length;
 var c=value[0];
 var d=value[1];
 var e=c + "," + d ;
 
 // the script will add device geocode data in last submit data row by clicking the link on confirmation page that shows up after hitting the submit button
 // geocode data here consists of 3 columns : time to click the link, longitude & latitude and address (using reverse geocode) 
 // as long as clicking the link is done before next respondent submit button, data will be entered in the right row.
 // however particularly for the case of multiple devices that submit data at about the same time then whichever device clicks the link closer to the last submit row timestamp, their geodata will be entered in the last submit data row.
 // leaving geocode column in the row above empty. In this case the geocode data will be in red font 
 // If sometime later another device click the link then the geodata will be entered in closest missing geodata row. The data will also be in red font
 // Therefore for red font data you may want to check manually after completion for correct geodata entry. In the questionnaire add question about address to help checking.

    if (respSheet.getRange(1,numColumns).getValue()=="GeoAddress") {


//fill data for second respondents onwards no missing geo data
// time here is Jakarta, you may need to change time to your local time (in GMT)

    if (respSheet.getRange(numResponses,numColumns-2).getValue()=="" && respSheet.getRange(numResponses-1,numColumns-2).getValue()!="" ){
    respSheet.getRange(numResponses,numColumns-2).setValue(Utilities.formatDate(new Date(), "GMT+7", "MM/dd/yyyy HH:mm:ss"));
    respSheet.getRange(numResponses,numColumns-1).setValue(e);
    var response = Maps.newGeocoder().reverseGeocode(value[0], value[1]);
    f= response.results[0].formatted_address;
    respSheet.getRange(numResponses,numColumns).setValue(f);    
    }

//fill data with previous geo data missing. red font

    else if (respSheet.getRange(numResponses,numColumns-2).getValue()=="" && respSheet.getRange(numResponses-1,numColumns-2).getValue()=="" ){
    respSheet.getRange(numResponses,numColumns-2).setValue(Utilities.formatDate(new Date(), "GMT+7", "MM/dd/yyyy HH:mm:ss")).setFontColor("red");
    respSheet.getRange(numResponses,numColumns-1).setValue(e).setFontColor("red");
    var response = Maps.newGeocoder().reverseGeocode(value[0], value[1]);
    f= response.results[0].formatted_address;
    respSheet.getRange(numResponses,numColumns).setValue(f).setFontColor("red");    
    }
    
//to fill missing previous data. red font    
    else if (respSheet.getRange(numResponses,numColumns-2).getValue()!=""){
        for (i = 0; i < numResponses; i++) {
    if (respSheet.getRange(numResponses-i,numColumns-2).getValue()=="") { 
    
    respSheet.getRange(numResponses-i,numColumns-2).setValue(Utilities.formatDate(new Date(), "GMT+7", "MM/dd/yyyy HH:mm:ss")).setFontColor("red");
    respSheet.getRange(numResponses-i,numColumns-1).setValue(e).setFontColor("red");
    var response = Maps.newGeocoder().reverseGeocode(value[0], value[1]);
    f= response.results[0].formatted_address;
    respSheet.getRange(numResponses-i,numColumns).setValue(f).setFontColor("red");    
    break; }
    }
    
    }
    }
    
    else if (respSheet.getRange(1,numColumns).getValue()!="GeoAddress") {
//create labels in first row    
    respSheet.getRange(1,numColumns+1).setValue("GeoStamp");
    respSheet.getRange(1,numColumns+2).setValue("GeoCode");
    respSheet.getRange(1,numColumns+3).setValue("GeoAddress");
//fill data for first respondent 
    if (numResponses==2) {
    respSheet.getRange(numResponses,numColumns+1).setValue(Utilities.formatDate(new Date(), "GMT+7", "MM/dd/yyyy HH:mm:ss"));
    respSheet.getRange(numResponses,numColumns+2).setValue(e);
    var response = Maps.newGeocoder().reverseGeocode(value[0], value[1]);
    f= response.results[0].formatted_address;
    respSheet.getRange(numResponses,numColumns+3).setValue(f);    
    }
    else if (numResponses > 2){
    respSheet.getRange(numResponses,numColumns+1).setValue(Utilities.formatDate(new Date(), "GMT+7", "MM/dd/yyyy HH:mm:ss")).setFontColor("red");
    respSheet.getRange(numResponses,numColumns+2).setValue(e).setFontColor("red");
    var response = Maps.newGeocoder().reverseGeocode(value[0], value[1]);
    f= response.results[0].formatted_address;
    respSheet.getRange(numResponses,numColumns+3).setValue(f).setFontColor("red");
    }
    
    }
    }
<!DOCTYPE html>
<html>
<script>
(function getLocation() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(showPosition);
    }
})()
function showPosition(position) {
  var a= position.coords.latitude;
  var b= position.coords.longitude;
  var c=[a,b]
  getPos(c)
  function getPos(value) {
  google.script.run.getLoc(value);
 } 
}
</script>
<body> 
<p> GeoCode Entered </p>
</body>
</html>

【问题讨论】:

    标签: javascript html geolocation latitude-longitude


    【解决方案1】:

    也许这行得通: https://www.youtube.com/watch?v=J93uww0vMFY

    关于地理标记(地理标记和时间戳)谷歌表单的教程。添加有关提交 Google 表单的设备的纬度、经度和地址(街道名称和号码、城市、州、邮政编码和国家/地区)的信息。在谷歌表单中链接用户的位置。谷歌表单与谷歌地图的集成。

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多