arcgis for js FeatureLayer和GeoJSON一个矢量点同时渲染图形和文本

server/2024/12/2 13:06:11/

效果

FeatureLayer和GeoJSONLayer, 一个矢量点同时渲染图形和文本

在这里插入图片描述

代码

相关参数自行查阅文档, 这里就不做注释了

示例代码手动创建FeatureLayer方式, 如果是通过远程url加载图层的 渲染方式同理, GeoJSONLayer同理

<!DOCTYPE html>
<html lang="zn"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>body {margin: 0;}#mapview {position: absolute;width: 100%;height: 100%;}* {margin: 0;padding: 0;}</style><link rel="stylesheet" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" /><script src="https://js.arcgis.com/4.23/"></script></head><body><div id="mapview"></div><script>javascript">require(['esri/Map','esri/views/MapView','esri/layers/FeatureLayer','esri/Graphic'], function (Map, MapView, FeatureLayer, Graphic) {// 初始化底图window.map = new Map({basemap: 'dark-gray-vector'})// 创建2维视图let view = new MapView({container: 'mapview',map: map,zoom: 11,center: [104.783916597735, 32.55699155692144] // 设置地图的初始化中心点坐标})// 生成100个随机点var points = generateRandomPointsInPolygon([[[104.64487088240317, 32.66500681729125],[104.91060269392625, 32.6635616904849],[104.88210690535206, 32.54642886312837],[104.68812954939528, 32.54787588095771]]],100)// 创建feature点位const features = points.map((point, index) => ({geometry: {type: 'point',x: point[0],y: point[1]},attributes: {ObjectID: Math.random(),name: `${index + 1}`}}))if (!features.length) {return}console.log(features)const featureLayer = new FeatureLayer({source: features,title: '生态因子点位图层',objectIdField: 'ObjectID',  // 重要, 必须fields: [{ name: 'name', type: 'string' }],outFields: ['*'],popupTemplate: {title: '{name}'},// 渲染成简单圆点renderer: {type: 'simple',symbol: {type: 'simple-marker',color: 'red',size: '10px',outline: {width: 1,color: '#fff'}}},// 渲染额外的文本图形labelingInfo: [{symbol: {type: 'text',color: '#fff',// haloSize: 1,// haloColor: '#fff',backgroundColor: 'rgba(27,140,155,0.7)',// xoffset: -22,yoffset: 15,horizontalAlignment: 'center',font: { family: 'sans-serif', size: 8 }},labelPlacement: 'center-center',labelExpressionInfo: { expression: '$feature.name' }}]})map.add(featureLayer)// 添加点击view.on('click', event => {const { longitude, latitude } = event.mapPoint// console.log('>>> 点击的坐标: ')console.log(`${longitude}, ${latitude}`)})// 生成随机点function generateRandomPointsInPolygon(polygonCoords, number) {// 判断是否在图形内function isPointInsidePolygon(point, polygonCoords) {let crossings = 0for (let i = 0, j = polygonCoords[0].length - 1; i < polygonCoords[0].length; j = i++) {const xi = polygonCoords[0][i][0]const yi = polygonCoords[0][i][1]const xj = polygonCoords[0][j][0]const yj = polygonCoords[0][j][1]if (((yi <= point[1] && point[1] < yj) || (yj <= point[1] && point[1] < yi)) &&point[0] < ((xj - xi) * (point[1] - yi)) / (yj - yi) + xi) {crossings++}}return crossings % 2 !== 0}// 存储生成的随机点let randomPoints = []// 获取多边形的最小和最大经纬度范围let minLat = polygonCoords[0][0][1]let maxLat = polygonCoords[0][0][1]let minLng = polygonCoords[0][0][0]let maxLng = polygonCoords[0][0][0]for (let i = 0; i < polygonCoords[0].length; i++) {const lat = polygonCoords[0][i][1]const lng = polygonCoords[0][i][0]if (lat < minLat) {minLat = lat}if (lat > maxLat) {maxLat = lat}if (lng < minLng) {minLng = lng}if (lng > maxLng) {maxLng = lng}}for (let i = 0; i < number; i++) {let isPointInside = falselet randomPoint// 不断尝试生成随机点,直到点在多边形内while (!isPointInside) {// 在多边形的经纬度范围内随机生成一个点const randomLat = minLat + (maxLat - minLat) * Math.random()const randomLng = minLng + (maxLng - minLng) * Math.random()randomPoint = [randomLng, randomLat]// 使用射线法判断点是否在多边形内isPointInside = isPointInsidePolygon(randomPoint, polygonCoords)}randomPoints.push(randomPoint)}return randomPoints}})</script></body>
</html>

http://www.ppmy.cn/server/146724.html

相关文章

[极客时间]AIGC产品经理训练营毕业总结

为期10周的训练营也进入尾声了,回想当初&#xff0c;真的是蛮感慨的。 我为什么会去参加AIGC产品训练营呢? 其实也是蛮奇妙的. 我是一名传统业务的前端研发, 因为一个项目第一次真实的接触到了AIGC,就感觉像是打开了新世界的大门,让我倍感兴奋,想要在ai的世界里探索一番. 不过…

数学建模选MATLAB还是Python?

在进行数学建模时&#xff0c;选择合适的编程语言和工具对于建模的效率和效果至关重要。目前&#xff0c;MATLAB和Python是两个常用的数学建模工具&#xff0c;它们各自有优缺点&#xff0c;适用于不同的场景。本文将从多个维度对MATLAB和Python进行比较&#xff0c;帮助大家做…

git的使用(简洁版)

什么是 Git&#xff1f; Git 是一个分布式版本控制系统 (DVCS)&#xff0c;用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建&#xff0c;最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具&#xff0c;使得开发者…

用c语言完成俄罗斯方块小游戏

用c语言完成俄罗斯方块小游戏 这估计是你在编程学习过程中的第一个小游戏开发&#xff0c;怎么说呢&#xff0c;在这里只针对刚学程序设计的学生&#xff0c;就是说刚接触C语言没多久&#xff0c;有一点功底的学生看看&#xff0c;简陋的代码&#xff0c;简陋的实现&#xff0…

Milvus的索引类型

Milvus 是一个开源的向量数据库&#xff0c;专为高效存储、检索和管理大规模向量数据而设计。Milvus 提供了多种索引类型&#xff0c;用于加速向量搜索的性能&#xff0c;不同的索引类型适用于不同的数据特性、查询需求和硬件资源。下面是 Milvus 支持的主要索引类型的详细介绍…

React Router

概述 React Router 创建于 2014 年&#xff0c;是一个用于 React 的声明式、基于组件的客户端和服务端路由库&#xff0c;它可以保持 UI 与 URL 同步&#xff0c;拥有简单的 API 与强大的功能。 安装依赖 // npm npm install react-router-dom6// pnpm pnpm add react-route…

三菱汽车决定退出中国市场,发展重心转移至东南亚

在全球汽车行业日益激烈的竞争环境下&#xff0c;各大车企不断调整战略以适应市场需求的变化。近期&#xff0c;三菱汽车公司宣布将正式退出中国市场&#xff0c;并将发展重心转移至东南亚。 一、市场背景与三菱的现状 自21世纪初&#xff0c;伴随着中国市场的急速发展&#…

systemverilog中的事件 event

1 基本定义 在 SystemVerilog 中&#xff0c;事件是一种用于线程同步的机制。它就像是一个信号旗&#xff0c;不同的线程&#xff08;如 initial 块、always 块等产生的进程&#xff09;可以等待这个信号&#xff0c;当信号被触发&#xff08;就像旗帜被升起&#xff09;时&…