【问题标题】:How to draw a line between two points in ArcGIS API for JavaScript如何在 ArcGIS API for JavaScript 中的两点之间画一条线
【发布时间】:2015-07-16 17:59:05
【问题描述】:

我试图在两点之间画一条线。我已经尝试了各种符号组合(SimpleLineSymbol、CartographicLineSymbol)和折线几何及其构造函数,但一条线不会显示在(在开放的街道地图上)。

这是一次尝试:

      var lineSymbol = new CartographicLineSymbol(
          CartographicLineSymbol.STYLE_SOLID,
          new Color([255,0,0]), 10,
          CartographicLineSymbol.CAP_ROUND,
          CartographicLineSymbol.JOIN_MITER, 5
        );

       var lineGeometry = new Polyline(new SpatialReference({wkid:4326}));
       lineGeometry.addPath([[0,0], [10,0]])

       var lineGraphic = new Graphic(lineGeometry, lineSymbol);
       gl.add(lineGraphic)

看起来这应该很简单。任何想法可能会发生什么?

JsFiddle

【问题讨论】:

  • 不。我有所有正确的包含/要求。

标签: javascript gis arcgis esri arcgis-js-api


【解决方案1】:

试试这个代码。我让它适用于各种线路。

 var map, toolbar, symbol, geomTask;

  require([
    "esri/map", 
    "esri/toolbars/draw",
    "esri/graphic",

    "esri/symbols/SimpleMarkerSymbol",
    "esri/symbols/SimpleLineSymbol",
    "esri/symbols/SimpleFillSymbol",

    "dojo/parser", "dijit/registry",

    "dijit/layout/BorderContainer", "dijit/layout/ContentPane", 
    "dijit/form/Button", "dijit/WidgetSet", "dojo/domReady!"
  ], function(
    Map, Draw, Graphic,
    SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol,
    parser, registry
  ) {
    parser.parse();

    map = new Map("map", {
      basemap: "streets",
      center: [-15.469, 36.428],
      zoom: 3
    });

    map.on("load", createToolbar);

    // loop through all dijits, connect onClick event
    // listeners for buttons to activate drawing tools
    registry.forEach(function(d) {
      // d is a reference to a dijit
      // could be a layout container or a button
      if ( d.declaredClass === "dijit.form.Button" ) {
        d.on("click", activateTool);
      }
    });

    function activateTool() {
      var tool = this.label.toUpperCase().replace(/ /g, "_");
      toolbar.activate(Draw[tool]);
      map.hideZoomSlider();
    }

    function createToolbar(themap) {
      toolbar = new Draw(map);
      toolbar.on("draw-end", addToMap);
    }

    function addToMap(evt) {
      var symbol;
      toolbar.deactivate();
      map.showZoomSlider();
      switch (evt.geometry.type) {
        case "point":
        case "multipoint":
          symbol = new SimpleMarkerSymbol();
          break;
        case "polyline":
          symbol = new SimpleLineSymbol();
          break;
        default:
          symbol = new SimpleFillSymbol();
          break;
      }
      var graphic = new Graphic(evt.geometry, symbol);
      map.graphics.add(graphic);
    }
  });

【讨论】:

  • 但是我想要预定义的线条,我不想点击画线:\
【解决方案2】:

这只是您的 JSFiddle 中的一个错字。您缺少第二个点的 y 值。

请参阅下面更新的带有 y 值的 JSFiddle。我还调整了缩放级别,以便您可以看到线条。请记住,对于每个点,第一个值是 x(4326 中的经度),第二个值是 y(4326 中的纬度)。

lineGeometry.addPath([[0,0], [10,]])

http://jsfiddle.net/rkgtv8ho/2/#share

【讨论】:

    【解决方案3】:

    问题是我的库的排序。我需要将 ESRI 颜色库移到需要列表中的一些 dojo 图表库之上。将很快更新我的答案。这是一个非常模糊的库冲突,因为没有发生错误(遗憾的是我花了几个小时来调试......)

    【讨论】:

    • 你有解决方案...?
    • 感谢您的提醒。我还试图调试为什么它不适用于预定义的行。
    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2014-03-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多