石灰调查 - 地理位置响应(城市,国家)参数返回结束URL

时间:2017-01-25 10:41:59

标签: javascript geolocation limesurvey

LimeSurvey - 点击调查网址,要求用户允许或屏蔽位置

即。地理定位脚本运行&返回当前城市&国家到底url。

是否可能。下面是我的脚本,如何在石灰调查中实现这一点。

任何建议,请

<script type="text/javascript"> 

  var geocoder;

  if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
  } 

   function initMap(){
    }

   //Get the latitude and the longitude;
   function successFunction(position) {
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
   codeLatLng(lat, lng)
 }

 function errorFunction(){
alert("Geocoder failed");
}

function codeLatLng(lat, lng) {

alert("Latitude: "+lat);
alert("Longtude: "+lng);

geocoder = new google.maps.Geocoder();

var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
  //console.log(results)      
    if (results[1]) {
     //formatted address                
     alert(results[0].formatted_address)         
    //find country name
    for (var i=0; i<results[0].address_components.length; i++) {
      for (var b=0;b<results[0].address_components[i].types.length;b++) {

        //there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate
            if (results[0].address_components[i].types[b] == "administrative_area_level_1") {
                //this is the object you are looking for
                city= results[0].address_components[i];
                break;
            }
            if(results[0].address_components[i].types[b] == 'country'){
              country = results[0].address_components[i];
              break;
            }
      }
    }        
    //city data
    alert(city.short_name + " " + city.long_name)
    //country data
    alert(country.short_name + " " + country.long_name)

    } else {
      alert("No results found");
    }
  } else {
    alert("Geocoder failed due to: " + status);
  }
});
 }   </script> 
<script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&callback=initMap"
type="text/javascript"></script>

有任何帮助吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的代码有效(否则:先检查您的代码)。我只谈到LimeSurvey部分。

  1. 创建多文字问题类型:
    • 代码GEO
    • 添加2个子问题代码CITY和CONTRY
  2. 添加课程(使用高级设置)hidden,然后问题就不会显示。
  3. 停用HTML编辑器并将您的脚本放入jquery ready(备用解决方案使用addScriptToQuestion插件)
  4. 在js代码中的每个{之后添加空格或换行符(以及每个}之前的空格)
  5. 替换你的最后一次警报(你有city.data和coutry.data)
    • $("#answer{SGQ}CITY").val(city.short_name + " " + city.long_name); for city
    • $("#answer{SGQ}COUNTRY").val(country.short_name + " " + country.long_name);国家/地区
  6. 您可以在调查中使用{GEO_CITY}和{GEO_COUNTRY}(在此页之后)
  7. 然后您可以在您的网址http://example.org/?city={GEO_CITY}&country={GEO_COUNTRY}
  8. 中使用它

    使用LimeSurvey 2.50及更高版本(否则需要一些javascript来隐藏问题)

答案 1 :(得分:1)

这个缩写版本在我置于隐藏的多个短文本问题的来源时适用于我,如Denis建议的那样:`

var geocoder;

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 

//Get the latitude and the longitude;
function successFunction(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    codeLatLng(lat, lng)
}

function errorFunction(){
    console.log("Geocoder failed");
}

function codeLatLng(lat, lng) {

    geocoder = new google.maps.Geocoder();

    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({ 
    'latLng': latlng },
    function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
                for (var i=0; i<results[0].address_components.length; i++) {
                    for (var b=0;b<results[0].address_components[i].types.length;b++) {
                        // Find city name
                        // There are different types that might hold a city
                        // "locality" works for most of North America
                        // See here for types - https://developers.google.com/maps/documentation/geocoding/intro
                        if (results[0].address_components[i].types[b] == "locality") {
                            //this is the object you are looking for
                            city= results[0].address_components[i];
                            break;
                        }
                        // Find country name
                        if(results[0].address_components[i].types[b] == 'country'){
                            country = results[0].address_components[i];
                            break;
                        }
                    }
                }        
                // City data
                //console.log(city.short_name + " " + city.long_name);
                $("#answer{SGQ}CITY").val(city.long_name);
                // Country data
                //console.log(country.short_name + " " + country.long_name);
                $("#answer{SGQ}COUNTRY").val(country.long_name);
            } 
            else {
                console.log("No results found");
            }
        } else {
            console.log("Geocoder failed due to: " + status);
        }
    });
}   

`