获取OpenLayers中绘制的特征的坐标 [英] get coordinates of drawn feature in OpenLayers

查看:119
本文介绍了获取OpenLayers中绘制的特征的坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用OpenLayers 3创建一个在线地图。

I'm trying to create an online map using OpenLayers 3.

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

I'm brand new to using OpenLayers, and all I'm trying to do is to get the coordinates of the points, lines, polygons that I drew on the map. I'm aware that there is a featuresadded parameter available, but I'm not able to implement it correctly.

任何人都可以指出正确的方向如何获得绘制特征的坐标(在alert()或console.log中)?

Can anybody point me in the right direction how to get the coordinates of a drawn feature (either in an alert() or 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>


推荐答案

注册 ol.source.Vector 监听器 c $ c>等待直到绘制的特征被添加:

Register a listener on ol.source.Vector and wait until the drawn feature is added:

source.on('addfeature', function(evt){
    var feature = evt.feature;
    var coords = feature.getGeometry().getCoordinates();
});

这篇关于获取OpenLayers中绘制的特征的坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