OpenLayers 根据坐标动态画多边形

  找了一上午,发现都是鼠标点击画框的,那为什么不标明了是 “鼠标”点击 呢?

  想实现的功能是数据库检索坐标集合,然后根据分组提取4点坐标,最后把多个多边形形成图层放在地图上。

  最后的实现:

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>检索各单位泊位信息</title>
  6     <link rel="stylesheet" href="ol3/ol.css">
  7     <style>
  8         #map{
  9             width: 100%;
 10             height: 500px;
 11         }
 12     </style>
 13 </head>
 14 <body>
 15     <div id="map">
 16
 17     </div>
 18     <form id = "form">
 19         <input type="text" id="deptCode" name="deptCode">
 20     </form>
 21     <button onclick="check()" value="检查">检查</button>
 22
 23 <script src="../js/ol.js" type="text/javascript"></script>
 24
 25 <script type="text/javascript">
 26 var map;
 27 var check = function(){
 28     $.ajax({
 29         type: "POST",
 30         // 表单数据
 31         data: $("#form").serializeObject(),
 32         // 访问后台路径
 33         url: _contextPath + ‘/dictBerth/dictBerthByDept‘,
 34         // 数据类型
 35         dataType: "json",
 36         success: function(data) {
 37             //总泊位数组
 38             var coordinatesPolygona = new Array();
 39             //用于接收单泊位的数组
 40             var coordinates;
 41             for (var i = 0; i < data.length; i++) {//循环多对象,取值
 42                 coordinates=[[data[i].longitude1,data[i].latitude1],
 43                             [data[i].longitude1,data[i].latitude2],
 44                             [data[i].longitude2,data[i].latitude2],
 45                             [data[i].longitude2,data[i].latitude1],
 46                             [data[i].longitude1,data[i].latitude1]];
 47                 //将数组集合进行解析组合
 48                 coordinatesPolygona[i] = pushCoordinates(coordinates);
 49             }
 50             //用于测试的一些数据,可以先测试看看好不好用
 51             /* var coordinates = [[122.050605773926, 30.6279315948486],
 52                 [122.050605773926, 30.6299896240234],
 53                 [122.053436279297, 30.6299896240234],
 54                 [122.053436279297, 30.6279315948486],
 55                 [122.050605773926, 30.6279315948486]]
 56                 var coordinatesPolygon = pushCoordinates(coordinates);
 57                 coordinatesPolygona[0] = coordinatesPolygon;
 58                  coordinates =  [[122.051605773926, 30.6479315948486],
 59                 [122.051605773926, 30.6499896240234],
 60                 [122.051436279297, 30.6499896240234],
 61                 [122.051436279297, 30.6479315948486],
 62                 [122.051605773926, 30.6479315948486]];
 63                 coordinatesPolygon =  pushCoordinates(coordinates);
 64                 coordinatesPolygona[1] = coordinatesPolygon;  */
 65
 66               //瓦片图层
 67             var tileLayer = new ol.layer.Tile({
 68                 source:new ol.source.OSM()
 69             });
 70
 71             var source = new ol.source.Vector();
 72
 73             //矢量图层
 74             var vector = new ol.layer.Vector({
 75                 source: source,
 76
 77                 style: new ol.style.Style({
 78                     fill: new ol.style.Fill({
 79                         color: ‘rgba(255, 255, 255, 0.1)‘
 80                     }),
 81
 82                     stroke: new ol.style.Stroke({
 83                         color: ‘red‘,
 84
 85                         width: 2
 86                     }),
 87
 88                     image: new ol.style.Circle({
 89                         radius: 10,
 90
 91                         fill: new ol.style.Fill({
 92                             color: ‘#ffcc33‘
 93                         })
 94                     })
 95                 })
 96             });
 97
 98             //多边形此处注意一定要是[坐标数组]
 99             var plygon = new ol.geom.Polygon(coordinatesPolygona);
100
101             //多边形要素类
102             var feature = new ol.Feature({
103                 geometry: plygon,//plygon代表多边形,其他的还有point点、cricle圆等,api上有写
104
105             });
106
107             /*此处为重要,理解feature和source的关系,也就很简单了
108                 feature就是我们的画图层
109             */
110             source.addFeature(feature);
111
112             var view=new ol.View({
113                 center:[121.82371,31.25532],
114
115                 zoom: 10,
116
117                 projection: "EPSG:4326"
118
119             });
120
121             //我这里没有对map加载进行处理,所以在二次加载时会出现覆盖现象。
122             //本意是进页面就加载,没有按钮。所以有需要的可以处理一下
123            map = new ol.Map({
124                 layers: [tileLayer, vector],
125
126                 view:view,
127
128                 target: "map"
129
130             });
131         },
132         error : function(XMLHttpRequest, textStatus, errorTHrown) {
133             window.location = _contextPath + ‘/error404/error404Show‘;
134         }
135      });
136 }
137
138     //画框前置方法
139     var pushCoordinates = function(coordinates){
140         //声明一个新的数组
141         var coordinatesPolygon = new Array();
142
143         //循环遍历将经纬度转到"EPSG:4326"投影坐标系下
144
145         for (var i = 0; i < coordinates.length; i++) {
146             //坐标转换
147             var pointTransform = ol.proj.fromLonLat([coordinates[i][0], coordinates[i][1]], "EPSG:4326");
148             //形成多边形数组
149             coordinatesPolygon.push(pointTransform);
150
151         }
152
153         return coordinatesPolygon;
154
155     }
156
157 </script>
158 </body>
159 </html>

