获取 OpenLayers 中绘制要素的坐标

2024-03-29

我正在尝试使用 OpenLayers 3 创建在线地图。

我对使用 OpenLayers 是全新的,我想做的就是获取我在地图上绘制的点、线、多边形的坐标。我知道有一个 featuresadded 参数可用,但我无法正确实现它。

有人能给我指明如何获取绘制特征的坐标(在alert() 或console.log 中)的正确方向吗?

万分感谢!!

这是我的代码:

<html>
<head>
    <script src="http://openlayers.org/en/v3.3.0/build/ol.js" type="text/javascript"></script>
    <link rel="stylesheet" href="ol.css" type="text/css">
    <style type="text/css">
        body {
            font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
            font-size: small;
        }
        #map {
            clear: both;
            position: relative;
            border: 1px solid black;
        }            
       #wrapper {
           width: 337px;
           height: 50px;                            
       }            
       #location {
          float: right;
          font-family: Arial, Verdana, sans-serif; 
          font-size: 12px; 
          color: #483D8B;
          background-color: white;
       }
       #nodelist{
          font-family: Arial, Verdana, sans-serif; 
          font-size: 14px; 
          color: #000000;
          font-style: normal;
          background-color: white;
       }
</style>
<script type="text/javascript">
var map;
var draw;
var transformed_coordinate;
var vector;

function init() {
    var view = new ol.View({
    center: ol.proj.transform([13.1929, 55.718],'EPSG:4326', 'EPSG:3857'),
    zoom: 12
    });

var myZoom = new ol.control.Zoom();
var myZoomSlider = new ol.control.ZoomSlider();
var zoomToExtentControl = new ol.control.ZoomToExtent({
    extent: [1453297.22,7490484.81,1483872.03,7513415.91]
});

var myScaleLine = new ol.control.ScaleLine()

var neighborhood = new ol.source.ImageWMS({
    url: 'http://localhost:8090/geoserver/project/wms',
        params: {'LAYERS': 'project:Neighborhood'}
});

var roads = new ol.source.ImageWMS({
    url: 'http://localhost:8090/geoserver/project/wms',
        params: {'LAYERS': 'project:Roads_all'}
});

var source = new ol.source.Vector({wrapX: false});

vector = new ol.layer.Vector({
    source: source,
    style: new ol.style.Style({
        fill: new ol.style.Fill({
            color: 'rgba(0, 255, 0, 0.5)'
        }),
        stroke: new ol.style.Stroke({
            color: '#ffcc33',
            width: 2
        }),
        image: new ol.style.Circle({
            radius: 7,
            fill: new ol.style.Fill({
            color: '#ffcc33'
            })
        })
    })      
});

var layers = [
    new ol.layer.Image({
        source: neighborhood
    }),
    new ol.layer.Image({
        source: roads
    }),
    vector
]   

map = new ol.Map({
    layers: layers,
    target: 'map',
    view: view
}); 

map.addControl(myZoom);
map.addControl(myZoomSlider);
map.addControl(zoomToExtentControl);
map.addControl(myScaleLine);

map.on('singleclick', function(evt){
    var coord = evt.coordinate;
    transformed_coordinate = ol.proj.transform(coord, "EPSG:3857", "EPSG:4326");
    //console.log(transformed_coordinate);
})

function onFeaturesAdded(event){
    var bounds = event.features[0].geometry.getBounds();
    var answer = "bottom: " + bounds.bottom  + "\n";
    answer += "left: " + bounds.left  + "\n";
    answer += "right: " + bounds.right  + "\n";
    answer += "top: " + bounds.top  + "\n";
    alert(answer);
}

var typeSelect = document.getElementById('type');

function addInteraction() {
    var value = typeSelect.value;
    if (value !== 'None') {
        var geometryFunction, maxPoints;
        if (value === 'Square') {
        value = 'Circle';
        geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
        } else if (value === 'Box') {
            value = 'LineString';
            maxPoints = 2;
            geometryFunction = function(coordinates, geometry) {
                if (!geometry) {
                    geometry = new ol.geom.Polygon(null);
                }
                var start = coordinates[0];
                var end = coordinates[1];
                geometry.setCoordinates([
                    [start, [start[0], end[1]], end, [end[0], start[1]], start]
                ]);
                return geometry;
            };
        }
        draw = new ol.interaction.Draw({
            source: source,
            type: /** @type {ol.geom.GeometryType} */ (value),
            geometryFunction: geometryFunction,
            maxPoints: maxPoints
        });
        map.addInteraction(draw);
    }
}

/**
 * Let user change the geometry type.
 * @param {Event} e Change event.
 */
typeSelect.onchange = function(e) {
    map.removeInteraction(draw);
    addInteraction();
};

addInteraction();
} //end init


