* openlayers 3.x 버전 이상(5.x) 기준
배열 형태의 좌표 목록을 이용해 geometry를 만들고 이 geometry를 이용해 타입별(점,선,면) feature를 만드는 간단한 소스입니다.
//point
var aTmpCoords = [x좌표값1, y좌표값1];
var oPointFeature = new ol.Feature({
geometry : new ol.geom.Point(aTmpCoords)
});
//polyline
var aTmpCoords = [
[x좌표값1, y좌표값1],
[x좌표값2, y좌표값2],
[x좌표값3, y좌표값3]
];
var oMadeLine = new ol.Feature({
geometry : new ol.geom.LineString(aTmpCoords)
});
//polygone
var aTmpCoords = [[
[x좌표값1, y좌표값1],
[x좌표값2, y좌표값2],
[x좌표값3, y좌표값3],
[x좌표값4, y좌표값4],
[x좌표값5, y좌표값5]
]];
var oMadePoly = new ol.Feature({
geometry : new ol.geom.Polygon(aTmpCoords)
});
아래는 기능을 확장해 좌표목록과 타입, featureid, 좌표변환 여부를 파라미터로 넘겨 feature를 만들어 리턴하는 함수를 생성하는 예제입니다.
상황에 맞게 수정해 사용하시면 도움이 될 듯해 사용중인 코드의 일부를 옮겨봅니다.
//feature 생성
oTmpFeature = fnMakeFeatureByPosList("POINT", aPosList, "시설물명.uniqID", false);
//생성된 feature vector레이어에 추가
g_oVectorLayer.result.getSource().addFeature(oTmpFeature);
/**
* @method
* @param {string} p_sGeomType : "point, linestring, linearring, polygon,multilinestring, multipolygon" 중 하나
* @param {array} p_aPosList : [[x좌표1, y좌표1],[x좌표2, y좌표2],[x좌표3, y좌표3]]
* @param {string} p_sfeatureId
* @param {boolean} p_bTrans geometry 좌표변환 실행 영부
* @returns {ol.Feature} 생성된 feature
* @description 타입과 좌표목록을 파라미터로 받아 feature 생성 후 리턴하는 함수
* @author ggudedda
* @version 1.0
*/
var fnMakeFeatureByPosList = function(p_sGeomType,p_aPosList,p_sFeatureId, p_bTrans){
var oOlFeature = null,
oTmpGeometry = null,
aArrPosList = [];
if (typeof p_oPosList == 'string')
aArrPosList = JSON.parse(p_oPosList);
if (typeof p_oPosList != 'object')
p_oPosList = JSON.parse(p_oPosList);
switch(p_sGeomType.toLowerCase()){
case "point" :
oTmpGeometry = fnGetGeometryByPoint(p_oPosList);
break;
case "linestring" :
oTmpGeometry = fnGetGeometryByLineString(p_oPosList);
break;
case "linearring" :
oTmpGeometry = fnGetGeometryByLinearRing(p_oPosList);
break;
case "polygon" :
oTmpGeometry = fnGetGeometryByPolygon(p_oPosList);
break;
case "multilinestring" :
oTmpGeometry = fnGetGeometryByMultiLineString(p_oPosList);
break;
case "multipolygon" :
oTmpGeometry = fnGetGeometryByMultiPolygon(p_oPosList);
break;
}
var oClonedGeom = oTmpGeometry.clone();
// DB좌표계를 화면좌표계로 변경
if(p_bTrans){
oClonedGeom.transform(CONFIG.getDataProjection(), CONFIG.getDispProjection());
//ex. ===> oClonedGeom.transform("EPSG:900913", "EPSG:5181");
}
debugger;
var oFeature = new ol.Feature({
geometry : oClonedGeom
});
return oFeature;
}
//포인트
var fnGetGeometryByPoint = function(p_oParam){
var oPointGeometry = {}
if (p_oParam[0] instanceof Array)
oPointGeometry = new ol.geom.Point([p_oParam[0][0], p_oParam[0][1]]);
else
oPointGeometry = new ol.geom.Point([p_oParam[0].x, p_oParam[0].y]);
return oPointGeometry;
}
//라인
var fnGetGeometryByLineString = function(p_oParam){
var aPoints = [],
oLineStringGeometry = {}
for(var i=0; i <p_oParam.length; i++){
if (p_oParam[i] instanceof Array)
aPoints.push([p_oParam[i][0], p_oParam[i][1]]); // aPoints.push(new
// ol.geom.Point([p_oParam[i][0],p_oParam[i][1]]));
else
aPoints.push([p_oParam[i].x, p_oParam[i].y]); // aPoints.push(new
// ol.geom.Point([p_oParam[i].x,p_oParam[i].y]));
}
oLineStringGeometry = new ol.geom.LineString(aPoints);
return oLineStringGeometry;
}
//LinearRing
var fnGetGeometryByLinearRing = function(p_oParam) {
var aPoints = [];
var oLinearRingGeometry = {};
for (var i = 0; i < p_oParam.length; i++) {
if (p_oParam[i] instanceof Array)
aPoints.push(new ol.geom.Point(p_oParam[i][0], p_oParam[i][1]));
else
aPoints.push(new ol.geom.Point(p_oParam[i].x, p_oParam[i].y));
}
oLinearRingGeometry = new ol.geom.LinearRing(aPoints);
return oLinearRingGeometry;
}
//폴리곤
var fnGetGeometryByPolygon = function(p_oParam) {
var oLinears = [];
var oPolygonGeometry = {};
for (var i = 0; i < p_oParam.length; i++) {
if (p_oParam[i] instanceof Array)
oLinears.push([p_oParam[i][0], p_oParam[i][1]]);
else
oLinears.push([p_oParam[i].x, p_oParam[i].y]);
}
oPolygonGeometry = new ol.geom.Polygon([oLinears]);
return oPolygonGeometry;
}
//멀티라인
var fnGetGeometryByMultiLineString = function(p_oParam) {
var oMultiLineGeometry = {};
var aMultiLineGeometry = [];
for (var i = 0; i < p_oParam.length; i++) {
var oParamArr = p_oParam[i];
var aPoints = [], oLinears = null;
var oLineGeometry = {};
for (var j = 0; j < oParamArr.length; j++) {
if (oParamArr[j] instanceof Array)
aPoints.push(new ol.geom.Point(oParamArr[j][0], oParamArr[j][1]));
else
aPoints.push(new ol.geom.Point(oParamArr[j].x, oParamArr[j].y));
}
oLinestring = new ol.geom.LineString(aPoints);
oLineGeometry = oLinestring;
aMultiLineGeometry.push(oLineGeometry);
}
oMultiLineGeometry = new ol.geom.MultiLineString(aMultiLineGeometry);
return oMultiLineGeometry;
}
//멀티폴리곤
var fnGetGeometryByMultiPolygon = function(p_oParam) {
var oMultiPolygonGeometry = {};
var aMultiPolygonGeometry = [];
for (var i = 0; i < p_oParam.length; i++) {
var oParamArr = p_oParam[i];
var aPoints = [], oLinears = null;
var oPolygonGeometry = {};
for (var j = 0; j < oParamArr.length; j++) {
if (oParamArr[j] instanceof Array)
aPoints.push(new ol.geom.Point(oParamArr[j][0], oParamArr[j][1]));
else
aPoints.push(new ol.geom.Point(oParamArr[j].x, oParamArr[j].y));
}
oLinears = new ol.geom.LinearRing(aPoints);
oPolygonGeometry = new ol.geom.Polygon(oLinears);
aMultiPolygonGeometry.push(oPolygonGeometry);
}
oMultiPolygonGeometry = new ol.geom.MultiPolygon(aMultiPolygonGeometry);
return oMultiPolygonGeometry;
}
[IDE] intellij 에서 외부 jar 추가하는 방법 (0) | 2021.10.08 |
---|---|
[http] 웹 개발시 유용한 캐시 원터치 삭제 크롬 확장프로그램 (0) | 2021.10.07 |
[IDE] intellij 서버 재시작 없이 파일수정 내역 확실하게 적용시키는 방법 (0) | 2021.10.05 |
[http] CORS 오류 발생시 확실히 해결가능한 2가지 방법 (0) | 2021.09.29 |
[IDE] intellij에 tomcat 서버 추가하고 설정하기 (0) | 2021.09.28 |