javascriptopenlayerspointgetpixel

How to get the Pixel from coordinates of a polygon/point on openlayers4


var geometry = Feature.getGeometry();
var coordinate = geometry.getCoordinates();
var pixel = map.getPixelFromCoordinate(coordinate);

i want to get the Pixel from coordinate,since i tried for point

on openlayers4,i got the coordinate values as expected

output:7.129808 ,50.617804

but map.getPixelFromCoordinate(coordinate);

console.log(pixel1);

From this i am trying to get the pixel value but i am getting

output:null

can any suggest me how to get the pixel value? below i am providing the entire code

<!doctype html>
<head>
<title> Hello OpenStreetMap </title>
</head>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.4.1/css/ol.css" type="text/css">
    <style>
    body {
     height: 100%;
     width: 100%;
     margin: 0px;
     padding: 0px
     }
      .map {
        height: 100%;
        width: 100%;
      }
    </style>
<body>
<div id="map" class="map"></div>
<div id="log"></div>
 <script src="https://openlayers.org/en/v4.4.1/build/ol.js" type="text/javascript"></script>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</script>
<script>

    var polyFeature = new ol.Feature({
        geometry: new ol.geom.Point([7.129808, 50.618671]),
        projection: 'EPSG:4326'
    }); 

    //Layers
    var vectorLayer = new ol.layer.Vector({
        source: new ol.source.Vector({
            features: [polyFeature]
        })
    });
    var osmLayer = new ol.layer.Tile({
    source: new ol.source.OSM()
    });

    // view
    //var centerPoint = ol.proj.transform([7.128499, 50.617803],'EPSG:4326','EPSG:3857');
    var view = new ol.View({
    projection: 'EPSG:4326',
    zoom: 18
    });
    view.setCenter([7.128499, 50.617803]);


    var map = new ol.Map({
    target: 'map',
    view:view,
    layers: [ osmLayer,vectorLayer]
    });

    var geometry = polyFeature.getGeometry();
    var coordinate = geometry.getCoordinates();
      var pixel1 = map.getPixelFromCoordinate(coordinate);
    map.setView(view);

    </script>
    </body>
    </html>

Solution

  • Wait for the map to be rendered before calling getPixelFromCoordinate:

    map.once('postrender', function(event) {
        var geometry = polyFeature.getGeometry();
        var coordinate = geometry.getCoordinates();
        var pixel1 = map.getPixelFromCoordinate(coordinate);
    
        var element = document.getElementById("log");
        element.innerText = pixel1;
    });
    

    proof of concept fiddle

    code snippet:

    var polyFeature = new ol.Feature({
      geometry: new ol.geom.Point([7.129808, 50.618671]),
      projection: 'EPSG:4326'
    });
    
    //Layers
    var vectorLayer = new ol.layer.Vector({
      source: new ol.source.Vector({
        features: [polyFeature]
      })
    });
    var osmLayer = new ol.layer.Tile({
      source: new ol.source.OSM()
    });
    
    var view = new ol.View({
      projection: 'EPSG:4326',
      zoom: 18
    });
    view.setCenter([7.128499, 50.617803]);
    
    
    var map = new ol.Map({
      target: 'map',
      view: view,
      layers: [osmLayer, vectorLayer]
    });
    map.once('postrender', function(event) {
      var geometry = polyFeature.getGeometry();
      var coordinate = geometry.getCoordinates();
      var pixel1 = map.getPixelFromCoordinate(coordinate);
    
      var element = document.getElementById("log");
      element.innerText = pixel1;
    });
    map.setView(view);
    html,
    body {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    
    .map {
      height: 90%;
      width: 100%;
    }
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>
    <div id="map" class="map"></div>
    <div id="log"></div>