npm install leaflet esri-leaflet
import L from "leaflet"
import * as esri from 'esri-leaflet';
import "../node_modules/leaflet/dist/leaflet.css"
注意事项 上述关于引入说明,并不是最好的解决办法,只是暂时没有找到更好的处理方式
这里是将Arcgis-server中具有多个图层的地图对象整体当作一个leaflet中的一个layer对象进行添加。因此,不论Arcgis-server的地图中有多少各图层,leaflet都认为只有一个图层,简单来说url地址不需要带图层索引号
import React, { useEffect } from 'react';
import ReactDOM from 'react-dom';
import "./simpleDynamicMapLayer.css"
import L from "leaflet"
import * as esri from 'esri-leaflet';
import { message } from 'antd';
import PropertiesPopup from "../testPopup/PropertiesPopup"
function SimpleDynamicMapLayer(props) {
useEffect(()=>{
//创建地图对象
let map = L.map('map').setView([29.654,106.145],13);
//创建dynamicMapLayer对象,注意url结尾没有图层索引
let layer = esri.dynamicMapLayer({ url: "https://localhost:6443/arcgis/rest/services/02_Tky_GDCGK/MapServer"})
//添加到地图中
layer.addTo(map);
//向地图对象绑定click事件,执行identify查询
map.on("click", (evt)=>{
//注意查询过程利用链式语法执设置查询才是参数和回调
layer.identify().at(evt.latlng).on(map).run((error, result) => {
if(error){
message.error(error);
return
}
if(result.features.length>0)
{
let div = document.createElement('div');
ReactDOM.render(PropertiesPopup(result.features[0].properties), div);
L.popup().setLatLng(evt.latlng).setContent(div).openOn(map);
}
})
})
},[])
return (
<div id = "map"></div>
);
}
export default SimpleDynamicMapLayer;
执行identify 查询 的链式语法各函数的意义
特别地,在esri-leaflet中所有的查询任务都是在run函数中指定回调函数,后期在做空间查询或属性查询时可沿用此规律
这里是将一个Arcgis-server中的FS图层当作leaflet的一个图层,因此fs的url结尾要带图层索引号
import React, { useEffect } from 'react';
import ReactDOM from 'react-dom';
import L from "leaflet"
import * as esri from "esri-leaflet"
import "./simpleFeatureLayer.css"
import SimplePropertiesPopup from "../testPopup/PropertiesPopup"
function SimpleFeatureLayer(props) {
useEffect(()=>{
let map = L.map("map2").setView([29.776,106.308], 13);
//注意示例中,0图层是一个点要素图层,其样式一定要在pointToLayer及进行指定
let layer = esri.featureLayer({
url:"http://localhost:6080/arcgis/rest/services/02_Tky_GDCGK/FeatureServer/0",
pointToLayer: function (geojson, latlng) {
return L.circleMarker(latlng, { radius: 5, color: "#2d84c8" })
}})
//注意:这里的click事件是绑定在FeatureLayer上的,而不是Map
layer.on("click", (event)=>{
let {properties} = event.sourceTarget.feature;
let div = document.createElement('div');
ReactDOM.render(SimplePropertiesPopup(properties), div)
L.popup().setLatLng(event.latlng).setContent(div).openOn(map);
})
layer.addTo(map)
},[])
return (
<div id="map2"></div>
);
}
export default SimpleFeatureLayer;
pointToLayer: function (geojson, latlng)回调设置要素样式,因为不论FS自身是什么样式,leaflet都不会加载,而是会按照默认leaflet自带的图标进行展示。style: function (feature)回调进行调整
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删