功能层不显示但功能表显示

时间:2016-05-24 16:39:03

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

我是ArcGIS javascript的新手,并修改了ArcGIS Developers处的其中一个示例,尝试在基本地图上显示一些驾驶路线。我也在生成一张路线表。该表显示所以我认为这意味着添加了路径图层,但路线不会显示在地图上。代码如下所示。任何帮助将不胜感激!

编辑:

我发现我可以使用网址ArcGISDynamicMapServiceLayer将路由显示为http:.../MapServer,我可以使用网址http:.../MapServer/0生成功能表。我想我需要使用FeatureLayer作为路由,这样我就可以突出显示与用户选择的表中的行对应的路由。其中一个样本FeatureLayer Sample表示

  

此示例演示如何将基本要素图层添加到地图。在   至少,FeatureLayer必须指向有效的要素服务   托管在ArcGIS Server或ArcGIS Online上或使用   功能集合对象。

我的理解是路线功能设置为地图服务,而不是功能服务。这可能是我的问题吗?一些FeatureLayer示例使用存储在MapService上的图层(例如Gas Price Data),所以我不确定它是否重要。

     var map, stateBaseMap, geometryLayer, routeFeature, myFeatureTable,
        stateBaseMapUrl, geometryLayerUrl, routeFeatureUrl;

  require([ "esri/map",
            "esri/layers/ArcGISTiledMapServiceLayer",
            "esri/tasks/GeometryService",
            "esri/layers/FeatureLayer",
            "esri/dijit/FeatureTable",
              "dijit/layout/ContentPane",
              "dijit/layout/BorderContainer",
              "esri/geometry/Extent",
              "esri/graphicsUtils",
              "esri/tasks/query",
              "dojo/dom",
              "dojo/parser",
              "dojo/ready",
              "dojo/on"],
    function(Map,
            ArcGISTiledMapServiceLayer, 
             GeometryService, 
             FeatureLayer,
             FeatureTable,
             ContentPane, 
             BorderContainer,
             Extent, 
             graphicsUtils, 
             Query,
              dom, 
              parser, 
              ready, 
              on) {
      parser.parse();

      ready(function(){
            esri.config.defaults.io.proxyUrl = "/llr/llrproxy";
            esri.config.defaults.io.alwaysUseProxy = false;
            esri.config.defaults.io.corsDetection = false;
            stateBaseMapUrl = document.getElementById("shipment_stateBaseMapServiceURL").value;
            geometryLayerUrl = document.getElementById("shipment_geometryServiceURL").value;
            routeFeatureUrl = document.getElementById("shipment_routeLayerURL").value;

            map = new Map("map");
            stateBaseMap = new ArcGISTiledMapServiceLayer(stateBaseMapUrl);
            map.addLayer(stateBaseMap);
            geometryLayer = new GeometryService(geometryLayerUrl);
            map.addLayer(geometryLayer);
            routeFeature = new FeatureLayer(routeFeatureUrl, {
                                                    mode : FeatureLayer.MODE_SNAPSHOT,
                                                    outFields : [ "*" ],
                                                    visible:true,
                                                    id : "routeFeature"
                                                });
            map.addLayer(routeFeature);
            on(routeFeature, "load", function(){
                loadTable();
              });

            function loadTable(){
                    myFeatureTable = new FeatureTable({
                    featureLayer : routeFeature,
                    map : map, 
                    editable: false,
                    fieldInfos: [
                      {
                        name: 'ORIGIN', 
                        alias: 'Entry State'
                      },
                      {
                        name: 'ROUTE_DESC', 
                        alias: 'Route Description'
                      },
                      {
                        name: 'DESTNATION', 
                        alias: 'Exit State'
                      }
                    ]
                  }, 'myTableNode');

                  myFeatureTable.startup();
            }
        });
      });

2 个答案:

答案 0 :(得分:1)

代码不会共享您正在使用的实际网址的详细信息。如果您尝试使用地图服务网址创建FeatureLayer(网址以http ... MapServer /结尾)。这是不可能的。您需要具有特定的Layer url,url以layer id结尾才能创建FeatureLayer。这可能是一个问题。

编辑: 您可以从MapService中的一个Layer创建FeatureLayer。 但是,url需要是[map service url] / [layerid]。其中layerid是图层的数字/索引。

答案 1 :(得分:0)

您尝试添加到地图的geometryLayer不是它是服务的图层。所以它可能会因某些错误而失败。

尝试删除" map.addLayer(geometryLayer);"并且让我知道会发生什么。