原文地址:https://www.cnblogs.com/lanpeiyu/p/11737778.html

时间: 2024-11-05 19:02:35

OpenLayers 根据坐标动态画多边形的相关文章

OpenGL进阶示例1——动态画线(虚线、实线、颜色、速度等)

用OpenGL动态绘制线段,其实很简单,但到现在为止,网上可参考资料并不多.于是亲自动手写一个函数,方便动态绘制线段.代码如下: #include<GL/glut.h> //OpenGL实用工具包 #include <Windows.h> /*所遇问题: 1.系统API函数Sleep()不听话,睡眠时快时慢(可能跟我计算机当前运行程序有关吧) 解决方案:重写Sleep()函数,实质为空循环.仅用于Debug下,Release会将其优化 2.动态画直线,朝某些方向画线时出现块状 解决

判断一个坐标是否在多边形内部

在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题.乍听起来还挺复杂.根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问题. 假设多边形的坐标存放在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个点算出一个四边型,首先判断目标坐标点是否在这个四边型之内,如果在这个四边型之外,那可以跳过后面较为复杂的计算,直接返回false. if (p.x < minX || p.x > maxX |

ArcGIS Api For Flex 动态画点和线

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:supportCl

由两点坐标如何画出直线 matlab

由两点坐标如何画出直线  方法1:利用直线方程 斜率加截距 方法2:数据拟合 1 %由两点坐标得数据拟合直线与画线 2 x = [1,2]; 3 y = [5,8]; 4 k = ((8-2)/(5-1));% 由两点坐标得到直线斜率 5 line = k*x+0.5;% 直线方程 6 7 xy = 1:10;% 定义画线的 x 长度 8 line1 = k*xy+0.5; 9 figure(1),plot(xy,line1); 10 11 % 12 %13 14 x1=[1,2]; 15 x2

用鼠标动态画圆

已知圆心坐标O(x,y),圆上一点的坐标A(xA,yA),用鼠标从A点顺时针方向画指定的度数. 需要注意,X轴的正方向是→,Y轴的正方向是↓,按顺时针方向画圆实际上角度是越来越小. 解题思路:画圆可以将圆的360°角划分为N等分,这里就划分为360等分,再获取每个度数所对应的圆上的点的坐标来画点,由点连成一个圆. 原理是利用圆的参数方程:横坐标X=圆心横坐标+半径*Cos(弧度)横坐标Y=圆心纵坐标+半径*Sin(弧度) autoit代码如下: Run("mspaint.exe") S

利用百度API画多边形,不能监测到百度绘图鼠标事件

var drawingManager = new BMapLib.DrawingManager(map, { isOpen: false, //是否开启绘制模式 enableDrawingTool: true, //是否显示工具栏 drawingToolOptions: { anchor: BMAP_ANCHOR_TOP_RIGHT, //位置 offset: new BMap.Size(5, 5), //偏离值 scale: 0.8, //工具栏缩放比例 //工具栏显示数据 drawingMo

一个给力的html5 画多边形的例子

只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta charset="gb2312"> <title>画图</title> </head> <body> <canvas id = "myCanvas" width = '500' height = '500'&

OpenGL基础(一)2.画多边形之圆

1 //Five edges polygon. 2 //As less code as possible. 3 4 #include "stdafx.h" 5 #include<gl/glut.h> 6 #include<stdlib.h> 7 #include<iostream> 8 #include<math.h> 9 10 const GLdouble PI = 3.1415926; 11 static GLdouble x, y;

OpenLayers 3 之 动态点扩散效果

当某个地方发生一些事情之后,如果我们添加一个静态点在地图上,并不能引起注意,那我们可以放置一个动态的点,类似于在水中投入一个石头,水波扩散的效果,象征发生的事件有一定的影响区域,那么,我们如何利用 OpenLayers3 做出这样的效果呢?我们要实现的效果如下图,之前雅安发生过地震,我们在雅安放置一个这样的点,表示雅安发生了地震. 图1 点扩散效果图 如何实现呢,我们首先想到,在矢量图层中添加一个点,对其赋予 ol.style.Icon 样式,然后将图片的 src属性赋值为一张 GIF 图片,那