【问题标题】:Users input a location - how do I loop through database containing routes用户输入位置 - 我如何遍历包含路线的数据库
【发布时间】:2015-08-06 10:53:54
【问题描述】:

我有一个 mySql 数据库,其中包含由 lat 和 lng 指定的起始位置和结束位置以及起始日期和时间的路线。

然后我有一个网页(经典 asp),用户可以在其中使用 Google 地图 api 输入日期、时间和位置。

当用户输入一个位置时,我想循环访问数据库以查看在给定时间内是否有任何路线经过用户位置,然后显示结果,以便他可以选择他喜欢的路线。

我一直在查看 isLocationOnEdge,但我不知道如何使用它以及如何获取价值,以便我可以在我的 asp 中使用它。

我找到了这段代码,但正如我所说 - 不知道必须使用它,所以它适合我的问题:

function initialize() {
  var mapOptions = {
    zoom: 5,
    center: new google.maps.LatLng(24.886, -70.269),
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'),
  mapOptions);

  var cascadiaFault = new google.maps.Polyline({
    path: [
      new google.maps.LatLng(49.95, -128.1),
      new google.maps.LatLng(46.26, -126.3),
      new google.maps.LatLng(40.3, -125.4)
    ]
  });

  var myPosition = new google.maps.LatLng(43.0, -125.9, 10e-7);

  if (google.maps.geometry.poly.isLocationOnEdge(myPosition,     cascadiaFault)) {
    alert("Relocate!");
  }
}

google.maps.event.addDomListener(window, 'load', initialize);

有人可以帮助我吗?或者只是给出一些我可以遵循的提示?

【问题讨论】:

    标签: mysql google-maps-api-3 asp-classic


    【解决方案1】:

    好吧,显然google.maps.geometry.poly.isLocationOnEdge(myPosition, cascadiaFault) 将返回一个您可以测试的布尔值,所以我怀疑您只是想在 JavaScript 代码中生成一个值数组,类似于...

    <%
        Dim sql, c, joinLL, rs, conn
        sql = "SELECT lat, long, FROM myGeoTable WHERE condition = true "
        conn = Application("CONN_STRING")
    
        'Pass the string using RecordSet.GetString...
        Set rs = Server.CreateObject("ADODB.RecordSet")
        rs.Open sql, conn
        joinLL = "[new google.maps.LatLng(" & _
          rs.GetString(2, , ", ", "), new google.maps.LatLng(", "") & _
          "]"
        rs.Close
        Set rs = Nothing
    %>
    

    ...也许还有类似的东西来测试您的长/纬度列表...

        // joinLL is the variable from the VB Script...
        var pLongLat = <%= joinLL %>;
        var llPoint;
    
        foreach(llPoint in pLongLat) {
            if(google.maps.geometry.poly.isLocationOnEdge(llPoint, cascadiaFault)) { 
                //Do your processing
            }
        }
    

    查看 ADO RecordSet 方法 GetStringGetRows 可能值得您参考;它们非常有用且速度非常快。

    【讨论】:

    • 谢谢 - 但我还是不明白。首先,我必须为每条路线(StartLat、StartLng、EndLat、EndLng)至少有 4 个 latLong。也可以有viapoints(来自相关表)。我如何在不知道是否有 0、1 或更多通过点的情况下将所有内容放在一个数组中?我可以创建一个包含所有真实的 routeId 的新列表吗?因为那个列表我可以写在一个隐藏的字段中并在我的asp中使用。当我这样做时:LL = rs.GetString(2, , ", ", "), new google.maps.LatLng(", "")
    • 我得到这个结果:[55.566962, 10.094465), new google.maps.LatLng(, ), new google.maps.LatLng(, ), new google.maps.LatLng(, ), new google.maps.LatLng(56.120638, 10.146379), 新 google.maps.LatLng(55.566962, 10.094465), 新 google.maps.LatLng(]
    • 您需要从数据中排除没有经纬度的所有内容(即它们为空或无效的地方),这很可能是您获得new google.maps.LatLng(, ) 的原因。你有没有把 JavaScript 放在我帖子末尾的 HTML 页面中?您必须将它放在一些 &lt;script&gt; 标记之间并使用它执行您的处理(即任何您想做的事情)。
    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2018-10-06
    • 2023-04-08
    • 1970-01-01
    • 2019-04-20
    • 2019-09-30
    • 2015-11-14
    相关资源
    最近更新 更多