I have in my database longitude-latitude verticies from user-defined polygons. My questions is: how do I recreate and display them on a map now? This is quite easy to do with the Google Maps API, but I can't find any documentation or examples on how to do this with OpenLayers. Has anyone had any experience doing this?
After a lot of experimenting, I found out how to do it:
let sitePoints = [];
let siteStyle = {
// style_definition
};
let epsg4326 = new OpenLayers.Projection("EPSG:4326");
for (let i in coordinates) {
let coord = coordinates[i];
let point = new OpenLayers.Geometry.Point(coord.lng, coord.lat);
// transform from WGS 1984 to Spherical Mercator
point.transform(epsg4326, map.getProjectionObject());
sitePoints.push(point);
}
sitePoints.push(sitePoints[0]);
let linearRing = new OpenLayers.Geometry.LinearRing(sitePoints);
let geometry = new OpenLayers.Geometry.Polygon([linearRing]);
let polygonFeature = new OpenLayers.Feature.Vector(geometry, null, siteStyle);
vectors.addFeatures([polygonFeature]);
it is slightly different for OpenLayers 6, and it took ma a while to figure it out. So I paste here the relevant code for OL6.
coordinates
are of type [[[number]]] (which is the GeoJson standard for polygon).
styles
is out-of-scope (i can paste it here if someone is interested, but every app can define it differently).
var VectorSource = ol.source.Vector;
var {Tile, Vector} = ol.layer; //import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer.js';
var TileLayer = Tile;
var VectorLayer = Vector;
var map = new ol.Map(...);
function drawPolygonOnMap(coordinates) {
const polygonFeature = new ol.Feature(
new ol.geom.Polygon(coordinates).transform('EPSG:4326','EPSG:3857'));
let source = new VectorSource({
features: [polygonFeature]
});
var layer = new VectorLayer({
source: source,
style: styles
});
map.addLayer(layer);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With