Openlayers 3 将 EPSG:4326 矢量重新投影到 EPSG:3857

2024-03-27

我需要将 GeoJSON 矢量数据从 EPSG:4326 转换为 EPSG:3857...

我有一张地图...

var olMapDiv = document.getElementById('olmap');
            control.map = new ol.Map({
                target: olMapDiv,
                renderer: 'canvas',
                layers: layers,
                interactions: ol.interaction.defaults({
                    altShiftDragRotate: false,
                    dragPan: false,
                    rotate: false
                }).extend([new ol.interaction.DragPan({ kinetic: null })]),
                pixelRatio: 1,
                loadTilesWhileAnimating: true,
                loadTilesWhileInteracting: true,
                view: view
            });

和一个景色...

var view = new ol.View({
                // make sure the view doesn't go beyond the 22 zoom levels of Google Maps
                maxZoom: 21,
                projection: 'EPSG:3857',
                center: [0, 0],
                zoom: 0
            });

我定义了我的 geoJson 对象...

var geoJsonObj = {
                        'type': 'Feature',
                        'geometry': JSON.parse(shape),
                        'name': 'V',
                        'id': V.vID

                    }

我尝试将这些特征读入开放层矢量对象并提供投影参数......

var vectorSource = new ol.source.Vector({
                        features: (new ol.format.GeoJSON()).readFeatures(geoJsonObj, {defaultDataProjection:"EPSG:4326",featureProjection:"EPSG:3857"})
                    });

然后我在新的矢量图层中使用上面的“vectorSource”......

vectors = new ol.layer.Vector({                           
                        title: V.vID,
                        source: vectorSource,
                        id: V.vID,
                        name: 'V',
                        label: response.VList[key].Acres,
                        fill: response.VList[key].Shade,
                        stroke: defaultStrokeHex,
                        style: function (feature, resolution) {
                            var text = resolution * 100000 < 10 ? response.VList[key].Acres : '';

                            if (text != "") {
                                styleCache[text] = [new ol.style.Style({
                                    stroke: new ol.style.Stroke({
                                        color: '#319FD3',
                                        width: 1
                                    }),
                                    text: new ol.style.Text({
                                        font: '12px Calibri,sans-serif',
                                        text: text,
                                        fill: new ol.style.Fill({
                                            color: '#000'
                                        }),
                                        stroke: new ol.style.Stroke({
                                            color: '#fff',
                                            width: 3
                                        })
                                    }),
                                    fill: new ol.style.Fill({
                                        color: rcisWebMapUtilities.convertHex(response.VList[key].Shade, '0.5')
                                    })
                                })];
                            }
                            else if (text == "") {
                                styleCache[text] = [new ol.style.Style({
                                    fill: new ol.style.Fill({
                                        color: rcisWebMapUtilities.convertHex(response.VList[key].Shade, '0.5')
                                    })
                                })
                                ]
                            } return styleCache[text];
                        }


                    });

无论我做什么,我要么看到绘制的矢量...但在 EPSG:4326 中或者没有加载...

我花了太多时间试图弄清楚如何让 OpenLayers3 做到这一点...非常感谢任何帮助!


如果您在视图中使用 EPSG:4326 那么您的 geojson 矢量声明应该是

var vectorSource = new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(geojsonObject, { 
dataProjection: 'EPSG:4326',
featureProjection:'EPSG:4326' })
});

如果您在视图中使用 EPSG:3857,请使用以下命令:

var vectorSource = new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(geojsonObject, { 
dataProjection: 'EPSG:4326',
featureProjection:'EPSG:3857' })
});

只是为了解释一下dataProjection是源坐标。表示 geojson 文件中坐标的 epsg。尽管featureProjection是您视图的 EPSG,也就是您地图的 EPSG。意思是EPSG原始坐标要进行转换。

所以试着记住这个规则:featureProjection and ol.View投影声明应该是相等的。

