Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在传单中设置尺寸和数量限制。绘图?_Javascript_Plugins_Leaflet_Leaflet.draw - Fatal编程技术网

Javascript 是否可以在传单中设置尺寸和数量限制。绘图?

Javascript 是否可以在传单中设置尺寸和数量限制。绘图?,javascript,plugins,leaflet,leaflet.draw,Javascript,Plugins,Leaflet,Leaflet.draw,此问题针对传单用户(以及使用传单.draw插件的用户) 我正在使用传单,并希望允许我的用户在地图的任何区域上绘制1个(且仅1个)多边形。我还想以某种方式限制该多边形的大小(例如限制正方形的边长或其覆盖的区域——最好以度为单位指定,以便设置的大小限制可以在不考虑缩放级别的情况下平移) 我的最终目标只是提取4个正方形顶点的坐标或多边形区域覆盖的坐标 也就是说,我找到了传单。画插件。这是了不起的,但是,我需要限制它的功能,以我的要求(只有一个多边形绘制的时间,特别是,大小不能画得太大)。这可能吗?如果

此问题针对传单用户(以及使用传单.draw插件的用户)

我正在使用传单,并希望允许我的用户在地图的任何区域上绘制1个(且仅1个)多边形。我还想以某种方式限制该多边形的大小(例如限制正方形的边长或其覆盖的区域——最好以度为单位指定,以便设置的大小限制可以在不考虑缩放级别的情况下平移)

我的最终目标只是提取4个正方形顶点的坐标或多边形区域覆盖的坐标

也就是说,我找到了传单。画插件。这是了不起的,但是,我需要限制它的功能,以我的要求(只有一个多边形绘制的时间,特别是,大小不能画得太大)。这可能吗?如果是,怎么做

不管这是可能的还是不可能的,有没有更好的方法来做到这一点

也就是说,我找到了传单。画插件。这是了不起的,但是,我需要限制它的功能,以我的要求(只有一个多边形绘制的时间,特别是,大小不能画得太大)。这可能吗?如果是,怎么做

我想你需要自己编写代码

我认为有两种可能性:

  • 破解draw插件(在插件中编写自己的代码)
  • 从Draw插件扩展L.Draw.Polygon类(参见手册中的关于OOP)以创建一个costum类
  • 1更快,2更干净。您必须根据项目的大小进行选择

    也就是说,我找到了传单。画插件。这是了不起的,但是,我需要限制它的功能,以我的要求(只有一个多边形绘制的时间,特别是,大小不能画得太大)。这可能吗?如果是,怎么做

    我想你需要自己编写代码

    我认为有两种可能性:

  • 破解draw插件(在插件中编写自己的代码)
  • 从Draw插件扩展L.Draw.Polygon类(参见手册中的关于OOP)以创建一个costum类

  • 1更快,2更干净。您必须根据项目的大小进行选择。

    我没有破解传单绘图源

    将控件添加到地图后,我在控件内放置了一个隐藏的div。然后,当一个多边形被创建时,我会显示该div。我使用CSS将其绝对定位在控件上,这样按钮就会被“禁用”,CSS会使按钮看起来褪色。如果删除了多边形,则隐藏该div

    不是最好的解决方案,但我不需要编辑源代码就可以工作

    添加drawControl后,我添加了隐藏的div:

    $('.leaflet-draw-section:first').append('<div class="leaflet-draw-inner-toolbar" title="Polygon already added"></div>');
    
    以下是CSS:

    .leaflet-draw-inner-toolbar {
        background: none repeat scroll 0 0 rgba(255, 255, 255, 0.6);
        bottom: 0;
        display: none;
        left: 0;
        position: absolute;
        right: 0;
        top: 0;
    }
    

    我没有侵入传单的来源就这么做了

    将控件添加到地图后,我在控件内放置了一个隐藏的div。然后,当一个多边形被创建时,我会显示该div。我使用CSS将其绝对定位在控件上,这样按钮就会被“禁用”,CSS会使按钮看起来褪色。如果删除了多边形,则隐藏该div

    不是最好的解决方案,但我不需要编辑源代码就可以工作

    添加drawControl后,我添加了隐藏的div:

    $('.leaflet-draw-section:first').append('<div class="leaflet-draw-inner-toolbar" title="Polygon already added"></div>');
    
    以下是CSS:

    .leaflet-draw-inner-toolbar {
        background: none repeat scroll 0 0 rgba(255, 255, 255, 0.6);
        bottom: 0;
        display: none;
        left: 0;
        position: absolute;
        right: 0;
        top: 0;
    }
    

    我能为这个问题提出另一个解决方案吗

    我将通过执行以下操作将多边形数量限制为一个:

     map.on('draw:created', function (e) {
        var layer = e.layer;
        if(drawnItems && drawnItems.getLayers().length!==0){
          drawnItems.clearLayers();
        }           
        drawnItems.addLayer(layer);     
     });
    
    我正在收听draw:created事件,并确定是否已经有标记。如果有,我将移除该标记并将新标记放置在所需位置。因此,用户可以少点击一次,因为他们不再需要删除上一个标记,并且始终强制执行一个标记规则

    如果您想允许多个标记,可以对最旧的层执行FIFO删除


    如果您不想自动删除图层,可以提示用户或忽略该请求。

    我可以为该问题提出另一种解决方案吗

    我将通过执行以下操作将多边形数量限制为一个:

     map.on('draw:created', function (e) {
        var layer = e.layer;
        if(drawnItems && drawnItems.getLayers().length!==0){
          drawnItems.clearLayers();
        }           
        drawnItems.addLayer(layer);     
     });
    
    我正在收听draw:created事件,并确定是否已经有标记。如果有,我将移除该标记并将新标记放置在所需位置。因此,用户可以少点击一次,因为他们不再需要删除上一个标记,并且始终强制执行一个标记规则

    如果您想允许多个标记,可以对最旧的层执行FIFO删除


    如果您不想自动删除图层,可以提示用户或忽略该请求。

    能否更清楚地描述您的最终目标?@LSA-当然,基本上需要修改传单.draw以将地图上绘制的多边形数量限制为1。而且,还需要限制多边形的大小。如果有其他方法不使用传单.draw,我也愿意使用这种方法。你解决了这个问题吗?你做什么了吗?如果是,你能发布你的解决方案吗?你能更清楚地描述你的最终目标吗?@LSA-当然,基本上,需要修改传单.draw以将地图上绘制的多边形数量限制为1。而且,还需要限制多边形的大小。如果有其他方法不使用传单.draw,我也愿意使用这种方法。你解决了这个问题吗?你做什么了吗?如果是,你能发布你的解决方案吗