</script>
</head>

<body onload="init()">  
<div id="map" style="width: 800px; height: 600px"></div>
<form class="form-inline">
    <label>Geometry type &nbsp;</label>
    <select id="type">
        <option value="None">None</option>
        <option value="Point">Point</option>
        <option value="LineString">LineString</option>
        <option value="Polygon">Polygon</option>
    </select>
</form>
</body>
</html>

注册一个listener http://openlayers.org/en/v3.10.0/apidoc/ol.source.VectorEvent.html#event:addfeature on ol.source.Vector并等待添加绘制的特征:

source.on('addfeature', function(evt){
    var feature = evt.feature;
    var coords = feature.getGeometry().getCoordinates();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 OpenLayers 中绘制要素的坐标 的相关文章

  • 使用详细信息和摘要标签作为可折叠内联元素

    我正在努力研究这个问题的解决方案 找到一种方法来实现可折叠按钮 或其他类似对象 这样 它们可以在同一行中使用 单击时 其内容显示在按钮所在行和下一行之间 他们反应敏捷 内容的样式独立于标题 我制作这个 gif 是为了更好地了解我想要获得什么
  • 禁用浏览器状态栏文本

    背景 现代浏览器取消了经典的状态栏 而是在窗口底部绘制一个小工具提示 在悬停 焦点时显示链接目标 下面的屏幕截图说明了这种行为的示例 在我的例子中是不需要的 问题 有没有一种可移植的方法来禁用这些工具提示 在我的特殊情况下 我是否遗漏了这样
  • 使用 window.print 内容将网页下载为 pdf

    我想要一个链接 当单击该链接时 会自动开始下载网页的可打印版本 我正在使用Moodle 我想要的内容是完全相同的如果我使用 ctrl p 下载页面并保存为 pdf 或使用 a href Download web page a 我正是想要该内
  • GWT 与 ScriptSharp 的优缺点 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何隐藏 webpack-dev-server 日志?

    一旦 webpack dev server 启动 控制台将输出 wds Project is running at https 127 0 0 1 3002 wds webpack output is served from wds Con
  • 有没有办法覆盖 Google 路线服务缩放值?

    我使用下面的代码来获取两点之间的路线 directionsService route request function response status if status google maps DirectionsStatus OK di
  • Angular:将数据从工厂 ajax 调用传递回我的控制器

    我一直在使用 Angular 并且已经从使用本地数据 似乎工作正常 转向尝试通过工厂中的 ajax 调用来填充我的视图 这是代码 div h2 Get data using a Factory h2 div div div
  • 使用递归获取嵌套对象中的所有父对象

    我有以下对象 const object id 1 name a children id 2 name b children id 3 name c id 4 name d 我需要一个接受对象和最后一个子对象的
  • 在 Javascript 中获取类的所有实例

    我以为这个问题已经有了答案 但我似乎找不到答案 如何在 Javascript 中的此类的所有实例上运行特定的类方法 这必须在我不知道实例名称的情况下完成 我想我可以在类中使用某种静态变量来存储所有实例 但这在 JS 中似乎不存在 那么如何在
  • Javascript Replace() 仅替换第一个匹配项[重复]

    这个问题已经存在了 你好 请参阅这里的 jsfiddle http jsfiddle net moolood jU9QY http jsfiddle net moolood jU9QY var toto bien address 1 bie
  • AJV自定义关键字验证

    我正在使用 AJV 库来验证我的 JSON 架构 我希望能够验证Startdate成为一个字符串 如果不是字符串 则应将其转换为N A 目前 它仅转换undefined to N A 但是 在这些情况下 它不会按预期工作 null gt 空
  • 如何通过 JavaScript 函数在 HTML5 画布上绘制多边形

    我希望用户能够单击画布上的某个位置 多边形就会出现在上面 div class rounded div
  • 通过 AJAX 加载 Google Maps API,控制台错误

    我正在使用 jquery javascript ajax 和 php 构建一个完全动态的网站 当我单击导航链接时 浏览器会使用 ajax 打开该页面 所以基本上所有页面都加载在同一个index php 中 如果我转到 位置 选项卡 其中有谷
  • 我想从 Cakefile 运行 d3

    我想从命令行执行一些 d3 代码 最初我只是尝试了类似的方法 task data Build some data with d3 gt d3 require lib d3 v2 console log d3 version d3 versi
  • 如何在浏览器调整大小时调整div大小

    是的 所以我不使用粘性页脚 而是决定创建一个 jQuery 函数来更改 mainContent div 的大小 以便页脚可以很好地适应 基本上我想做的是 mainContent height 100 40px Where footer he
  • 如何查看远程脚本被阻止时返回的内容

    我在我的 web 应用程序中使用 Google 托管的 jQuery ajax googleapis com ajax libs jquery 1 8 3 jquery min js 作为错误诊断的一部分 我有一个 window onerr
  • 将数组中的项目移动到最后一个位置

    我有一系列对象 我想将选定的对象移动到数组中的最后一个位置 我如何在 javascript 或 jquery 中执行此操作 这是我的一些代码 var sortedProductRow this product row for var s i
  • 在 Firefox 中单击桌面通知时如何将焦点移至选项卡?

    我正在一个网站中实现桌面通知 该网站会在新消息到达时显示通知 我希望当用户单击通知时 打开网站的浏览器选项卡能够获得焦点 我可以使用以下代码在 Chrome 中实现此功能 var n new Notification Title body
  • Google 自定义搜索“热门查询”错误请求错误

    在 Google CSE 中 当我尝试获取Popular Queries 我在FireBug Console 网络错误 400 错误请求 http www google com cse api xxxxxxxxx xxxxxxx cse x
  • Firefox 中的代理设置不会“粘连”

    在家里我们有一个代理服务器 在工作中我们不会 Firefox 在这方面令人恼火 每当我启动它时 它都会默认使用代理服务器 如果我执行 工具 gt 选项 gt 设置 并选择 无代理 则没有问题 但是 如果我关闭 Firefox 并重新启动它

随机推荐

  • 使用 Flexjson 将 JSON 列表反序列化为对象列表

    我正在尝试反序列化以下 json books id 1 name book 1 id 2 name book 2 进入列表 之前用这个 json 工作过 id 1 name book 1 id 2 name book 2 使用此代码 Lis
  • data.table 将 NA 替换为多列的均值和 id

    如果我有以下数据表 dat lt data table id c 1 1 1 1 2 2 2 2 var1 c NA 1 2 2 1 1 2 2 var2 c 4 4 4 4 5 5 NA 4 var3 c 4 4 4 NA 5 5 5 4
  • setTimeout 函数中未定义的 JavaScript 变量

    我有以下代码 for var i 0 i lt markers length i var lat markers i 0 var lng markers i 1 var img markers i 2 var info markers i
  • 重命名 Azure Active Directory

    目前 我有一个与我在 Azure 平台工作的公司的一组订阅关联的 Active Directory 但是 默认目录 AD 位于域上forenamesurnamehotmailco where forenamesurname是一名不再在这里工
  • jquery iframe跨域动态高度

    仅使用 jquery 且没有庞大的插件 这是否可能 我知道有很多插件和替代品 我正在寻找最短 最强大和最干净的 最好依赖jquery 这里有基本的 jsfiddle 来尝试你的想法 http jsfiddle net 3vPJd http
  • 有没有办法将这个 PHP 放入数组并简化它?

    以下代码加载在指定文件夹 单独定义 中找到的所有 php 文件 有没有办法将其放入数组中以简化代码 只有几个变量发生变化 但本质上代码会重复多次 The General Files the general opendir FRAMEWORK
  • 登录和会话 PHP

    我在检查会话时遇到一些问题 要访问页面 我需要激活会话 登录流程 Connect to mysql server require reservation connect php Function to sanitize values rec
  • 如何就地初始化数组?

    如何在不复制或移动构造临时元素的情况下初始化数组 当元素有明确的deleted 复制或移动构造函数 仅当元素具有默认构造函数或具有所有默认参数的构造函数时 我才能初始化数组 并且执行以下操作之一 a 明确声明数组 b 直接初始化和零初始化数
  • 读取通配符文件名的 Quartz 作业仅获取一个文件

    使用骡子 3 7 如果我的目录中有 5 个扩展名为 csv 的文件 则以下代码仅选取这五个文件之一 如果我删除石英触发器并将其设为普通文件 inbound endpoint 它将拾取所有五个文件 看起来很简单 但并没有按预期工作 Thank
  • 在 Silverlight 中绑定 ComboBox.SelectedItem(更多)

    与我之前的问题相关 在 Silverlight 中绑定 ComboBox SelectedItem https stackoverflow com questions 855519 binding combobox selecteditem
  • 基于流的路由和开放流

    这可能不是典型的 stackoverflow 问题 我的一位同事一直猜测基于流的路由将成为网络领域的下一个重大事件 Openflow http www openflow org提供在大型应用 IT数据中心等中使用低成本交换机的技术 取代Ci
  • 最小化时,窗口应用程序在任务栏上呈橙色闪烁

    我有一个窗口应用程序 当我最小化任务栏上的窗口应用程序以在另一个应用程序上工作时 我们有一种工具可以将消息从一个窗口应用程序发送到另一个窗口应用程序 因此 我的第一个 win 应用程序被最小化 现在我打开另一个 win 应用程序 然后向第一
  • C++11 的序列压缩函数?

    使用新的基于范围的 for 循环 我们可以编写如下代码 for auto x Y IMO 是哪个huge改进自 例如 for std vector
  • Websphere 8.5 Web 服务未部署

    我很难让 Web 服务在 Websphere 上运行 我有一个 ejb jar 它使用 JAXWS 注释 WebService 定义了 Web 服务 然后将该 ejb jar 打包到耳朵中 我已成功将 Ear 部署到 Glassfish 上
  • 是否可以将 javascript 嵌入到 SSRS 报告中?

    SQL Server 报表可以嵌入 vbscript 并在客户端执行 但是使用 javascript 也可以完成同样的操作吗 我认为能够在客户端执行 jQuery 和 CSS 操作来创建更具交互性的深入体验将是非常有用的 在我看来 Repo
  • 选择 Node.js 上 Bookshelf、MySQL、Knex 在两个日期之间创建的对象

    我需要获取两次之间创建的对象的列表 我能够通过编写 SQL 查询来获取数据 但我需要通过 Bookshelf 编写这个查询 我的简单查询 router route locations fetch all locations get func
  • UINavigationController 内的 viewController 是否可以有不同的方向?

    我希望所有视图控制器仅支持纵向模式 除了一个视图控制器 我们将其称为 横向支持 ViewController 它也应该支持横向模式 问题是 当我在横向模式下处于 LandscapeSupportViewController 中 然后推送一个
  • 如何在 wpf c# Visual Studio 中使用标签或文本块的单击事件?

    我正在开发桌面应用程序 我收到建议使用 wpf 而不是 winforms 当我单击标签时 我想转到另一个表单 窗口 但找不到标签和文本块的单击事件 谁能告诉我鼠标左键按下事件的用途是什么 谁能告诉我鼠标左键按下事件的用途是什么 例如 它可以
  • 例如,当编组到 XML 时,我是否可以强制 JAXB 不将“转换为”?

    我有一个使用 JAXB 编组为 XML 的对象 一个元素包含一个包含引号 的字符串 生成的 XML 具有 quot 存在的地方 尽管这通常是首选 但我需要我的输出匹配legacy系统 如何强制 JAXB 不转换 HTML 实体 感谢您的答复
  • 获取 OpenLayers 中绘制要素的坐标

    我正在尝试使用 OpenLayers 3 创建在线地图 我对使用 OpenLayers 是全新的 我想做的就是获取我在地图上绘制的点 线 多边形的坐标 我知道有一个 featuresadded 参数可用 但我无法正确实现它 有人能给我指明如