ArcGIS API for JavaScript 4.2学习笔记[12] View的弹窗(Popup)

本文深入探讨了ArcGIS API for JavaScript中View的Popup特性,讲解了如何自定义Popup展示地图上的经纬度和其他信息。通过监听View的click事件,结合Locator服务获取坐标并展示在Popup上。Popup类的属性如actions、content、location和title在实现自定义弹窗内容和位置中起到关键作用。最后,文章提供了官方源代码示例。
摘要由CSDN通过智能技术生成

看本文前最好对第二章(Mapping and Views)中的Map和View类有理解。

视图类有一个属性是Popup类型的popup,查阅API知道这个就是视图的弹窗,每一个View的实例都有一个popup。

这个popup属性在View对象实例化的时候就实例化了的,即随着View的出生,它也会出生,它拥有默认的样子,它显示的文字也是默认的样式。

我们看看Popup这个类:

直接继承自Accessor,位于widgets模块下,说明Popup(弹窗)也是小部件的一种。但是为什么要单独拿出来讲呢?可能用法上比较复杂吧。

如果用户对弹窗有更高的样式要求,官方的说法是

可以自己new一个Popup对象,替换掉view默认的popup即可。

其实Popup有个兄弟类,叫PopupTemplate,它长得很像Popup,但是在功能上更服务于Layer和Graphic,即地理数据,而且也是高度可自定义的,在下一节会细说这两个的区别。

说完了Popup这个新玩意儿,我就来说说第一个例子吧!

它的功能就是点击View上的一个地方,就会弹出一个小窗,显示经纬度和其他信息。


 

引用

直接给:

require(
    [
      "esri/tasks/Locator",
      "esri/Map",
      "esri/views/MapView",
      "dojo/domReady!"
    ], 
    function(){}
);

函数参数中因为Map和View 对象是经常性出现的,所以就用 var map = new Map(...);代替了(以后也是)

所以函数参数的关键代码是:

function(Locator, Map, MapView){
        var map = new Map(...);
        var view = new MapView(...);
        var locatorTask = new Locator({
            url : "https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer";
     }); view.on(
"click", funcion(event){...}) }

locatorTask是一个Locator类的对象,用于定位服务。这个不用知道太详细,因为本例中重点并不是它。

重点应该是view的事件“click”,写法同上,但是事件的方法体没有写完整。

我们就来看看这个事件的方法体具体是什么:

function(event){
        //获取经纬度
        var lat = Math.round(event.mapPoint.latitude * 1000) / 1000;
        var lon = Math.round(event.mapPoint.longitude * 1000) / 1000;
        view.popup.open({
            title: "Reverse geocode: [" + lon + ", " + lat + "]",
            location: event.mapPoint
        });

        //定位服务,可以省略,不是本例中的主要内容
        locatorTask.locationToAddress(event.mapPoint)
        .then(function(response) {
          var address = response.address.Match_addr;
          view.popup.content = address;
        })
        .otherwise(function
好的,我会注意保密。针对你的问题,我来给你解答一下。 对于弹窗的位置,可以通过设置弹窗的锚点(anchor)和偏移量(offset)来进行调整。锚点可以是弹窗的中心点(center)、右上角的点(upper-right)、左上角的点(upper-left)、左下角的点(lower-left)或者右下角的点(lower-right)。偏移量可以分别设置水平和垂直方向的偏移量,可以为正数或负数。 下面是一个示例代码: ``` require([ "esri/Map", "esri/views/MapView", "esri/widgets/Popup", "dojo/dom-construct", "dojo/dom-style", "dojo/on", "dojo/domReady!" ], function(Map, MapView, Popup, domConstruct, domStyle, on) { var map = new Map({ basemap: "streets" }); var view = new MapView({ container: "viewDiv", map: map, center: [-118.805, 34.027], zoom: 13 }); var popup = new Popup({ anchor: "center", // 设置锚点为中心点 offset: [0, -15], // 设置垂直方向的偏移量为-15 visibleWhenEmpty: false, // 当没有内容时不显示弹窗 view: view }); view.popup = popup; view.on("click", function(event) { var lat = event.mapPoint.latitude.toFixed(3); var lon = event.mapPoint.longitude.toFixed(3); var content = domConstruct.create("div", { innerHTML: "Latitude: " + lat + "<br>Longitude: " + lon }); popup.content = content; popup.open({ location: event.mapPoint }); }); }); ``` 对于为弹窗添加元素,可以使用 dojo/dom-construct 模块来进行创建和添加。可以使用这个模块的 create() 方法来创建 HTML 元素,然后使用 popup.content 属性来添加到弹窗中。 下面是一个示例代码: ``` var content = domConstruct.create("div", { innerHTML: "<b>Hello, world!</b>" }); popup.content = content; popup.open({ location: event.mapPoint }); ``` 希望这些信息能够帮到你,如果你还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值