summaryrefslogtreecommitdiff
path: root/misc/openlayers/examples/intersects.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/examples/intersects.html')
-rw-r--r--misc/openlayers/examples/intersects.html193
1 files changed, 193 insertions, 0 deletions
diff --git a/misc/openlayers/examples/intersects.html b/misc/openlayers/examples/intersects.html
new file mode 100644
index 0000000..31bdee0
--- /dev/null
+++ b/misc/openlayers/examples/intersects.html
@@ -0,0 +1,193 @@
+<!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>Geometry Intersections</title>
+ <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+ <!--[if lte IE 6]>
+ <link rel="stylesheet" href="../theme/default/ie6-style.css" type="text/css">
+ <![endif]-->
+ <link rel="stylesheet" href="style.css" type="text/css">
+ <style type="text/css">
+ html, body {
+ margin: 0;
+ padding: 1em;
+ font: 0.9em Verdana, Arial, sans serif;
+ }
+ input, select, textarea {
+ font: 0.9em Verdana, Arial, sans-serif;
+ }
+ h2 {
+ margin-top: 0.75em;
+ font-size: 1.6em;
+ }
+ #leftcol {
+ position: absolute;
+ top: 0;
+ left: 1em;
+ padding: 0;
+ width: 455px;
+ }
+ #map {
+ width: 450px;
+ height: 225px;
+ border: 1px solid #ccc;
+ }
+ #input {
+ width: 450px;
+ }
+ #text {
+ font-size: 0.85em;
+ margin: 1em 0 1em 0;
+ width: 100%;
+ height: 10em;
+ }
+ #info {
+ position: relative;
+ padding: 2em 0;
+ margin-left: 470px;
+ }
+ #features {
+ font-size: 0.8em;
+ width: 100%;
+ height: 200px;
+ }
+ #intersections {
+ font-size: 0.8em;
+ width: 100%;
+ height: 200px;
+ }
+ p {
+ margin: 0;
+ padding: 0.75em 0 0.75em 0;
+ }
+ </style>
+ <script src="../lib/Firebug/firebug.js"></script>
+ <script src="../lib/OpenLayers.js"></script>
+ <script type="text/javascript">
+ var map, vectors, geojson;
+ function init(){
+ map = new OpenLayers.Map('map');
+ vectors = new OpenLayers.Layer.Vector(
+ "Vector Layer",
+ {isBaseLayer: true}
+ );
+
+ map.addLayers([vectors]);
+ map.addControl(new OpenLayers.Control.MousePosition());
+
+ var panel = new OpenLayers.Control.EditingToolbar(vectors);
+ map.addControl(panel);
+
+ geojson = new OpenLayers.Format.GeoJSON();
+
+ map.setCenter(new OpenLayers.LonLat(0, 0), 1);
+ }
+
+ function serialize() {
+ var str = geojson.write(vectors.features, true);
+ document.getElementById('features').value = str;
+ }
+
+ function deserialize() {
+ var element = document.getElementById('text');
+ var features = geojson.read(element.value);
+ var bounds;
+ if(features) {
+ if(features.constructor != Array) {
+ features = [features];
+ }
+ for(var i=0; i<features.length; ++i) {
+ if (!bounds) {
+ bounds = features[i].geometry.getBounds();
+ } else {
+ bounds.extend(features[i].geometry.getBounds());
+ }
+
+ }
+ vectors.addFeatures(features);
+ map.zoomToExtent(bounds);
+ var plural = (features.length > 1) ? 's' : '';
+ element.value = features.length + ' feature' + plural + ' added'
+ } else {
+ element.value = 'Bad input';
+ }
+ }
+
+ function intersect() {
+ var features = vectors.features;
+ var feat1, feat2, intersects12, intersects21;
+ var parts = [];
+ // reset attributes
+ for(var i=0; i<features.length; ++i) {
+ features[i].attributes.intersectsWith = [];
+ }
+ for(var i=0; i<features.length-1; ++i) {
+ feat1 = features[i];
+ for(var j=i+1; j<features.length; ++j) {
+ feat2 = features[j];
+ intersects12 = feat1.geometry.intersects(feat2.geometry);
+ if(intersects12) {
+ feat1.attributes.intersectsWith.push("f" + j);
+ parts.push("f" + i + " intersects f" + j + "\n");
+ }
+ intersects21 = feat2.geometry.intersects(feat1.geometry);
+ if(intersects21) {
+ feat2.attributes.intersectsWith.push("f" + i);
+ parts.push("f" + j + " intersects f" + i + "\n");
+ }
+ if(intersects12 != intersects21) {
+ parts.push("trouble with " + i + " and " + j + "\n");
+ }
+ }
+ }
+ if(parts.length > 0) {
+ document.getElementById("intersections").value = parts.join("");
+ } else {
+ document.getElementById("intersections").value = "no intersections";
+ }
+ }
+
+ // preload images
+ (function() {
+ var roots = ["draw_point", "draw_line", "draw_polygon", "pan"];
+ var onImages = [];
+ var offImages = [];
+ for(var i=0; i<roots.length; ++i) {
+ onImages[i] = new Image();
+ onImages[i].src = "../theme/default/img/" + roots[i] + "_on.png";
+ offImages[i] = new Image();
+ offImages[i].src = "../theme/default/img/" + roots[i] + "_on.png";
+ }
+ })();
+
+ </script>
+ </head>
+ <body onload="init()">
+ <div id="leftcol">
+ <h1 id="title">OpenLayers Geometry Intersection Example</h1>
+ <div id="tags">
+ intersection, geometry
+ </div>
+ <p id="shortdesc">
+ Use of geometry.intersects method for testing geometry intersections.
+ </p>
+ <div id="map" class="smallmap"></div>
+ <div id="input">
+ <textarea id="text"></textarea>
+ <input type="button" value="add feature" onclick="deserialize();" />
+ <span id="selected"></span>
+ </div>
+ </div>
+ <div id="info">
+ <p>Features</p>
+ <input type="button" value="refresh" onclick="serialize();"><br>
+ <textarea id="features"></textarea>
+ <p>Intersections</p>
+ <input type="button" value="intersect all" onclick="intersect();"><br>
+ <textarea id="intersections"></textarea>
+ </div>
+ </body>
+</html>