请注意,我假设您的 geojson 坐标投影在 EPSG:4326 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openlayers 3 将 EPSG:4326 矢量重新投影到 EPSG:3857 的相关文章

  • 返回填充有局部变量的向量是否安全?

    返回一个充满局部变量的向量是否安全 例如 如果我有 include
  • 将函数应用于滚动窗口

    假设我有一个很长的清单A我想要计算的值 例如长度 1000 std100 对 即我想计算std A 1 100 std A 2 101 std A 3 102 std A 901 1000 在 Excel VBA 中 可以通过编写例如以下内
  • 使用shared_ptr的例子?

    你好 我今天问了一个关于如何在同一个向量数组中插入不同类型的对象 https stackoverflow com questions 3475030 different types of objects in the same vector
  • 从 r 矩阵的每一行中减去一个常数向量

    我有一个 5 列 4 行的矩阵 我还有一个 3 列的向量 我想分别从矩阵每一行的第 3 4 和 5 列减去向量中的值 b lt matrix rep 1 20 nrow 4 ncol 5 1 2 3 4 5 1 1 5 9 13 17 2
  • 用 t 个随机数生成位向量

    我想生成一个数组 向量v大小的p with t那些和p t零 的位置t ones must是随机的 这是我迄今为止编写的解决方案 但我不确定它是否是最有效的解决方案 另外我从来没用过random device or mt19937 找到他们
  • decltype(some_vector)::size_type 不能用作模板参数

    以下类无法编译 template
  • 并发写入向量

    我知道可以同时读取std vector没有 坏 后果 因为这个操作可以被认为是线程安全的 但对于写操作却不能这样说 但是 我想知道这是否并不总是正确的 例如考虑到我的特定情况 我有一个std vector
  • 使用交换和弹出迭代时擦除向量中的元素

    我想在迭代向量时删除某些元素 但下面的代码会导致 向量迭代器不可递增 断言失败 for auto iter vec begin iter vec end iter if iter isDead std swap iter vec back
  • 使用 int 值初始化向量

    我想用这个 ASCII 代码初始化这个 char 向量 vector
  • 使用迭代器从“查找”或“删除”中删除

    我想知道在 C 中从向量中删除元素的最佳实践是什么 我多次看到人们使用 std remove 查找并删除元素 然后使用擦除从向量中删除元素 但为什么它比使用 find 获取要删除的元素的迭代器然后使用该迭代器的擦除更好呢 Thanks st
  • C++ 中的表达式必须有常量值错误[重复]

    这个问题在这里已经有答案了 可能的重复 有没有办法用非常量变量初始化数组 C https stackoverflow com questions 972705 is there a way to initialize an array wi
  • SVG/矢量图室内导航路由

    我一直在网上搜索有关如何为基于 SVG 的室内平面图实现我自己的点对点导航系统的教程或方法 我已经在网上搜索过 但唯一的选项适用于谷歌地图 不过 我使用 Illustrator 创建了地图 并使用路径 矢量作为 SVG 图像 我不需要为用户
  • Matlab:通过扩展向量来扩展矩阵

    我有一个dxmxn matrix A 解释 对于每个n 有m维度向量d 我想将每个 d 维向量扩展如下 考虑一个向量v维度 d 1 2 d 它是 x 1 x 2 x d 但为了简单起见 我删除了 x 目标是延长v获得一个d d向量形式 1
  • 如何旋转矢量?

    如果我有 1 0 我旋转它90 degrees 1 2PI radians 我应该得到 0 1 我该如何实现这一目标 我在看这一页 http en wikipedia org wiki Rotation matrix并实现了这个 var r
  • Numpy 提取网格数据的子集

    在我的应用程序中 我有一个从 meshgrid 命令获得的值矩阵及其坐标 经度 纬度 我想根据经度和纬度限制提取该矩阵的特定子区域 我已经尝试过这个解决方案 但它不起作用 我需要三个矩阵作为输出 一个用于数据 另外两个用于网格 Lons L
  • 如何在 C 中将向量参数传递给 OpenCL 内核?

    我在将向量类型 uint8 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题 在主机中 我将数据存储在数组中 cl uint dataArr 8 1 2 3 4 5 6 7 8 我的真实数据不仅仅是 1 8 这只是为了便于解
  • OpenLayers 3 中的边界如何工作?

    是否有这样的概念OpenLayers Bounds http dev openlayers org docs files OpenLayers BaseTypes Bounds js htmlOpenLayers 2 x 中的内容仍然存在于
  • Openlayers3:中止绘制交互

    我在 html 中使用绘制交互来手动绘制路线 manual route creation event createRoute click function remove previous interactions map removeInt
  • 错误 C2039:“find”:不是“std”的成员

    我刚刚遇到一个奇怪的错误 它说 find 不是 std 的成员 错误 C2039 find 不是 std 的成员 错误 C3861 查找 未找到标识符 基本上 我想查找是否可以在向量中找到字符串 知道为什么会发生这种情况吗 代码帮助告诉我
  • 使用 OpenLayers 动态添加自定义标记到地图

    我想让用户在地图上添加自定义标记以及每个标记的描述 任何提示 任何教程的链接都会非常有用 您可以注册一个函数来在地图上 点击 事件 当用户单击它时 会自动添加该标记 尝试这样的事情 map is your map created using

