1

我从 MSsql server 2012 以 json 格式获取数据,我只得到 WKT 字符串以转换以使用 ol.format.WKT() 在地图上显示。

当我单击弹出窗口时,我想显示多边形的 ID 和名称。我如何识别我点击的是哪个多边形?

我如何知道我单击哪个多边形的地图并获取该多边形的数据?

for (var i = 0; i < geometries.length; i++) {

    var feature = wktReader.readFeature(geometries[i].GeomCol1.Geometry.WellKnownText);

    feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');

    if (feature.getGeometry().getType() == 'Polygon') {
        feature.setStyle(new ol.style.Style({
            stroke: new ol.style.Stroke({
                color: 'blue',
                width: 1
            }),
            fill: new ol.style.Fill({
                color: 'rgba(0, 0, 255, 0.1)'
            })
       }));
       featureCollection.push(feature);
    }
}

这是我如何获得 wkt 字符串的一部分。

这些是我显示的多边形,我想显示一个弹出窗口,其中包含我单击的多边形信息 这些是我显示的多边形,我想显示一个弹出窗口,其中包含我单击的多边形信息

这是我如何在我的 MSsql 服务器中存储空间数据的图片

这是我如何在我的 MSsql 服务器中存储空间数据的图片

谢谢

4

1 回答 1

0

forEachFeatureAtPixel( api doc ) 可以为您提供某个位置的所有功能。诚然,使用起来可能会令人困惑。您传递给该函数的回调会为每一层调用。如果回调返回一个真实值,它会停止,然后forEachFeatureAtPixel返回任何回调返回的值。这使得选择特定功能非常完美。

var count = 2000;
var features = new Array(count);
var e = 4500000;
for (var i = 0; i < count; ++i) {
  var coordinates = [2 * e * Math.random() - e, 2 * e * Math.random() - e];
  features[i] = new ol.Feature({
    geometry: new ol.geom.Point(coordinates),
    myHappyAttribute: ('you are beautiful ' + i)
  });
}

var source = new ol.source.Vector({
  features: features
});

var layer = new ol.layer.Vector({source: source});


const view = new ol.View({
  center: [2500000, 0], zoom: 5
});
const map = new ol.Map({
  layers: [ 
    new ol.layer.Tile({
        source: new ol.source.OSM()
    }),
    layer
  ],
  target: 'map',
  view 
});


map.on('singleclick', function(evt) {
  const pixel = map.getEventPixel(evt.originalEvent);
  const feature = map.forEachFeatureAtPixel(
    pixel,
    someFeature => someFeature, // return first element
    {
      hitTolerance: 2 // how far off the click can be
    }
  );
  if (feature) {
    const attr = feature.get('myHappyAttribute');
    console.log('clicked on feature with attr:', attr);
  } else {
    console.log('not clicked on a feature');
  }
});
<link href="https://openlayers.org/en/v4.6.5/css/ol.css" rel="stylesheet"/>
<script src="https://openlayers.org/en/v4.6.5/build/ol-debug.js"></script>
<div id="map" class="map"></div>

于 2018-02-22T10:24:01.983 回答