未捕获(承诺)TypeError:无法读取未定义的属性图形

欢乐地图

非常新的JavaScript和试图建立使用JavaScript的4倍在ArcGIS API教程这里松散以下网页地图:https://developers.arcgis.com/javascript/latest/sample-code/views-composite-views/index。 html

我最想保留突出显示功能,同时允许使用我自己的Web图层在单个视图中进行缩放和平移。

我在控制台中遇到的错误是:未捕获(承诺)TypeError:无法读取未定义的属性“ graphic”

我已经讨论了一些讨论类似错误的问题,但仍然不完全理解我在此处从教程代码中错误编辑的内容,以引发错误。让我知道查看代码的其他部分是否有帮助。我在这里撞墙-任何帮助将不胜感激!

这是高亮功能代码:

// highlight function

mainView
    .when(maintainFixedExtent)
    .then(disableNavigation)
    .then(enableHighlightOnPointerMove);

function maintainFixedExtent(view) {
    var fixedExtent = view.extent.clone();
    view.on("resize", function () {
        view.extent = fixedExtent;
    });
    return view;
}

let highlight = null;
let lastHighlight = null;

function enableHighlightOnPointerMove(view) {
    view.whenLayerView(basinsLayer).then(function (layerView) {
        view.on("pointer-move", function (event) {
            view.hitTest(event).then(function (response) {
                lastHighlight = highlight;

                var id = null;

                if (response.results.length) {
                    var feature = response.results.filter(function (result) {
                        return result.graphic.layer === basinsLayer;
                    })[0].graphic;

                    feature.popupTemplate = basinsLayer.popupTemplate;
                    id = feature.attributes.OBJECTID;
                    highlight = layerView.highlight([id]);
                    var selectionId = mainView.popup.selectedFeature
                        ? mainView.popup.selectedFeature.attributes.OBJECTID
                        : null;

                    if (highlight && id !== selectionId) {
                        mainView.popup.open({
                            features: [feature]
                        });
                    }
                } else {
                    if (mainView.popup.visible) {
                        mainView.popup.close();
                        mainView.popup.clear();
                    }
                }

                // remove the previous highlight
                if (lastHighlight) {
                    lastHighlight.remove();
                    lastHighlight = null;
                }
            });
        });
    });
}

function disableNavigation(view) {
    view.popup.dockEnabled = true;

    view.popup.actions = [];

    function stopEvtPropagation(event) {
        event.stopPropagation();
    }

    return view;
}

编辑:

这是使用公共数据的完整示例。我认为问题与我同时拥有一个点层和一个多边形层有关。我只想在多边形图层上使用突出显示功能,但是如果将鼠标悬停在足够的位置,控制台中会出现“未捕获(承诺)TypeError:无法读取未定义的属性图形”,我认为这与点图层有关。有解决方法吗?

<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="initial-scale=1,maximum-scale=1,user-scalable=no"
    />
    <!--
  ArcGIS API for JavaScript, https://js.arcgis.com
  For more information about the views-composite-views sample, read the original sample description at developers.arcgis.com.
  https://developers.arcgis.com/javascript/latest/sample-code/views-composite-views/index.html
  -->
