标签: esri-maps

Esri Maps PopupTemplate的内容方法每个功能仅调用一次

我正在Angular应用程序内使用Esri映射,并且将弹出式窗口渲染为Angular组件,并使用PopupTemplatecontent方法发布了数据:

layer.popupTemplate = new PopupTemplate({
  content: (feature: { graphic: __esri.Graphic }) => {
    this.publishPopupData(layer, feature.graphic.attributes);
    return popupComponent.viewContainerRef.element.nativeElement;
  },
  // other properties... 
});
Run Code Online (Sandbox Code Playgroud)

这很好用,除非在给定点有多个要素。当用户循环浏览功能时,如果他/她返回到已经显示的功能,则不会执行content方法,因此不会发布弹出数据。

我可以在MapView的弹出窗口中访问当前选择的功能,但是我需要知道该功能来自哪一层才能正确发布数据(每一层对将ArcGIS数据处理到弹出窗口所使用的模型中都有独特的要求) 。

mapView.popup.watch('selectedFeature', (graphic: __esri.Graphic) => {
  const layer = ???;
  this.publishPopupData(layer, graphic.attributes);
});
Run Code Online (Sandbox Code Playgroud)

名义上,graphic.layer应该包含图层参考,但就我而言,它始终是null

有没有一种方法可以强制弹出窗口始终调用content方法,即使该方法已经针对给定功能执行了呢?或者,是否有办法获取要素所属的图层MapView.popup(或我未考虑的其他内容)?

如果重要的话,弹出窗口用于MapImageLayer子层。

esri typescript arcgis-js-api esri-maps esri-javascript-api

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

错误"无法对类型缺少调用或构造签名的表达式使用'new'." 导入Esri类型时

我觉得这里有一些非常简单的东西.我已经得到了我建立了一个使用ESRI的ArcGIS的API的一类,但是当我导入从类型定义arcgis-js-apid.ts文件,我得到的打字稿错误"无法使用'新’与它的类型没有一个电话或一封表达构建签名."

例如:

import * as IMap from 'esri/Map';

export class Foo {
    bar: (Map: IMap) {
        const map = new Map(); // <-- error here
    }
}
Run Code Online (Sandbox Code Playgroud)

d.ts文件中的相关摘录:

declare namespace __esri {
    /* snip */
    interface Map extends Accessor, LayersMixin {
        allLayers: Collection;
        basemap: Basemap;
        ground: Ground;
    }

    interface MapConstructor {
        new(properties?: MapProperties): Map;
    }

    export const Map: MapConstructor;
    /* snip */
}

declare module "esri/Map" {
    import Map = __esri.Map;
    export = Map;
} …
Run Code Online (Sandbox Code Playgroud)

typescript arcgis-js-api esri-maps

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

Next JS在arcgis地图上的多个坐标上显示信息窗口

下面是我的下一个 JS 代码,它显示了一个简单的 ArcGIS 地图,其中包含特定坐标上的点或标记。

谁能告诉我如何在地图上显示点的弹出/信息窗口?例如,我单击任意点,它将在其上打开相应的弹出窗口。

import NavBar from '@/components/NavBar'
import axios from 'axios';
import { useRef, useEffect, useState } from 'react';
import { loadModules } from 'esri-loader';

export default function Home({...props}) {
    const [state, setState] = useState('');
    const MapElement = useRef(null)
    const options = {
     url: 'https://js.arcgis.com/4.6/',
     css: true
    };

    useEffect(() => {
        var vehicleData = props.data
        var map, point_symbol;
        loadModules([
            "esri/views/MapView",
            "esri/WebMap",
            "esri/Graphic",          
            "esri/geometry/Point",
            "esri/PopupTemplate",
            "esri/layers/FeatureLayer","dojo/domReady!"
        ],options).then(([ MapView, WebMap, Graphic, Point, PopupTemplate, FeatureLayer]) => {
            const webmap = …
Run Code Online (Sandbox Code Playgroud)

arcgis reactjs arcgis-js-api next.js esri-maps

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