用openlayer是互動畫一個點、線、面,執行回撥函式
阿新 • • 發佈:2019-01-04
graphicLayer 是一個vector圖層。
callback是回撥函式。
呼叫方法如下:
if (typeof newlayer != 'undefined' && newlayer != null) {
var dg = new DiliGISApi.DrawGraphic(newlayer.Layer);
var calback = function(line) {
var pointCount = line.Value.length;
for (var i = 0; i <= pointCount - 1; i++) {
alert(line.Value[i][0] + "," + line.Value[i][1]);
}
}
dg.DrawPolygon(calback);
} else {
alert("create layer first");
}
畫圖類如下:
DiliGISApi.DrawGraphic = function(graphicLayer) {
///<summary>用於互動畫地圖物件/summary>
var _this = this;
var layer = graphicLayer;
/*
* 返回點物件
*/
_this.DrawPoint = function(callback) {
///<summary>畫點</summary>
try {
var drawPointCtrol = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point);
drawPointCtrol.featureAdded = function(feature) {
try {
feature.layer.eraseFeatures([feature]);
var point = new DiliGISApi.Point(feature.geometry.x, feature.geometry.y);
callback(point);
drawPointCtrol.deactivate();
layer.map.removeControl(drawPointCtrol);
} catch (e) {
alert("drawPointCtrol->:" + e.name + "," + e.message);
}
}
layer.map.addControl(drawPointCtrol);
drawPointCtrol.activate();
} catch (e) {
alert("DrawPoint->:" + e.name + "," + e.message);
}
};
/*
* 返回線物件
*/
_this.DrawLine = function(callback) {
try {
var drawLineCtrol = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path);
drawLineCtrol.featureAdded = function(feature) {
try {
feature.layer.eraseFeatures([feature]);
var pts = feature.geometry.components;
var points = [];
var pointCount = pts.length;
for (var i = 0; i <= pointCount - 1; i++) {
points.push([pts[i].x, pts[i].y]);
}
var polyline = new DiliGISApi.PolyLine(points);
callback(polyline);
drawLineCtrol.deactivate();
layer.map.removeControl(drawLineCtrol);
} catch (e) {
alert("drawLineCtrol->:" + e.name + "," + e.message);
}
}
layer.map.addControl(drawLineCtrol);
drawLineCtrol.activate();
} catch (e) {
alert("DrawLine->:" + e.name + "," + e.message);
}
};
/*
* 返回面對象
*/
_this.DrawPolygon = function(callback) {
try {
var drawPolygonCtrol = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon);
drawPolygonCtrol.featureAdded = function(feature) {
try {
feature.layer.eraseFeatures([feature]);
var pts = feature.geometry.components[0].components;
var points = [];
var pointCount = pts.length;
for (var i = 0; i <= pointCount - 1; i++) {
points.push([pts[i].x, pts[i].y]);
}
var polygon = new DiliGISApi.Polygon(points);
callback(polygon);
drawPolygonCtrol.deactivate();
layer.map.removeControl(drawPolygonCtrol);
} catch (e) {
alert("drawPolygonCtrol->:" + e.name + "," + e.message);
}
}
layer.map.addControl(drawPolygonCtrol);
drawPolygonCtrol.activate();
} catch (e) {
alert("DrawPolygon->:" + e.name + "," + e.message);
}
};
};