<title>Create an app with composite views - 4.15</title>

    <style>
      html,
      body,
      #mainViewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }

      #akViewDiv {
        padding: 0;
        margin: 0;
        height: 225px;
        width: 300px;
        background-color: rgba(255, 255, 255, 0.9);
      }

      #hiViewDiv {
        padding: 0;
        margin: 0;
        height: 135px;
        width: 200px;
        background-color: rgba(255, 255, 255, 0.9);
      }
    </style>

    <link
      rel="stylesheet"
      href="https://js.arcgis.com/4.15/esri/themes/light/main.css"
    />
    <script src="https://js.arcgis.com/4.15/"></script>

    <script>
      require([
        "esri/Map",
        "esri/views/MapView",
        "esri/layers/FeatureLayer",
        "esri/widgets/Legend"
      ], function(Map, MapView, FeatureLayer, Legend) {
        var layer = new FeatureLayer({
          portalItem: {
            id: "b234a118ab6b4c91908a1cf677941702"
          },
          outFields: ["NAME", "STATE_NAME", "VACANT", "HSE_UNITS"],
          title: "U.S. counties"
        });

       var layer2 = new FeatureLayer({
          url: "https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases_US/FeatureServer/0"
        }); 

        var map = new Map({
          layers: [layer, layer2]
        });

        var mainView = new MapView({
          container: "mainViewDiv",
          map: map,
          popup: {
            highlightEnabled: false,
            dockEnabled: true,
            dockOptions: {
              breakpoint: false,
              position: "top-right"
            }
          },
          extent: {
            xmin: -3094834,
            ymin: -44986,
            xmax: 2752687,
            ymax: 3271654,
            spatialReference: {
              wkid: 5070
            }
          },
          spatialReference: {
            // NAD_1983_Contiguous_USA_Albers
            wkid: 5070
          },
          ui: {
            components: ["attribution"]
          }
        });
        mainView.ui.add(
          new Legend({
            view: mainView
          }),
          "bottom-right"
        );


mainView
          .when(disablePopupOnClick)
          .then(enableHighlightOnPointerMove);

        let highlight = null;
        let lastHighlight = null;

        function enableHighlightOnPointerMove(view) {
          view.whenLayerView(layer).then(function(layerView) {
            view.on("pointer-move", function(event) {
              view.hitTest(event).then(function(response) {
                lastHighlight = highlight;

                // if a feature is returned, highlight it
                // and display its attributes in the popup
                // if no features are returned, then close the popup
                var id = null;

                if (response.results.length) {
                  var feature = response.results.filter(function(result) {
                    return result.graphic.layer === layer;
                  })[0].graphic;

                  feature.popupTemplate = layer.popupTemplate;
                  id = feature.attributes.OBJECTID;
                  highlight = layerView.highlight([id]);
                  var selectionId = mainView.popup.selectedFeature
                    ? mainView.popup.selectedFeature.attributes.OBJECTID
                    : null;

                  if (highlight && id !== selectionId) {
                    mainView.popup.open({
                      features: [feature]
                    });
                  }
                } else {
                  if (mainView.popup.visible) {
                    mainView.popup.close();
                    mainView.popup.clear();
                  }
                }

                // remove the previous highlight
                if (lastHighlight) {
                  lastHighlight.remove();
                  lastHighlight = null;
                }
              });
            });
          });
        }

        // prevents the user from opening the popup with click

        function disablePopupOnClick(view) {
          view.on("click", function(event) {
            event.stopPropagation();
          });
          return view;
        }
      });
    </script>
  </head>

  <body>
    <div id="mainViewDiv"></div>
    <div id="akViewDiv" class="esri-widget"></div>
    <div id="hiViewDiv" class="esri-widget"></div>
  </body>
</html>

在此处输入图片说明

卡布森

