当前位置: 首页 > 知识库问答 >
问题:

谷歌地图中的查询

司空通
2023-03-14

我想创建一个页面,用户在其中输入一个位置,我搜索这个位置,我搜索数据库中属于该位置的所有对象,我还搜索距离该位置一英里以内的所有对象。我已经创建了一个结构,该结构允许我查找自动完成的位置,并使用以下代码在地图上指出:

function initialize() {
    var myCoordsLenght = 6;
  var mapOptions = {
    center: new google.maps.LatLng(46.018151,8.956521),
    zoom: 17
  };

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

  var input = /** @type {HTMLInputElement} */(
      document.getElementById('pac-input'));


  var autocomplete = new google.maps.places.Autocomplete(input);
  autocomplete.bindTo('bounds', map);

  var infowindow = new google.maps.InfoWindow();


  var marker = new google.maps.Marker({
    map: map,
    draggable: true
  });


  var circle = new google.maps.Circle({
  map: map,
  radius: 16093,    // 10 miles in metres
  fillColor: '#AA0000'
});
circle.bindTo('center', marker, 'position');


    google.maps.event.addListener(marker, 'dragend', function(evt){

    document.getElementById('latitude').value= evt.latLng.lat().toFixed(myCoordsLenght);
    document.getElementById('longitude').value = evt.latLng.lng().toFixed(myCoordsLenght);

});




  google.maps.event.addListener(autocomplete, 'place_changed', function() {
    infowindow.close();
    marker.setVisible(false);
    var place = autocomplete.getPlace();
    if (!place.geometry) {
      return;
    }

    // If the place has a geometry, then present it on a map.
    if (place.geometry.viewport) {
      map.fitBounds(place.geometry.viewport);
    } else {
      map.setCenter(place.geometry.location);
      map.setZoom(17);  // Why 17? Because it looks good.
    }
    marker.setIcon(/** @type {google.maps.Icon} */({
      url: place.icon,
      size: new google.maps.Size(71, 71),
      origin: new google.maps.Point(0, 0),
      anchor: new google.maps.Point(17, 34),
      scaledSize: new google.maps.Size(35, 35),

    }));
    marker.setPosition(place.geometry.location);
    marker.setVisible(true);



    document.getElementById('latitude').value= place.geometry.location.lat();
    document.getElementById('longitude').value = place.geometry.location.lng();


    var address = '';
    if (place.address_components) {
      address = [
        (place.address_components[0] && place.address_components[0].short_name || ''),
        (place.address_components[1] && place.address_components[1].short_name || ''),
        (place.address_components[2] && place.address_components[2].short_name || '')
      ].join(' ');
    }

    infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
    infowindow.open(map, marker);
  });


}

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

    </script>
  </head>
  <body>
    <input id="pac-input" class="controls" type="text"
        placeholder="Enter a location">
    <div id="type-selector" class="controls">

      <label for="latitude">Latitude:</label>
    <input id="latitude" type="text" value="" />
    <label for="longitude">Longitude:</label>
    <input id="longitude" type="text" value="" />


    </div>
    <div id="map-canvas" style="width: 500px; height: 400px;"></div>
  </body>
</html>

但是在这一点上,我如何运行一个查询来返回所需的对象并更新地图?

感谢所有

共有1个答案

巩俊远
2023-03-14

您需要找到您在地图上绘制的圆形对象的边界(不幸的是,它是一个矩形)。将其传递到您的服务器端,并使用以下内容查询数据库

SELECT * FROM yourtable WHERE lat BETWEEN a AND c AND lng between b AND  d

其中a和b是左上角坐标,c和d是右下角坐标。(此处提供更多信息)。

既然所有对象都在边界框内,那么需要将它们传递回前端,并确定它们是否在半径内。查看此答案了解更多信息,您就完成了!

 类似资料:
  • 所以我看到了一个特殊的例外,我敢肯定的是谷歌地图的绘图代码。 我有一个片段,在那里我以编程方式添加了一个支持地图片段,然后我在其中操纵谷歌地图实例。 这是stacktrace: 我无法可靠地复制它(尽管这种情况经常发生),我已经查看了ReadWriteDirectByteBuffer和ShortToByteBufferAdapter,但没有任何东西突然出现在我面前。 有什么想法吗?

  • 我认为问题是我需要添加构建提示。我可以找到在哪里添加他们,但我不确定他们应该是什么格式。我也不知道要补充什么。我想我发现了一个帖子,说我需要添加Android.xapplication=Android:value=“Your Key”/>Android.xPermissions= 但我不确定构建提示条目表单中的格式是什么

  •        LSV默认的对谷歌影像进行了加载,如果需要加载其他的谷歌地图数据,可以通过LSV中直接点击即可加载。

  • 我成功创建了一个活动,用户可以在其中发布他的状态并将他的当前位置放置在android工作室中创建的google map中。我还尝试在map中查看所有其他用户,我成功地做到了。但是,随着他们的位置发生变化,不断增加。我想实现这样一种情况,即用户在移动时可以在地图上看到彼此,并且这些也会相应地移动。我使用Firebase作为我的后端来存储他们的位置和状态。这是我想出的代码。 请帮帮我!提前感谢!:)

  • 我有问题加载一个谷歌地图在我的片段。一切都从一个循环器视图适配器开始,该适配器启动活动“ViatGedetAllViewActivity”: 这是我的DetallViewActivity: =2 03-24 02:55:53.881 639-7362/com.example.usuari.MyApplication3 w/ResourcesManager:GetTopleVelResources:

  • 最近Chrome开始发出以下警告: [违规]将非被动事件侦听器添加到阻止滚动的触摸移动事件。考虑将事件处理程序标记为“被动”,以使页面更具响应性。看https://www.chromestatus.com/feature/5745543795965952 这些都来自JavaScript谷歌地图API代码。我可以在自己的代码中将{passive:true}添加到addEventListener(),