随机推荐

  • SharedKeyCredential 不是构造函数。 Azure存储反应应用程序

    我正在尝试使用以下代码将 blockblob 上传到反应应用程序中的 Azure 存储 但是 我收到以下错误 类型错误 SharedKeyCredential 不是构造函数 有任何想法吗 azure 电子邮件受保护 cdn cgi l em
  • MVC 捆绑包和 IIS 虚拟目录(URL 重写)

    我在 IIS 服务器虚拟目录上托管多个应用程序 并使用 URL 重写来简化它们 所有图像和其他资产都是这样手动编写的 path to my content 有正确的输出 path to my content 但捆绑路径如 client js
  • 金钱图能很好地流动吗?

    sql 数据类型 Money 是否映射到 C float 不 它映射到decimal 如果该列允许 null 则它映射到Nullable
  • 将 ASP.NET 应用程序迁移到 IIS7 时出现注册表访问错误

    我正在运行 Windows 7 64 位和 iis7 我正在尝试在 XP 上设置一个以前在 iis6 中的 Web 应用程序 它给了我下面的错误 我已将网络服务用户添加到性能监视器用户组中 但无济于事 对注册表项 Global 的访问是 否
  • 如何通过Java Validator消息传递参数?

    目前 我有类似的东西 NotNull message err required Size min 1 message err required private String firstName In my messages properti
  • bean 验证获取验证组

    是否可以获取调用验证方法的验证器中的组 我有多个组 创建 更新 删除 它们大多数会导致对一个 bean 进行类似的验证 我不想提供多个几乎相同的验证器 并创建实用程序函数来外部化相同的验证代码 我更愿意有一个验证器来处理有关调用验证的组的验
  • graphviz 绘图太宽

    我正在做练习 在 jupyter 笔记本中使用 graphviz 创建决策树 然而 决策树过于宽泛 这是代码 from sklearn tree import export graphviz export graphviz tree out
  • 保存 .php 文件并保存包含内容(可能)

    设置 我有一个标准 php 文件 index php 其中包含两个包含内容 一个用于页眉 header php 一个用于页脚 footer php index php 文件如下所示 索引 php h2 Hello h2 p class ed
  • 检查 Windows C/C++ 中的文件夹/文件是否隐藏/系统

    我正在使用 C STL Boost 编写一个跨平台应用程序 我意识到它们没有提供一种方法来检查文件夹或文件是否隐藏或者是 Windows 中的系统文件 在 Windows 的 C C 中执行此操作的最简单方法是什么 理想情况下 我有一个带有
  • 从 python Fabric 执行远程 bash 命令时“转义”$

    所以我尝试通过 python Fabric 脚本自动设置 arch linux 实例 如下所示 from fabric api import run sudo def server setup communityrepo run echo
  • mingw 应用程序中的清单被忽略

    我有一个老式的 Windows GDI 应用程序 用 C 编写 正在使用 Mingw 工具链进行编译 我的一些用户一直在抱怨 Windows Vista 和 Windows 7 的虚拟存储 其中写入应用程序不应访问的目录的文件会被抽走并存储
  • 可以在 UIWebView 中使用 iframe 吗?

    我想在我的应用程序中添加一个类似 facebook 的按钮 在developer facebook com 中我对此无能为力 是否可以在 UIWebView 中使用 facebook 创建的 iframe 之类的按钮 它认为如果可能的话我可
  • Android Studio 模拟器不断冻结、崩溃并且根本没有响应

    我是一名 Android 开发新手 最近遇到了一些问题 我不知道这是我的硬件问题还是 Android Studio 的问题 但模拟器一直冻结或没有响应 前 2 天 Android Studio 运行良好 但是 之后它无法运行我的应用程序 我
  • 使用python 3.7创建pipenv虚拟环境时出错

    我的操作系统是 ubuntu 20 04 默认的 python 是 3 8 2 我正在尝试使用 Pipenv 和 python 3 7 创建一个虚拟环境 当我运行时出现以下错误pipenv install python 3 7 Creati
  • C++ 将时间字符串转换为纪元的秒数

    我有一个具有以下格式的字符串 2010 11 04T23 23 01Z Z 表示时间为 UTC 我宁愿将其存储为纪元时间 以便于比较 推荐的方法是什么 目前 经过快速搜索 最简单的算法是 1
  • Google App Engine 中的 Spring Boot 应用程序无法连接到 Cloud SQL

    我不确定我还缺少什么 但我的应用程序一开始就失败了 Message The connection attempt failed at org flywaydb core internal jdbc JdbcUtils openConnect
  • 可以使用reduceBykey来更改类型和组合值-Scala Spark吗?

    在下面的代码中 我尝试组合值 val rdd org apache spark rdd RDD String Double sc parallelize List a 1 0 a 3 0 a 2 0 val reduceByKey rdd
  • SQL:HAVING 子句

    请看下面的SQL语句 SELECT datediff d MAX invoice date Now As Date Diff MAX invoice date AS max invoice date customer number AS c
  • 用 C、C++ 检测 Windows 或 Linux [重复]

    这个问题在这里已经有答案了 我正在编写一个跨平台程序 我希望这个程序能够在 Windows 和 Linux 下运行 因此我为这两个平台准备了两个不同的代码段 如果操作系统是Windows 我希望第一个代码段运行 如果是Linux 那么我希望
  • Openlayers 3 将 EPSG:4326 矢量重新投影到 EPSG:3857

    我需要将 GeoJSON 矢量数据从 EPSG 4326 转换为 EPSG 3857 我有一张地图 var olMapDiv document getElementById olmap control map new ol Map targ