Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenLayers 3中的自定义矢量形状标记

OpenLayers 3中的自定义矢量形状标记
EN

Stack Overflow用户
提问于 2015-05-15 01:18:05
回答 2查看 1.7K关注 0票数 3

我有一张OpenLayers 3地图,在地图上显示各种数据。其中一艘显示的是附近的雷达探测到的船只。目前,我正在显示船作为一个简单的矢量圆。我想把它展示成船形的矢量。

据我所知,我的最佳选择是使用*.png图标,并执行如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
style: new ol.style.Icon({
  image: new ol.style.Icon(({
    anchor: [0.5, 0.5],
    anchorXUnits: 'fraction',
    anchorYUnits: 'fraction',
    opacity: 1,
    scale: 1,
    src: '/Content/images/boat.png',
    rotation: 0
  }))
});

这是可行的,但我想要一个矢量,当我放大/缩小时,它不会缩放。我目前针对一些不同数据的解决方案是显示一个矩形,但当缩放时它会缩放:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var style = (function () {
  function (feature, resolution) {
  // font size
  if (resolution > 0.4) var fontSize = '12px';
  else var fontSize = '14px';

  var temperature = feature.get('temperature') || '-';
  temperature = temperature.replace(/,/g, '.');

  return [new ol.style.Style({
    fill: fill,
    stroke: stroke,
    text: new ol.style.Text({
      font: 'bold ' + fontSize + ' helvetica,sans-serif',
      text: Math.round(temperature * 100) / 100 + '°C',
      fill: new ol.style.Fill({ color: '#000' })
    }),
    geometry: function (feature) {
      var startingCoordinates = feature.getGeometry().getCoordinates();
      var coordinates = [[
          [startingCoordinates[0] + 0, startingCoordinates[1] + 0],
          [startingCoordinates[0] + 33, startingCoordinates[1] + 0],
          [startingCoordinates[0] + 33, startingCoordinates[1] + (-11.35)],
          [startingCoordinates[0] + 0, startingCoordinates[1] + (-11.35)],
          [startingCoordinates[0] + 0, startingCoordinates[1] + 0]
      ]];

      return new ol.geom.Polygon(coordinates);
      }
    })]
  }
})()

有比使用startingCoordinates +(常量*分辨率)更好的解决方案吗?在使用向量和png时是否存在显著的性能差异?谢谢

编辑:在咨询了我的几个同事之后,我基本上是想拥有这个http://openlayers.org/en/v3.5.0/examples/regularshape.html,但是有一个自定义的形状。

EDIT2:实际上更像这个http://dev.openlayers.org/examples/graphic-name.html‘命名符号“闪电”、“矩形”和“教堂”是用户定义的。

EN

回答 2

Stack Overflow用户

发布于 2019-02-02 11:07:14

我知道这是一个老问题,但回答别人,因为这是最高的结果,而我正在研究如何做到这一点。

我的解决方案是使用一个数据:image/ svg +xml和一个svg,以提供一个可以编程生成的图标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new ol.style.Style({
    image: new ol.style.Icon({
        // svg of an equilateral triangle 25px wide at the base
        src: `data:image/svg+xml,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="21.65" width="25" id="canvas"><polygon points="0,0 25,0 12.5,21.65" style="fill:rgba(0,0,0,1);"></polygon></svg>')}`,
    }),
})

注意:您在一个数据url中对svg进行了不需要base64编码,但是对于非webkit浏览器,您确实需要encodeURIComponent()它。

票数 2
EN

Stack Overflow用户

发布于 2017-06-14 04:56:13

这就是我所做的,它类似于原来的,但我不需要计算出坐标应该是什么,我只是提供它有多大的像素,让地图计算其余的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
geometry: function (feature) {
    var startingCoordinates =feature.getGeometry().getCoordinates();
    var pixel = map.getPixelFromCoordinate(startingCoordinates);
    var p1,p2,p3,p4,polyCoords=[],sizex=90, sizey=30;
    p1 = pixel;
    p2 = [pixel[0]+sizex,p1[1]];
    p3 = [pixel[0]+sizex,pixel[1]+sizey];
    p4 = [pixel[0],pixel[1]+sizey];
    var p = [p1,p2,p3,p4,p1];
    for (var c = 0; c < 5;c++){
        polyCoords.push(map.getCoordinateFromPixel(p[c]));
    }

    return new ol.geom.Polygon([polyCoords]);
} 

这给了我一个长方形,这就是我想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30255779

