Geolocation 如何在KRL规则中获取用户位置?

Geolocation 如何在KRL规则中获取用户位置?,geolocation,krl,Geolocation,Krl,如何在KRL规则中获取用户位置 方法是什么 使用这种方法的优点或缺点是什么 下面是一个简单的例子 rule locations is active { select using ".*" setting () pre { whereareyou = location:region(); msg = << #{whereareyou} >>; } notify("

如何在KRL规则中获取用户位置

  • 方法是什么
  • 使用这种方法的优点或缺点是什么

    • 下面是一个简单的例子

      rule locations is active {
           select using ".*" setting ()
           pre {
             whereareyou = location:region();
             msg = << 
               #{whereareyou}    
             >>;
           }
           notify("I think you live in", msg) with sticky = true;
       }
      
      规则位置处于活动状态{
      选择使用“*”设置()
      前{
      wherereyou=位置:region();
      味精=>;
      }
      用sticky=true通知(“我认为你住在”,msg);
      }
      
      这是文件

      您将发现的问题是,有时ip并不真正代表用户的真实位置,因为用户可能正在使用代理。此外,对于大多数ISP,ip注册到某个位置,ISP集线器不是在任何给定时刻使用ip的直接位置


      随着浏览器中HTML5和位置API的出现,将来可能可以获得更精确的位置,但这在KRL中尚未实现。

      HTM5浏览器位置现在可用,但需要一些javascript才能实现。这是一个使用浏览器位置API的稍旧应用程序。这可能会更新为不使用表单,但此处仅供参考:

      ruleset a8x47 {
        meta {
          name "WikiNearMe"
          description <<
            Shows Wikipedia content near the user.
          >>
          author "TubTeam"
          logging off
        }
      
        dispatch {
          domain "wikipedia.org"
        }
      
        global {
          datasource placearticles:JSON <- "http://ws.geonames.org/findNearbyWikipediaJSON";
        }
      
        rule getlocation is active {
          select when pageview "/wiki/" setting ()
          pre { 
            form = <<
              <div id="my_div">
                <form id="nearmeform" onsubmit="return false" style="display:none;">
                  <input type="text" name="lat" id="nearmelat"/>
                  <input type="text" name="lon" id="nearmelon"/>
                  <input type="submit" value="Submit" />
                </form>
                <div id="nearmelinks" style="text-align:left;">
                  <h2>Nearby Links</h2>
                </div>
              </div>
            >>;
          }
          // notify("Hello World", "This is a sample rule.");
          emit <<
      
          navigator.geolocation.getCurrentPosition(function(position){
            $K("#nearmelat").val(position.coords.latitude);
            $K("#nearmelon").val(position.coords.longitude);
            $K("#nearmeform").submit();
            //alert("lat: " + position.coords.latitude + " lon: " + position.coords.longitude);
          });
          >>
          {
          append("#siteNotice", form);
          watch("#nearmeform", "submit");
          }
        }
        rule shownearby is active {
          select when web submit "#nearmeform"
          foreach datasource:placearticles({"lat":page:param("lat"), "lng":page:param("lon"), "style":"full", "formatted":"true"}).pick("$..geonames") setting (item)
          pre {
           title = item.pick("$..title");
           link = item.pick("$..wikipediaUrl");
          }
          append("#nearmelinks", "<a href='http://#{link}'>#{title}</a><br/>");
        }
      }
      
      规则集a8x47{
      元{
      名字“WikiNearMe”
      说明>
      作者“TubTeam”
      注销
      }
      派遣{
      域名“wikipedia.org”
      }
      全球的{
      数据源placearticles:JSON;
      }
      //通知(“你好,世界”,“这是一个示例规则”);
      发射>
      {
      附加(“现场通知”,表格);
      手表(“近表”、“提交”);
      }
      }
      规则已激活{
      在web提交时选择“#nearmeform”
      foreach数据源:placearticles({“lat”:page:param(“lat”),“lng”:page:param(“lon”),“style:“full”,“formatted:“true”})。选择($…geonames)设置(项)
      前{
      标题=项目。选择($…标题);
      link=item.pick($…wikipediaUrl”);
      }
      附加(#nearmelinks“,“
      ”); } }