[英]Adding a triangle Polygon over OpenLayers OSM() Map
I am trying to add one triangle Polygon over OSM() map in OpenLayers. 我试图在OpenLayers的OSM()地图上添加一个三角形多边形。
import Map from 'ol/Map';
import View from 'ol/View';
import Feature from 'ol/Feature';
import {
OSM,
Vector as VectorSource
} from 'ol/source';
import $ from 'jquery';
import {
Tile as TileLayer,
Vector as VectorLayer
} from 'ol/layer';
import {
fromLonLat,
toLonLat
} from 'ol/proj';
import Polygon from 'ol/geom/Polygon';
import {
Circle as CircleStyle,
Fill,
Stroke,
Style
} from 'ol/style.js';
//Position of our map center
var pos = fromLonLat([76.87403794962249, 8.569385045000772]);
//Position for our Polygon
var pos1 = fromLonLat([76.85860825505787, 8.575525035547585]);
var pos2 = fromLonLat([76.85286067404068, 8.56925661298456]);
var pos3 = fromLonLat([76.86300346314657, 8.56917303421666]);
//OSM() Tile layer for our Map
var tileLayer = new TileLayer({
source: new OSM()
});
//Setting View for our Map
var view = new View({
center: pos,
zoom: 15
});
var cord = [pos1,pos2,pos3];
var polyone = new Polygon([cord]);
var featureone = new Feature(polyone);
var vectorSource = new VectorSource({
feature: featureone
});
//vectorSource.addFeature(feature);
featureone.setStyle(new Style({fill: new Fill({color: 'red'})}));
var vectorLayer = new VectorLayer({
source: vectorSource
});
var map = new Map({
layers: [tileLayer,vectorLayer],
target: 'map',
view: view
});
I have added the html part separately. 我已经分别添加了html部分。
OpenLayers version: ^5.1.3 And I am using Parcel Bundler to create my test build After running the above code, only Map is getting displayed and no polygons displayed. OpenLayers版本:^ 5.1.3并且我正在使用Parcel Bundler创建我的测试版本运行上述代码后,仅显示地图,而没有显示多边形。
Can anyone suggest an edit to my code? 谁能建议对我的代码进行修改?
the VectorSource should have the features
property (not feature
) and that property should be initialized with an array of features: VectorSource应该具有
features
属性(不是feature
),并且该属性应使用一组特征数组进行初始化:
var vectorSource = new VectorSource({
feature: featureone
});
should be: 应该:
var vectorSource = new VectorSource({
features: [featureone]
});
Also the path for the polygon needs to be closed (the last point must be the same as the first point: 同样,多边形的路径也需要关闭(最后一点必须与第一个点相同:
var cord = [pos1, pos2, pos3, pos1];
proof of concept code snippet: 概念证明代码段:
html, body { height: 100%; width: 100%; padding: 0px; margin: 0px; } .map { height: 100%; width: 100%; }
<link rel="stylesheet" href="https://openlayers.org/en/v5.1.3/css/ol.css" type="text/css"> <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.1.3/build/ol.js"></script> <div id="map" class="map"></div> <script> //Position of our map center var pos = ol.proj.fromLonLat([76.87403794962249, 8.569385045000772]); //Position for our Polygon var pos1 = ol.proj.fromLonLat([76.85860825505787, 8.575525035547585]); var pos2 = ol.proj.fromLonLat([76.85286067404068, 8.56925661298456]); var pos3 = ol.proj.fromLonLat([76.86300346314657, 8.56917303421666]); //OSM() Tile layer for our Map var tileLayer = new ol.layer.Tile({ // TileLayer({ source: new ol.source.OSM() }); //Setting View for our Map var view = new ol.View({ center: pos, zoom: 14 }); var cord = [pos1, pos2, pos3, pos1]; var polyone = new ol.geom.Polygon([cord]); var featureone = new ol.Feature(polyone); var vectorSource = new ol.source.Vector({ // VectorSource({ features: [featureone] }); //vectorSource.addFeature(feature); featureone.setStyle(new ol.style.Style({ fill: new ol.style.Fill({ color: 'red' }) })); var vectorLayer = new ol.layer.Vector({ // VectorLayer({ source: vectorSource }); var map = new ol.Map({ layers: [tileLayer, vectorLayer], target: 'map', view: view }); </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.