我认为您正在尝试实现的示例。根据问题的ArcGIS示例,只需删除停止在地图上导航以及所有多余视图的所有内容。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="initial-scale=1,maximum-scale=1,user-scalable=no"
    />
    <title>highlight features - 4.15</title>

    <style>
      html,
      body,
      #mainViewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }
    </style>

    <link
      rel="stylesheet"
      href="https://js.arcgis.com/4.15/esri/themes/light/main.css"
    />
    <script src="https://js.arcgis.com/4.15/"></script>

    <script>
      require([
        "esri/Map",
        "esri/views/MapView",
        "esri/layers/FeatureLayer"
      ], function(Map, MapView, FeatureLayer) {
        var layer = new FeatureLayer({
          portalItem: {
            id: "b234a118ab6b4c91908a1cf677941702"
          },
          outFields: ["NAME", "STATE_NAME", "VACANT", "HSE_UNITS"],
          title: "U.S. counties"
        });

        var map = new Map({
          layers: [layer]
        });

        var mainView = new MapView({
          container: "mainViewDiv",
          map: map,
          popup: {
            highlightEnabled: false,
            dockEnabled: true,
            dockOptions: {
              breakpoint: false,
              position: "top-right"
            }
          },
          extent: {
            xmin: -3094834,
            ymin: -44986,
            xmax: 2752687,
            ymax: 3271654,
            spatialReference: {
              wkid: 5070
            }
          },
          spatialReference: {
            // NAD_1983_Contiguous_USA_Albers
            wkid: 5070
          },
          ui: {
            components: ["attribution"]
          }
        });
        
        mainView
          .when(disablePopupOnClick)
          .then(enableHighlightOnPointerMove);
        
        let highlight = null;
        let lastHighlight = null;

        function clearPopup() {
          if (mainView.popup.visible) {
            mainView.popup.close();
            mainView.popup.clear();
          }
        }

        function clearHighlight(lastHighlight) {
          if (lastHighlight) {
            lastHighlight.remove();
            lastHighlight = null;
          }
        }

        function enableHighlightOnPointerMove(view) {
          view.whenLayerView(layer).then(function(layerView) {
            view.on("pointer-move", function(event) {
              view.hitTest(event).then(function(response) {
                lastHighlight = highlight;
                var id = null;
                
                if (response.results.length) {
                  clearPopup();
                }

                var filterFeatures = response.results.filter(function(result) {
                  return result.graphic.layer === layer;
                });

                if (filterFeatures && filterFeatures.length > 0) {
                  var feature = filterFeatures[0].graphic;
                  feature.popupTemplate = layer.popupTemplate;
                  id = feature.attributes.OBJECTID;
                  highlight = layerView.highlight([id]);
                  var selectionId = mainView.popup.selectedFeature
                    ? mainView.popup.selectedFeature.attributes.OBJECTID
                    : null;

                  if (highlight && id !== selectionId) {
                    mainView.popup.open({
                      features: [feature]
                    });
                  }

                } else {
                  clearPopup();
                  console.log('filterFeatures is empty');
                }
                
                clearHighlight(lastHighlight);

              });
            });
          });
        }
        
        // prevents the user from opening the popup with click

        function disablePopupOnClick(view) {
          view.on("click", function(event) {
            event.stopPropagation();
          });
          return view;
        }
      });
    </script>
  </head>

  <body>
    <div id="mainViewDiv"></div>
  </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

未捕获(承诺):错误:无法读取未定义的属性

未捕获(承诺)TypeError:无法读取未定义的属性“ forEach”

“错误:未捕获(承诺):TypeError:无法读取未定义的属性'length'”

错误错误:未捕获(承诺):TypeError:无法读取未定义的属性 - Typescript

未捕获(承诺)TypeError:无法读取未定义的属性'createElement'(...)

未捕获(承诺)TypeError:无法读取未定义的属性“ setState”

如何修复Cloudflare worker中的“未捕获(承诺)TypeError:无法读取未定义的属性“方法””?

未捕获(承诺)TypeError:无法读取未定义的属性“ map”-但以前可以正常工作吗?

ML5,情绪分析:未捕获(按承诺)TypeError:无法读取未定义的属性“ the”

错误:未捕获(承诺):TypeError:无法读取未定义的属性“ title”

错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ id”

React + Axios:未捕获(承诺)TypeError:无法读取未定义的属性“map”

VueJS和Firestore-未捕获(承诺)TypeError:无法读取未定义的属性

离子-未捕获(承诺):TypeError:无法读取未定义的属性'then'

Angular 2-未捕获(承诺):TypeError:无法读取未定义的属性“ title”

Axios:未捕获(已承诺)TypeError:无法读取未定义的属性“协议”

topojson / d3.js:未捕获(承诺)TypeError:无法读取未定义的属性“ type”

React Redux-未捕获(承诺)TypeError:无法读取未定义的属性“ props”

未捕获(承诺):TypeError:无法读取未定义的属性“ people”

未捕获(承诺)TypeError:无法读取未定义的属性“httpsCallable”(Firebase 函数问题)

未捕获(承诺)TypeError:无法读取未定义的属性“ geometry”

错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ nativeElement”

Tensorflow.js:未捕获(承诺)TypeError:无法读取未定义的属性'length'

Angular 7-错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ forEach”

VueJS:未捕获(承诺)TypeError:无法读取未定义的属性“ rol”

拒绝(TypeError):无法读取未定义的属性“ setState”,未捕获(已承诺)TypeError:无法读取未定义的属性“ setState”

未捕获的TypeError:无法读取未定义的属性“值”

未捕获的TypeError:无法读取未定义的属性“ toLowerCase”

未捕获的TypeError:无法读取未定义的属性“ close”