标签: mapbox-gl-draw

如何以与拖动点 mapbox-gl-js 示例相同的方式拖动多边形?

我通过单击按钮将 geojson 多边形添加到地图中。我还在mousedowngeojson 和 x/y 坐标对(geojson 几何体)打印到控制台,通过 API 上的 queryRenderedFeatures 调用访问它。

我现在想让多边形像多边形上的mousedown事件上的点示例(下面的链接)一样可拖动,并且能够在地图上移动它,在整个mousedown事件中更新多边形节点的 x/y 坐标,但保持geojson 大小在整个拖动过程中保持不变。

直接mapbox-gl-js是这样做的方法,还是我应该将预先配置的 geojson 多边形输入到mapbox-gl-draw -在用户的操作上绘制多边形模式

有什么建议或例子吗?

API 拖动点示例

拖一个点GitHub代码

geojson mapbox mapbox-gl mapbox-gl-js mapbox-gl-draw

7
推荐指数
1
解决办法
1017
查看次数

如何为使用 mapbox-gl draw 绘制的单个多边形着色?

我正在读取GeoJSON 文件并将多边形(和其他东西)导入 mapbox-gl draw 使用draw.set(geoJSON). 如何通过要素属性中的属性为单个多边形着色。例子:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      //"id": "the most unique id in the world",
      "properties": {
        "class_id": 1
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              79.30961608886719,
              61.57192958204744
            ],
            [
              79.34309005737303,
              61.57192958204744
            ],
            [
              79.34309005737303,
              61.57871162332267
            ],
            [
              79.30961608886719,
              61.57871162332267
            ],
            [
              79.30961608886719,
              61.57192958204744
            ]
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "class_id": 2
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              79.35201644897461,
              61.58271478278019 …
Run Code Online (Sandbox Code Playgroud)

mapbox mapbox-gl mapbox-gl-js mapbox-gl-draw

6
推荐指数
1
解决办法
4407
查看次数

如何使用用户属性更改 MapboxGL 中的 line-dasharray 设置?

我尝试使用以下代码更改 line-dasharray 设置,

'line-dasharray': [
    "case", 
    ['==', ['get', "user_class_id"], 'laneway'],[0.2,2],[0.3,2] 
 ]
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误,

Error: layers.gl-draw-line-active.hot.paint.line-dasharray[2][0]: Expression name must be a string, but found number instead. If you wanted a literal array, use ["literal", [...]].
Run Code Online (Sandbox Code Playgroud)

所以我根据错误建议修复了代码,

  'line-dasharray': [
      "case", 
      ['==', ['get', "user_class_id"], 'laneway'],['literal',[0.2,2]],['literal',[0.3,2]] 
  ]
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误,

evented.js:136 Error: layers.gl-draw-line-active.hot.paint.line-dasharray: data expressions not supported
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

javascript mapbox mapbox-gl mapbox-gl-js mapbox-gl-draw

6
推荐指数
1
解决办法
6568
查看次数

找不到模块:错误:无法解析“fs”角度

我在Angular应用程序中实现Mapbox并且正在做如下

将 css 添加到 angular-cli.json

"../node_modules/@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css"

成分

import { Component } from '@angular/core';
import * as mapboxgl from 'mapbox-gl';
import * as MapboxDraw from '@mapbox/mapbox-gl-draw';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {
  static t;
  ngOnInit() {
    mapboxgl.accessToken = 'Token';
    AppComponent.t.map= new mapboxgl.Map({
      container: 'map',
      style: 'mapbox://styles/mapbox/light-v9',
      zoom: 5,
      center: [-78.880453, 42.897852]
    });

     const draw = new MapboxDraw({
        displayControlsDefault: false,
        controls: {
            polygon: true,
            trash: true
        }
    });
    AppComponent.t.map.addControl(draw);
  }
}
Run Code Online (Sandbox Code Playgroud)

它的显示 …

mapbox package.json mapbox-gl angular mapbox-gl-draw

5
推荐指数
1
解决办法
5096
查看次数

在 MapBox 中的两个标记之间绘制线性动画线

我在地图盒上看到了一些动画线的例子,但我还没有发现任何在两点之间创建线性线的例子。我可以在地图上创建标记,也可以在这些标记之间画一条线。但是,我想慢慢地创建从原点(开始)到目的地(结束)的那条线。这是在两个坐标之间画线的代码。我只想慢慢地(动画地)制作它,然后重复该动画。

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title>Animate a line</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.50.0/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.50.0/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    #route {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
  animation: dash 1s linear alternate infinite;
}

@keyframes dash {
  from {
    stroke-dashoffset: 1000;
  }
  to {
    stroke-dashoffset: 0;
  }
}
    </style>
</head>
<body>

<div id='map'></div>
<script>
mapboxgl.accessToken =
  "pk.eyJ1IjoiaHllb25namlua2ltIiwiYSI6ImNpZXh4dXp5eDA2YjFzaGtyOGR2dnBza2oifQ.a5K673tSr0cOcYoX1rpPhg";

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v9',
    center: …
Run Code Online (Sandbox Code Playgroud)

javascript mapbox mapbox-gl react-map-gl mapbox-gl-draw

4
推荐指数
1
解决办法
8905
查看次数

如何旋转/转换 mapbox-gl-draw 特征?

我正在使用mapbox-gl-draw向我的地图添加可移动功能。除了移动性功能,我需要旋转/变换-Ability为特色,功能类似于Leaflet.Path.Transform

目前,我唯一的选择是创建自定义模式吗?

例如

map.on('load', function() {
  Draw.changeMode('transform');
});
Run Code Online (Sandbox Code Playgroud)

我无法将我的地图及其功能转换mapbox-gl-leaflet为实现,Leaflet.Path.Transform因为失去旋转/轴承/俯仰支撑不是一种选择。

mapbox-gl mapbox-gl-js mapbox-gl-draw

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

使用 Mapbox-GL-Draw 一次只允许绘制一个形状

我正在使用 mapbox draw 来绘制多边形。我希望它一次只能在屏幕上绘制一个多边形。例如,用户绘制一个多边形,然后再次单击多边形绘制按钮,第一个多边形将被删除。我曾尝试使用 draw.modechange 来做到这一点,但在某处编码方式存在错误。当我单击多边形绘制按钮时,现有的多边形被删除,但是当我尝试绘制新多边形时,什么都没有。

this.map.on('draw.modechange', (e) => {
        const data = draw.getAll(); 
        console.log(draw.getMode());
        if (draw.getMode() == 'draw_polygon') {
           if (data.features.length > 1) {
               draw.deleteAll();
           }                
        } 
    }); 
Run Code Online (Sandbox Code Playgroud)

mapbox-gl-js mapbox-gl-draw

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

手动触发 Mapbox-GL-Draw 绘图模式

我想在应用程序中使用 Mapbox-GL-Draw,但希望从 Mapbox 地图容器外部存在的按钮触发多边形绘制,而不显示正常的绘制控件。

一种简单的方法是在创建按钮后简单地移动按钮,但是有没有一种简单、干净的方法来开始绘制过程呢?

mapbox-gl-js mapbox-gl-draw

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