javascript - Openlayers 3 坐标错误

标签 javascript openstreetmap openlayers-3

我正在使用 Openlayers 3。为了打开 map ,我使用 OpenStreetMap 生成的图 block 。当我尝试使用 polyFeature.getGeometry().getCooperatives() 获取坐标时,它为我提供了错误的坐标,数字太大了。像这样的东西: “X”:3151594, “Y”:5953506.5

如何获取法线坐标???

<html>
<head>
    <title>Draw and modify features example</title>
    <script src="jquery-1.11.2.min.js"></script>
    <link rel="stylesheet" href="bootstrap.min.css">
    <script src="bootstrap.min.js"></script>
    <link rel="stylesheet" href="ol.css" type="text/css">
    <script src="ol.js"></script>

</head>
<body>
    <div class="container-fluid">

        <div class="row-fluid">
            <div class="span12">
                <div id="map" class="map"></div>
            </div>
            <form class="form-inline">
                <label>Geometry type &nbsp;</label>
                <select id="type">
                    <option value="Point">Point</option>
                    <option value="LineString">LineString</option>
                    <option value="Polygon">Polygon</option>
                </select>
            </form>
        </div>
        <input type="button" value="Save Coordinates" onclick="SaveCoordinates()">

    </div>
    <script type="text/javascript">
            var icons = [
                "stop_sign.png",
                "Argentina_P-32.svg.png"
            ];

            var source = new ol.source.XYZ({
                    url : 'tiles/{z}/{x}/{y}.png'
                });

            var map = new ol.Map({
                    layers : [new ol.layer.Tile({
                            source : source
                        })],
                    target : 'map',
                    view : new ol.View({
                        center : [3300000, 6000000],
                        zoom : 9
                    })
                });

            var features = new ol.Collection();
            var featureOverlay = new ol.layer.Vector({
                    source : new ol.source.Vector({
                        features : features
                    }),
                    style : new ol.style.Style({
                        fill : new ol.style.Fill({
                            color : 'rgba(255, 255, 255, 0.2)'
                        }),
                        stroke : new ol.style.Stroke({
                            color : '#ffcc33',
                            width : 2
                        }),
                        image : new ol.style.Icon({
                            anchor : [0.5, 0.5],
                            offset : [0, 0],
                            opacity : 1,
                            scale : 1,
                            src : icons[1]
                        })
                    })
                });
            featureOverlay.setMap(map);

            var modify = new ol.interaction.Modify({
                    features : features,
                    deleteCondition : function (event) {
                                    return ol.events.condition.shiftKeyOnly(event) && ol.events.condition.singleClick(event);
                    },
                });

            map.addInteraction(modify);

            var draw; // global so we can remove it later
            function addInteraction() {
                draw = new ol.interaction.Draw({
                        features : features,
                        type : /** @type {ol.geom.GeometryType} */
                        (typeSelect.value)

                    });
                map.addInteraction(draw);
            }

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

            typeSelect.onchange = function (e) {
                map.removeInteraction(draw);
                addInteraction();
            };

            addInteraction();

            function SaveCoordinates() {
                var polyFeatures = featureOverlay.getSource();

                var coordsPoligon = [];
                var coordsPoints = [];
                var coordsLine = [];
                var i = 0;
                var j = 0;
                var z = 0;
                polyFeatures.forEachFeature(function (polyFeature) {
                    if (polyFeature.getGeometry().getType() === 'Polygon') {
                        coordsPoligon[i] = polyFeature.getGeometry().getCoordinates();
                        i++;
                    } else if (polyFeature.getGeometry().getType() === 'Point') {
                        coordsPoints[j] = polyFeature.getGeometry().getCoordinates();

                        j++;
                    } else if (polyFeature.getGeometry().getType() === 'LineString') {
                        coordsLine[z] = polyFeature.getGeometry().getCoordinates();
                        z++;
                    }
                });

                console.log(coordsPoligon);
                console.log(coordsLine);
                console.log(coordsPoints);

                var markers = {
                    "points" : coordsPoints,
                    "lines" : coordsLine,
                    "polygons" : coordsPoligon
                };
                $.ajax({
                    url : 'http://localhost:54823/LayerDataNew',
                    type : 'POST',
                    dataType : 'application/json',
                    data : markers
                });
}
</script>
</body>
</html>

最佳答案

您的 map 采用 EPSG:3857 格式,因此您获得的坐标以米为单位。如果您想要以度为单位的坐标,请使用:

var lonlat = ol.proj.toLonLat([3151594, 5953506.5]);

Link to api

关于javascript - Openlayers 3 坐标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31646759/

相关文章:

java - OSMDroid - map 不显示

leaflet - 在传单js的搜索框中选择地址后获取地址详细信息

javascript - 如何在 OpenLayers3 中对要素进行动画处理?

javascript - 如何关闭使用范围交互后留下的蓝点

服务器端的 Javascriptalert()

javascript - 在 Chrome 中实时编辑 Javascript,就像在 Visual Studio 中编辑并继续

android - Gluon Maps 不加载 map 并抛出异常

openlayers - 如何将 OpenLayers 3 与 Proj4js 一起使用

javascript - 下拉菜单在使用 fabric js 的 Materialise 设计中不起作用

javascript - `function` 会生成 ES6 类(Babel)的实例吗?