标签: leaflet

如何使用没有事件的传单简单地获取当前地理位置?

我已经相当深入地阅读了传单文档,但找不到我的问题的简单答案。

首先是一些上下文:

我创建了一个新地图并将其居中在当前位置,并为找到的位置添加了一个侦听器。

    var map = L.map('map', {zoomControl: false}).fitWorld();

    L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/outdoors-v9/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiZG9ucZhc3o3ODMifQ.3-x6nnTgePEK0ERPllV7oQ', {
        maxZoom: 20
    }).addTo(map);

    map.locate({setView: true, watch: true, maxZoom: 17});
    map.on('locationfound', onLocationFound);
Run Code Online (Sandbox Code Playgroud)

我现在想在当前位置创建一个标记,例如

    marker = L.marker(map.getLatLong);
    marker.addTo(map);
Run Code Online (Sandbox Code Playgroud)

这将通过 onLocationFound() 函数完成,因为我只想创建它一次,然后使用 locationfound 事件让标记移动使用 marker.setLatLng()。

我怎样才能使用传单来获取当前的 LatLong?它是否有 HTML5 Geolocation API 的简单替代方案?

我试过 map.getCenter 但它返回 (0,0)

javascript leaflet

2
推荐指数
1
解决办法
1万
查看次数

如何每 5 秒更新一次传单标记

我正在制作传单地图和标记。

我从 JSON 获取标记 latlng 并正确显示。

getLatLng()

function getLatLng() {
  var details = '/equipment/api/getLatLong';
  $.ajax({
    url: details,
    method: 'get'
  }).done(function(response) {

    $('.subSection').html('').append('<section><button type="button" onclick="hideEquipmentDetails()"><i class="fa fa-times"></i></button></section>');
    var equipmentDetails = response.data.filters;
    console.log(equipmentDetails)
    $.each(equipmentDetails, function(i, value) {
      L.marker([value.latitude, value.longitude]).addTo(map).bindPopup('<b><span> Name:</span>' + value.name + '</b>');
    })
  });
}

setInterval(function() {
  getLatLng();
}, 5000)
Run Code Online (Sandbox Code Playgroud)

我每 5 秒刷新一次方法。

所以我需要在更新的 latlng 中显示标记,并且应该隐藏旧标记。

setInterval(function() {
  //L.marker.setOpacity(0);
  //L.markerClusterGroup()
  //markers.clearLayers();
  //map.removeLayer(L.marker);
  //markers.removeLayer()
  //L.marker().removeTo(map);
  getLatLng();
}, 5000)
Run Code Online (Sandbox Code Playgroud)

我尝试了所有选项来实现这一目标,但我做不到。

有没有其他方法可以做到?

否则我应该再定义一个数组来存储初始 latlng 值,然后每次检查 latlng 是否更改(在这种情况下,我只能替换更新的 latlng 标记,对吗?不需要每次都替换所有标记,对吗?)

javascript jquery marker leaflet

2
推荐指数
1
解决办法
4450
查看次数

将(旋转的)ImageOverlay 内的 X 和 Y 坐标转换为纬度和经度

在阅读了 Projection 的文档和一些尝试失败的测试后,我发现自己无法找到解决此问题的方法。

我发现的所有解决方案都与 x 和 y 坐标参考墨卡托地图投影这一事实有关,但在这种情况下,我将它们来自放置在地图图层上的本地图像。

假设我有一个 400px * 200px 的灰色图像,使用 ImageOverlay.Rotated 放置在传单地图上,位置如下:

var topleft = L.latLng(41.604766, 0.606402);
var topRight = L.latLng(41.605107, 0.606858);
var bottomleft = L.latLng(41.604610, 0.606613);
Run Code Online (Sandbox Code Playgroud)

此图像使用左上角、右上角和左下角坐标作为参考放置在地图上。

结果是一个稍微向北旋转的矩形。

如果我知道我将手机留在像素 100,50(原始图像的左角)处,我如何将这个笛卡尔坐标转换为我的地图的纬度和经度以显示它?

如果它是一个与北方完美对齐的矩形,我想我可以得到左上角和左下角之间的 º 差异,将其除以像素数,然后将结果与手机的 Y 相乘以获得纬度。使用先验值,我将它乘以我手机的 X 以获得我手机的经度。

但鉴于形状是旋转的,世界并不平坦,而且我在地理和三角学方面非常糟糕,我不确定它是否足够精确。

最后,我们说的是电话,而不是建筑物。几米外(2-4 米)是可以的,一个建筑街区之外就不行。

javascript leaflet typescript angular-leaflet-directive angular

2
推荐指数
1
解决办法
931
查看次数

在传单中创建事件控件的正确方法是什么?

我也需要创建L.Control子类L.Eventedinclude: [ L.Mixin.Events ]工作,但显示警告,它已被弃用,我需要从L.Evented. 但我不能因为我需要继承L.Control. 我想怎么办?

javascript leaflet

2
推荐指数
1
解决办法
767
查看次数