复制
相关文章
python 列表有没有顺序_python的list顺序详解
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
IT工作者
2022/08/04
1.3K0
LeetCode 1389. 按既定顺序创建目标数组
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/create-target-array-in-the-given-order 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2022/11/26
4220
LeetCode 1389. 按既定顺序创建目标数组
LeetCode 1389. 按既定顺序创建目标数组
目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。
freesan44
2020/06/16
4620
LeetCode 1389. 按既定顺序创建目标数组
1389. 按既定顺序创建目标数组: https://leetcode-cn.com/problems/create-target-array-in-the-given-order/
村雨遥
2020/04/07
6420
Python创建数字列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 10 1 sum is : 55
py3study
2020/01/03
1.3K0
Python按顺序读取文件夹中文件
涉及到文件操作,我们有时候会读取一个文件夹中的所有的文件。这些文件可能是文件名完全混乱的,也可能是完全格式化的(如1.png,2.png...)。下面介绍Python中的几种按顺序(假如有)读取文件夹中文件的方法。
狼啸风云
2020/08/27
9.9K0
Python按顺序读取文件夹中文件
junit方法按顺序执行
选定版本,直接加注解
IT云清
2021/12/06
1.3K0
junit方法按顺序执行
sql按顺序去重
参考博客: https://blog.csdn.net/qtvb1987/article/details/42081585
周杰伦本人
2022/10/25
8450
sql按顺序去重
数组按指定顺序排序
数组排序可以直接使用 sort() 方法,可以对数组按规律排序。 但如果指定一个没有规律的顺序进行排序呢? 同样可以使用  sort() 方法: const data = [   { name: '张三', code: 'zs' },   { name: '王五', code: 'ww' },   { name: '赵七', code: 'zq' }, ]; data.sort((star, next) => {   const sortList = ['zq', 'zs', 'ww']   return 
德顺
2022/06/12
2.7K0
[LTE] CSG(Closed Subscriber Group)闭合用户组
CSG是3GPP R8中引入的概念,定义为闭合用户组。有以下特点: 每个CSG由一个CSG ID标识 同一用户可属于多个CSG,用户与CSG的关系就好比签约,启用了CSG小区只会允许签约用于接入 UE维护一张它所属CSG的CSG ID列表,在这个列表之外的其他CSG ID所对应的CSG小区对该UE而言是不可访问的。 每个CSG小区广播一个CSG ID,这个CSG ID所标识的闭合用户群的成员可以访问该小区 CSG模式需要终端和核心网的支持,在R8之前的终端和核心网都无法使用CSG功能。
轻舞飞扬SR
2021/02/24
1K0
python 按顺序读文件夹下面的文件
方法一: import os path="/home/test/" #待读取的文件夹 path_list=os.listdir(path) path_list.sort() #对读取的路径进行排
狼啸风云
2020/08/10
2.5K0
python 按顺序读文件夹下面的文件
python中按字母排序_在Python中按字母顺序排序文本文件的内容
我想在文件内部按字母顺序排序。我当前执行此操作的代码不起作用,文件保持不变。这个程序本身就是一个基本的调查问卷,用来实验读写文件。在import time
用户7886150
2021/01/27
4.9K0
【代码】Python多线程执行并且按原本顺序返回[详细注释]
简单记录一下,免得下次找不到,还得重写。 先看一下效果,然后直接上代码,并且每行都配注释。 # 导入线程池的包 from concurrent.futures import ThreadPoolExecutor, as_completed # 整个的任务函数,方便调用。也可以拆开写 def extract_append_audio_features(extract_type='age', max_workers=16): # feature_csv任务队列,可以理解为数组 data
小锋学长生活大爆炸
2023/03/01
1.9K0
【代码】Python多线程执行并且按原本顺序返回[详细注释]
列表:创建列表
列表是Tcl语言中最重要的一种数据结构。什么是列表?列表是元素的有序集合,各个元素可以包含任何字符串,例如空格,反斜杠,换行符等。列表表现为特定结构的字符串,这意味着可以把它们赋值给一个变量,可以把它们做为参数传给命令,可以把它们嵌套到其他列表中。
Lauren的FPGA
2019/10/30
2.4K0
实现线程按顺序输出ABC
线程按顺序输出ABC 实现描述:建立三个线程A、B、C,分别按照顺序输出十次ABC 首先建立一个方法,按照条件进行输出 class PrintABC{ private int index=0; public synchronized void print(int n) { // TODO Auto-generated method stub try { while(index!=n) { wait(); } if(index==0) { System.out.
呆呆
2021/10/06
7810
python中创建列表的方法_python中readlines
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184390.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3.8K0
使用Python按另一个列表对子列表进行分组
在 Python 中,我们可以使用各种方法按另一个列表对子列表进行分组,例如使用字典和使用 itertools.groupby() 函数,使用嵌套列表推导。在分析大型数据集和数据分类时,按另一个列表对子列表进行分组非常有用。它还用于文本分析和自然语言处理。在本文中,我们将探讨在 Python 中按另一个列表对子列表进行分组的不同方法,并了解它们的实现。
很酷的站长
2023/08/11
4530
使用Python按另一个列表对子列表进行分组
Python集合用处
一些集合的最基本操作,如集合取交集、取并集、取差集、判断一个集合是不是另一个集合子集或者父集等。
马修
2021/01/21
5650
使用 Python 创建使用 for 循环的元组列表
Python 的关键数据结构是列表和元组。元组元素一旦设置,就无法更改。这称为不可变性。但是列表元素可以在初始化后修改。在处理需要组合在一起的数据时,for 循环用于创建元组列表。列表比元组更具适应性,因为它们能够被修改。本教程演示如何使用 for 循环创建元组列表,从而简化重复性任务。
很酷的站长
2023/08/11
3830
使用 Python 创建使用 for 循环的元组列表
【说站】python列表的创建和存放
列表中可存放各种类型的要素,包括int、float等基本类型,也包括dict、str等标准类型。
很酷的站长
2022/11/23
1.1K0
【说站】python列表的创建和存放

相似问题

python熊猫按值创建列表组

10

按地形顺序创建资源组

12

用迭代工具按三个列表组成Python组

30

按特定顺序/顺序合并python列表

21

按数字顺序创建列表

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文