gpt4 book ai didi

javascript - Openlayers2 : I want to Draw a buffer on openlayer2 according to user input length

转载 作者:行者123 更新时间:2023-12-03 04:51:53 24 4
gpt4 key购买 nike

我想在openlayer2中绘制一个缓冲区。它可以是多边形或圆形的形式,如圆形所示。我检查了所有绘制功能的官方示例,但没有找到任何有用的 Material 。我附上了一个示例

Buffer of 1000 feet covering openlayer map

<!DOCTYPE html>
<html>
<head>
<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">
<title>Modify Feature</title>
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="stylesheet" href="style1.css" type="text/css">
<style type="text/css">
#controls {
width: 512px;
}
#controlToggle {
padding-left: 1em;
}
#controlToggle li {
list-style: none;
}
</style>
<script src="OpenLayers.js"></script>
<script type="text/javascript">
var map, vectors, controls;
function init(){
map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});
OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';

// allow testing of specific renderers via "?renderer=Canvas", etc


vectors = new OpenLayers.Layer.Vector("Vector Layer", {

});

map.addLayers([wms, vectors]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());

if (console && console.log) {
function report(event) {
console.log(event.type, event.feature ? event.feature.id : event.components);
}
vectors.events.on({
"beforefeaturemodified": report,
"featuremodified": report,
"afterfeaturemodified": report,
"vertexmodified": report,
"sketchmodified": report,
"sketchstarted": report,
"sketchcomplete": report
});
}
controls = {



regular: new OpenLayers.Control.DrawFeature(vectors,
OpenLayers.Handler.RegularPolygon,
{handlerOptions: {sides: 5}}),
modify: new OpenLayers.Control.ModifyFeature(vectors)
};

for(var key in controls) {
map.addControl(controls[key]);
}

map.setCenter(new OpenLayers.LonLat(0, 0), 3);
document.getElementById('noneToggle').checked = true;
}

function update() {
// reset modification mode
controls.modify.mode = OpenLayers.Control.ModifyFeature.RESHAPE;

var resize = document.getElementById("resize").checked;
if(resize) {
controls.modify.mode |= OpenLayers.Control.ModifyFeature.RESIZE;
var keepAspectRatio = document.getElementById("keepAspectRatio").checked;
if (keepAspectRatio) {
controls.modify.mode &= ~OpenLayers.Control.ModifyFeature.RESHAPE;
}
}

controls.modify.createVertices = document.getElementById("createVertices").checked;


}

function toggleControl(element) {
for(key in controls) {
var control = controls[key];
if(element.value == key && element.checked) {
control.activate();
} else {
control.deactivate();
}
}
}

</script>
</head>
<body onload="init()">
<h1 id="title">OpenLayers 2 Modify Feature Example</h1>
<div id="tags">
vertices, digitizing, draw, drawing
</div>
<div id="shortdesc">A demonstration of the ModifyFeature control for editing vector features.</div>
<div id="map" class="smallmap"></div>
<div id="controls">
<ul id="controlToggle">
<li>
<input type="radio" name="type" value="none" id="noneToggle"
onclick="toggleControl(this);" checked="checked" />
<label for="noneToggle">navigate</label>
</li>



<li>
<input type="radio" name="type" value="regular" id="regularToggle" onclick="toggleControl(this);" />
<label for="regularToggle">draw regular polygon</label>
<label for="sides"> - sides</label>
<input id="sides" type="text" size="2" maxlength="2"
name="sides" value="5" onchange="update()" />
<ul>


</ul>
</li>
<li>
<input type="radio" name="type" value="modify" id="modifyToggle"
onclick="toggleControl(this);" />
<label for="modifyToggle">modify feature</label>
<ul>


<li>
<input id="resize" type="checkbox"
name="resize" onchange="update()" />
<label for="resize">allow resizing</label>
(<input id="keepAspectRatio" type="checkbox"
name="keepAspectRatio" onchange="update()" checked="checked" />
<label for="keepAspectRatio">keep aspect ratio</label>)
</li>

</ul>
</li>
</ul>
</div>
</body>
</html>

最佳答案

如果你想围绕一个点创建一个圆,你可以使用openlayers内置函数

OpenLayers.Geometry.Polygon.createRegularPolygon = function(origin, radius, sides, rotation)

,传递用户指定的radio。

否则,如果您想缓冲任意多边形,您可以使用 JSTS 库提供的缓冲功能。

您可以在此处找到 openlayers 的示例 http://bjornharrtell.github.io/jsts/examples/buffer.html

关于javascript - Openlayers2 : I want to Draw a buffer on openlayer2 according to user input length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42622091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com