更改传单层控制图标

当有多个这样的图层控件时,如何更改网页中传单图层控件图标的图标?

目标是在这里有不同的图标:

两层控件截图

代码如下:

var layers1 = L.control.layers(...).addTo(map);
var layers2 = L.control.layers(...).addTo(map);
Run Code Online (Sandbox Code Playgroud)

如果我通过 CSS 更改控件的图标,它会在所有图层控件中更改。

html javascript css leaflet

2
推荐指数
1
解决办法
6190
查看次数

使用传单中的测量工具时禁用弹出窗口

我在传单中使用了一个测量插件工具,但是当我尝试在标记之间进行测量时,弹出窗口会干扰有没有办法解决这个问题?我读了一些关于oddclicks的内容,我尝试使用它但无济于事。

$(".leaflet-control-measure").click(function() {
  var oddClick = $(this).data("oddClick");
 $(this).data("oddClick", !oddClick);
 if (!oddClick) {
   map.off('click', popup);
 } else {
    map.on('click', popup);
 }
 });
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

   popup logic- I am reading from a database, the popup is called from python in a for loop, and rendered using the jinja2 template
 var markers= L.markerClusterGroup({
      disableClusteringAtZoom: 15,
      minZoom : 2

  });


  {% for item in markers %}


   var resortIcon = L.icon({
       iconUrl: '{{ item[3] }}',
      iconSize: [25, 25],
      popupAnchor: [0,-15]
    });

   var marker{{ item[0] }} = L.marker({{ …
Run Code Online (Sandbox Code Playgroud)

javascript jquery leaflet

2
推荐指数
1
解决办法
999
查看次数

传单获取编号

我正在尝试将 layer.GetLatLngs 转换为只有数字的数组,

[[17.68397, 1.98629],[17.6777, 1.96555],[17.66679, 1.9648],[17.6611, 1.99233]]

问题是输出是沿着的

LatLng(17.50438, 1.04772),LatLng(17.48686, 1.05775)

将数字仅转换为数组的最佳方法是什么?

//代码片段

map.on('draw:created', function (e) {

var type = e.layerType,
    layer = e.layer;
if (type === 'polygon') {
    layer.on('click', function() {
        window.alert(polys);    
    });
}

drawnItems.addLayer(layer);
polys = layer.getLatLngs();
});
Run Code Online (Sandbox Code Playgroud)

javascript leaflet

2
推荐指数
1
解决办法
1648
查看次数

传单将坐标转换为街道地址

我正在创建一个使用传单地图的应用程序。我想知道是否有任何外部库可以用来将坐标转换为街道地址?我使用 Angular 6。

javascript maps leaflet typescript angular

2
推荐指数
1
解决办法
6910
查看次数

Leaflet js:未捕获的类型错误:无法读取未定义的属性“addLayer”

我正在尝试使用 Leaflet 创建地图并在地图上显示标记。有没有人对我在地图上显示标记时收到的以下错误有任何想法?

我可以启动页面的地图加载:

var map;
var ajaxRequest;
var plotlist;
var plotlayers=[];

function initmap() {
    // set up the map
    map = new L.Map('map');

    // create the tile layer with correct attribution
    var osmUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
    var osmAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';
    var osm = new L.TileLayer(osmUrl, {minZoom: 8, maxZoom: 20, attribution: osmAttrib});       

    // start the map over Holland
    map.setView(new L.LatLng(52.36994, 4.90788),8);
    map.addLayer(osm);
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个标记:

var marker=L.marker([52.63275, 4.75175]).bindPopup('testmarker');
Run Code Online (Sandbox Code Playgroud)

将标记添加到地图时,出现错误“Uncaught TypeError: Cannot read property 'addLayer' of undefined”:

marker.addTo(map);
Run Code Online (Sandbox Code Playgroud)

当在 initmap() 函数中包含这一行时,它工作正常。所以看起来地图实例是不可访问的还是函数之外的东西?哪个很奇怪,因为变量是在脚本开始时在函数之外创建的?

谢谢!

javascript leaflet

2
推荐指数
1
解决办法
8300
查看次数

路由控件名称并添加自定义标记

嗨,我正在尝试使用传单添加自定义标记并使用 Routing.control 绘制路线。我需要向标记添加一个变量,因为我需要不时更新标记位置之一。我只会有 3 个标记或航点,一个起点,一个第二个和第三个。我可能只需要移动开始标记。

添加绘制路线并添加默认标记的路线的代码是

var route = L.Routing.control({
     waypoints: [
    L.latLng(my_lat, my_lng),
    L.latLng(job_p_lat, job_p_lng),
    L.latLng(job_d_lat, job_d_lng)
 ],show: false, units: 'imperial',
 router: L.Routing.mapbox('API KEY HERE')
}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些不值得展示的东西,完全没有。任何建议都会很棒,谢谢

javascript leaflet leaflet-routing-machine

2
推荐指数
1
解决办法
2568
查看次数