当前位置: 代码迷 >> JavaScript >> 在GPS上启动Google Map Marker,但可拖动-填写表格
  详细解决方案

在GPS上启动Google Map Marker,但可拖动-填写表格

热度:97   发布时间:2023-06-13 12:09:53.0

我正在完成一个正在进行的项目,并且为了改善用户功能,我想要一个页面,浏览器可以在该页面上获取用户的当前位置(geolocation()),并使用纬度和经度填写表单字段。 但是,一旦发生这种情况,我希望在Google地图上放置一个可供用户拖动的标记,当用户拖动该标记时,它将在表单中更新。 我知道必须有一种方法来执行此操作,但是我不能完全使其正常工作。 到现在为止,我已经具备了获取用户位置并填写表单字段的全部功能。 不过,我有点在努力使用Google API。 这对我不太精通Java脚本没有帮助(这些功能几乎是我在整个大型项目中使用的唯一javascript)。 附带的是可以定位并填写输入字段的工作代码,然后我对Google maps API进行了首次攻击,但失败了:该地图只是显示为带有缩放控件和街景视图拖动器的空白灰色框,但他们什么也不做,因为它们都是灰色的。

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
var x=document.getElementById("latitude");
var y=document.getElementById("longitude");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position) {
  x.value=position.coords.latitude;  
  y.value=position.coords.longitude;    
}
getLocation();

这是失败的google api内容(请记住,这只是我认为无法正常使用的被黑客入侵的尝试)。 我想知道是否没有立即填写x和y值,然后以某种方式调用它,因为如果我用纬度和经度而不是x和y进行硬编码,则会得到一个功能图,尽管x和y不在此处使用,它不会填写以下形式:

function initialize() {
  var myLatlng = new google.maps.LatLng(x, y);
  var mapOptions = {
    zoom: 4,
    center: myLatlng
  }
  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'Hello World!'
  });
}

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

</script>

Finally, here's my two fields of the input form:
<p>
    <i>Latitude:</i>
    <input type="text" name="latitude" id="latitude" placeholder="latitude"><br>
</p>
<p>
    <i>Longitude:</i>
    <input type="text" name="longitude" id="longitude" placeholder="longitude"><br>
</p>

询问问题后,我似乎总是能解决问题。 经过更多的挖掘,我发现此页面的最佳解决方案适合于我的项目。

这就是我会做的

<style>
#map-canvas {
  height: 400px;
}
</style>
<div id="map-canvas"></div>
<p>
  <i>Latitude:</i>
  <input type="text" name="latitude" id="latitude" placeholder="latitude"><br>
</p>
<p>
  <i>Longitude:</i>
  <input type="text" name="longitude" id="longitude" placeholder="longitude"><br>
</p>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script>
var x=document.getElementById("latitude");
var y=document.getElementById("longitude");
// Make sure you have a default.  You don't know if geolocation will find the user's location
var defaultLocation = new google.maps.LatLng(50.84498962150941, 4.349988162517548);  // Manneken Pis, Brussels
var map;

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  }
  else {
    x.innerHTML = "Geolocation is not supported by this browser.";
    ////maybe you want to set a marker on the map anyway.
    // markerOnClientPosition(defaultLocation);
  }
}
function showPosition(position) {
  x.value = position.coords.latitude;
  y.value = position.coords.longitude;
  if (map) {
    markerOnClientPosition(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
  }
}
getLocation();
function initialize() {
  //var myLatlng = new google.maps.LatLng(Number(x), Number(y));  //
  var mapOptions = {
    zoom: 10,
    center: defaultLocation, // myLatlng,
    mapTypeId: google.maps.MapTypeId.HYBRID
  }
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
function markerOnClientPosition(myLatlng) {
  var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable: true,
    title: 'You are here.  Drag to exact location'
  });
  // attach a drag event
  google.maps.event.addListener(marker, 'dragend', function() {
    x.value = marker.getPosition().lat();
    y.value = marker.getPosition().lng();
  });
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
  相关解决方案