OpenLayers测量距离和面积

Posted jeely

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenLayers测量距离和面积相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html>
  <head>
    <title>测量距离和面积</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link rel="stylesheet" href="./OpenLayers-2.12/theme/default/style.css" type="text/css" />
    <link rel="stylesheet" href="./css/style.css" type="text/css">
    <style type="text/css">
        #controlToggle li 
            list-style: none;
        
        p 
            width: 512px;
        
        #options 
            position: relative;
            width: 512px;
        
        #output 
            float: right;
        
        /* avoid pink tiles */
        .olImageLoadError 
            background-color: transparent !important;
        
    </style>
    <script src="./OpenLayers-2.12/lib/OpenLayers.js"></script>
    <script type="text/javascript">
        var map, measureControls;
        function init()
            map = new OpenLayers.Map(map);     
            var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
                "http://vmap0.tiles.osgeo.org/wms/vmap0?", layers: basic); 
            map.addLayers([wmsLayer]);
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            map.addControl(new OpenLayers.Control.MousePosition());     
            // style the sketch fancy
            var sketchSymbolizers = 
                "Point": 
                    pointRadius: 4,
                    graphicName: "square",
                    fillColor: "white",
                    fillOpacity: 1,
                    strokeWidth: 1,
                    strokeOpacity: 1,
                    strokeColor: "#333333"
                ,
                "Line": 
                    strokeWidth: 3,
                    strokeOpacity: 1,
                    strokeColor: "#666666",
                    strokeDashstyle: "dash"
                ,
                "Polygon": 
                    strokeWidth: 2,
                    strokeOpacity: 1,
                    strokeColor: "#666666",
                    fillColor: "white",
                    fillOpacity: 0.3
                
            ;
            var style = new OpenLayers.Style();
            style.addRules([
                new OpenLayers.Rule(symbolizer: sketchSymbolizers)
            ]);
            var styleMap = new OpenLayers.StyleMap("default": style);
            
            // allow testing of specific renderers via "?renderer=Canvas", etc
            var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
            renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;

            measureControls = 
                line: new OpenLayers.Control.Measure(
                    OpenLayers.Handler.Path, 
                        persist: true,
                        handlerOptions: 
                            layerOptions: 
                                renderers: renderer,
                                styleMap: styleMap
                            
                        
                    
                ),
                polygon: new OpenLayers.Control.Measure(
                    OpenLayers.Handler.Polygon, 
                        persist: true,
                        handlerOptions: 
                            layerOptions: 
                                renderers: renderer,
                                styleMap: styleMap
                            
                        
                    
                )
            ;
            
            var control;
            for(var key in measureControls) 
                control = measureControls[key];
                control.events.on(
                    "measure": handleMeasurements,
                    "measurepartial": handleMeasurements
                );
                map.addControl(control);
            
            
            map.setCenter(new OpenLayers.LonLat(0, 0), 3);
            
            document.getElementById(noneToggle).checked = true;
        
        
        function handleMeasurements(event) 
            var geometry = event.geometry;
            var units = event.units;
            var order = event.order;
            var measure = event.measure;
            var element = document.getElementById(output);
            var out = "";
            if(order == 1) 
                out += "测量距离: " + measure.toFixed(3) + " " + units;
             else 
                out += "测量面积: " + measure.toFixed(3) + " " + units + "<sup>2</" + "sup>";
            
            element.innerHTML = out;
        

        function toggleControl(element) 
            for(key in measureControls) 
                var control = measureControls[key];
                if(element.value == key && element.checked) 
                    control.activate();
                 else 
                    control.deactivate();
                
            
        
        
    </script>
  </head>
  <body onload="init()">
    <div id="map" class="smallmap"></div>
    <div id="options">
        <div id="output">
        </div>
        <ul id="controlToggle">
            <li>
                <input type="radio" name="type" value="none" id="noneToggle" onclick="toggleControl(this);" checked="checked" />
                <label for="noneToggle">导航</label>
            </li>
            <li>
                <input type="radio" name="type" value="line" id="lineToggle" onclick="toggleControl(this);" />
                <label for="lineToggle">测量距离</label>
            </li>
            <li>
                <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);" />
                <label for="polygonToggle">测量面积</label>
            </li>
        </ul>
    </div>
  </body>
</html>

 

以上是关于OpenLayers测量距离和面积的主要内容,如果未能解决你的问题,请参考以下文章

如何在openlayers中测量从圆心到边缘的距离

ArcGisJS实现地图常用工具条距离测量和面积测量(非官方实例)

百度地图实现测量面积和测量距离功能

百度地图实现测量面积和测量距离功能

ArcGIS微课1000例0017:ArcGIS测量距离和面积工具的巧妙使用

ArcGIS微课1000例0017:ArcGIS测量距离和面积工具的巧妙使用