본문 바로가기

Spring

Kabeja 를 통한 DXF 파일 GML 로 parsing 예제

반응형

 

dxf 를 java를 통해 gml로 변환 후 리턴하는 Spring API 기능 예제이다.

 

일단 Kabeja 라이브러리를 다운로드 한다. (아래 링크)

https://sourceforge.net/projects/kabeja/

 

Kabeja

Download Kabeja for free. Kabeja is a java library for parsing DXF and converting to SVG (dxf2svg). The library supports the SAX-api and can integrated into other applications (Cocoon,Batik).

sourceforge.net

 

다운로드 받은 zip 파일을 압축 해제한 뒤 lib 폴더 안에 데이터를 해당 경로에 모두 붙여넣기 한다.

root/src/main/webapp/WEB-INF/lib

 

pom.xml 파일에 dependency 를 추가한다.

		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>batik-all</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\batik-all.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>js</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\js.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>kabeja</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\kabeja-0.4.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>kabeja-svg</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\kabeja-svg-0.4.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>kabeja-xslt</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\kabeja-xslt.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>miethxml-toolkit</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\miethxml-toolkit.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>miethxml-ui</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\miethxml-ui.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>pdf-transcoder</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\pdf-transcoder.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>xml-apis-ext</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\xml-apis-ext.jar</systemPath>
		</dependency>
		<dependency>
			<groupId>org.kabeja</groupId>
			<artifactId>xml-apis</artifactId>
			<version>0.4</version>
			<scope>system</scope>
			<systemPath>${project.basedir}\src\main\webapp\WEB-INF\lib\xml-apis.jar</systemPath>
		</dependency>

 

dxf 파싱하는 자바단에서 kabeja 관련 라이브러리를 import 한다. (나머지는 ide auto import 기능을 사용..)

import org.kabeja.dxf.DXFArc;
import org.kabeja.dxf.DXFCircle;
import org.kabeja.dxf.DXFColor;
import org.kabeja.dxf.DXFDocument;
import org.kabeja.dxf.DXFEntity;
import org.kabeja.dxf.DXFInsert;
import org.kabeja.dxf.DXFLayer;
import org.kabeja.dxf.DXFLine;
import org.kabeja.dxf.DXFPoint;
import org.kabeja.dxf.DXFPolyline;
import org.kabeja.dxf.DXFText;
import org.kabeja.dxf.DXFVertex;
import org.kabeja.parser.ParseException;
import org.kabeja.parser.Parser;
import org.kabeja.parser.ParserBuilder;

 

업로드되서 받아온 dxf 파일을 gml 로 파싱해서 리턴하는 API 를 작성한다.

	@RequestMapping(value = { "/map/dxfViewer.do" })
	public void dxfViewer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		EgovMap map = new EgovMap();

		String dxfParsingString = "";

		Map<String, MultipartFile> files = ((MultipartHttpServletRequest) request).getFileMap();

		if (files.size() > 0) {
			for (MultipartFile multipartFile : files.values()) {
				if (!multipartFile.isEmpty()) {

					// DECLARE THE LOCATION OF THE DXF FILE
					// THIS MAY BE SUPPLIED AS A PARAMETER TO THE SERVLET
					Parser parser = ParserBuilder.createDefaultParser();
					StringBuilder buffer = new StringBuilder();
					buffer.append("<wfs:FeatureCollection xmlns:ms=\"http://mapserver.gis.umn.edu/mapserver\" xmlns:wfs=\"http://www.opengis.net/wfs\">");

					try {
						InputStream in = null;
						in = multipartFile.getInputStream();

						// PARSE THE SUPPLIED DXF FILE
						parser.parse(in, "utf-8");

						// get the documnet and its layers
						DXFDocument doc = parser.getDocument();

						Iterator<?> lyrsIt = doc.getDXFLayerIterator();
						int counter = 0;

						// Loop through layers found
						while (lyrsIt.hasNext()) {
							DXFLayer layer = (DXFLayer) lyrsIt.next();
							String lyrname = layer.getName();
							int lyrcolor = layer.getColor();
							String rgbcolor = DXFColor.getRGBString(lyrcolor);
							String[] cols = rgbcolor.split(",");

							// convert the layer color to hex color code
							Color mycolor = new Color(Integer.parseInt(cols[0]), Integer.parseInt(cols[1]), Integer.parseInt(cols[2]));
							String hex = "#" + Integer.toHexString(mycolor.getRGB()).substring(2);

							Iterator<?> lyrTypesExist = layer.getDXFEntityTypeIterator();

							while (lyrTypesExist.hasNext()) {
								String type = (String) lyrTypesExist.next();
								Iterator<?> entities = layer.getDXFEntities(type).iterator();

								// loop through layer entities
								while (entities.hasNext()) {

									DXFEntity entity = (DXFEntity) entities.next();
									String entType = entity.getType();

									System.out.println("entType : " +entType);

									if (entType.equals("LWPOLYLINE") || entType.equals("POLYLINE")) {
										counter = counter + 1;
										DXFPolyline poly = (DXFPolyline) entity;
										int vertCount = poly.getVertexCount();
										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:LineString srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										double startVertX = 0;
										double startVertY = 0;
										for (int i = 0; i < vertCount; i++) {
											DXFVertex vertex = poly.getVertex(i);
											double vertX = vertex.getPoint().getX();
											double vertY = vertex.getPoint().getY();
											if(i == 0){
												startVertX = vertX;
												startVertY = vertY;
											}
											buffer.append(vertX);
											buffer.append(",");
											buffer.append(vertY);
											buffer.append(" ");
										}
										if(poly.isClosed()){
											buffer.append(startVertX);
											buffer.append(",");
											buffer.append(startVertY);
											buffer.append(" ");
										}
										buffer.append("</gml:coordinates></gml:LineString>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("<feature:lineType>");
										buffer.append(poly.getLineType().toLowerCase());
										buffer.append("</feature:lineType>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");
									}
									if (entType.equals("LINE")) {
										counter = counter + 1;
										DXFLine line = (DXFLine) entity;
										double vertX1 = line.getStartPoint().getX();
										double vertY1 = line.getStartPoint().getY();
										double vertX2 = line.getEndPoint().getX();
										double vertY2 = line.getEndPoint().getY();
										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:LineString srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(vertX1);
										buffer.append(",");
										buffer.append(vertY1);
										buffer.append(" ");
										buffer.append(vertX2);
										buffer.append(",");
										buffer.append(vertY2);
										buffer.append(" ");
										buffer.append("</gml:coordinates></gml:LineString>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("<feature:lineType>");
										buffer.append(line.getLineType().toLowerCase());
										buffer.append("</feature:lineType>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");
									}
									if (entType.equals("POINT")) {
										counter = counter + 1;
										DXFPoint point = (DXFPoint) entity;
										double pointX = point.getX();
										double pointY = point.getY();
										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Point srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(pointX);
										buffer.append(",");
										buffer.append(pointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates></gml:Point>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");
									}
									if (entType.equals("TEXT")) {
										counter = counter + 1;
										DXFText text = (DXFText) entity;
										double vertX = text.getInsertPoint().getX();
										double vertY = text.getInsertPoint().getY();
										String label = text.getText().replace("\"", " ");
										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Point srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(vertX);
										buffer.append(",");
										buffer.append(vertY);
										buffer.append(" ");
										buffer.append("</gml:coordinates></gml:Point>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(label);
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("<feature:rotation>");
										buffer.append(text.getRotation());
										buffer.append("</feature:rotation>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");
									}
									if (entType.equals("INSERT")) {
										counter = counter + 1;
										DXFInsert insert = (DXFInsert) entity;
										double pointX = insert.getPoint().getX();
										double pointY = insert.getPoint().getY();
										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Point srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(pointX);
										buffer.append(",");
										buffer.append(pointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates></gml:Point>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");
									}
									if (entType.equals("ARC")) {
										counter = counter + 1;
										DXFArc arc = (DXFArc) entity;
										double startPointX = arc.getStartPoint().getX();
										double startPointY = arc.getStartPoint().getY();
										double centerPointX = arc.getCenterPoint().getX();
										double centerPointY = arc.getCenterPoint().getY();
										double endPointX = arc.getEndPoint().getX();
										double endPointY = arc.getEndPoint().getY();

										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Curve srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");
										buffer.append("<gml:segments>");
										buffer.append("<gml:Arc srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");
										buffer.append("<gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(startPointX);
										buffer.append(",");
										buffer.append(startPointY);
										buffer.append(" ");
										buffer.append(centerPointX);
										buffer.append(",");
										buffer.append(centerPointY);
										buffer.append(" ");
										buffer.append(endPointX);
										buffer.append(",");
										buffer.append(endPointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates>");
										buffer.append("</gml:Arc>");
										buffer.append("</gml:segments>");
										buffer.append("</gml:Curve>");

										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");

										buffer.append("<gml:CompositeCurve srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");

										buffer.append("<gml:curveMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Curve srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");
										buffer.append("<gml:segments>");
										buffer.append("<gml:Arc interpolation=\"circularArc3Points\">");
										buffer.append("<gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(startPointX);
										buffer.append(",");
										buffer.append(startPointY);
										buffer.append(" ");
										buffer.append(centerPointX);
										buffer.append(",");
										buffer.append(centerPointY);
										buffer.append(" ");
										buffer.append(endPointX);
										buffer.append(",");
										buffer.append(endPointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates>");
										buffer.append("</gml:Arc>");
										buffer.append("</gml:segments>");
										buffer.append("</gml:Curve>");

										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:curveMember>");

										buffer.append("</gml:CompositeCurve>");


										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");



										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:ArcByCenterPoint srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");
										buffer.append("<gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(centerPointX);
										buffer.append(",");
										buffer.append(centerPointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates>");
										buffer.append("<gml:radius uom=\"m\">");
										buffer.append(arc.getRadius());
										buffer.append("</gml:radius>");
										buffer.append("<gml:startAngle uom=\"deg\">");
										buffer.append(arc.getStartAngle());
										buffer.append("</gml:startAngle>");
										buffer.append("<gml:endAngle uom=\"deg\">");
										buffer.append(arc.getEndAngle());
										buffer.append("</gml:endAngle>");
										buffer.append("</gml:ArcByCenterPoint>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");



										buffer.append("<gml:featureMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:LineString srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE
												+ "\"><gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(startPointX);
										buffer.append(",");
										buffer.append(startPointY);
										buffer.append(" ");
										buffer.append(centerPointX);
										buffer.append(",");
										buffer.append(centerPointY);
										buffer.append(" ");
										buffer.append(endPointX);
										buffer.append(",");
										buffer.append(endPointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates></gml:LineString>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:featureMember>");

									}
									if (entType.equals("CIRCLE")) {
										counter = counter + 1;
										DXFCircle circle = (DXFCircle) entity;
										double centerPointX = circle.getCenterPoint().getX();
										double centerPointY = circle.getCenterPoint().getY();
										double radius = circle.getRadius();
										buffer.append("<gml:curveMember xmlns:gml=\"http://www.opengis.net/gml\">");
										buffer.append("<feature:features xmlns:feature=\"http://mapserver.gis.umn.edu/mapserver\" >");
										buffer.append("<feature:geometry>");
										buffer.append("<gml:Curve>");
										buffer.append("<gml:segments>");
										buffer.append("<gml:CircleByCenterPoint srsName=\"http://www.opengis.net/def/crs/EPSG/0/" + EPSG_CODE + "\">");
										buffer.append("<gml:coordinates xmlns:gml=\"http://www.opengis.net/gml\" decimal=\".\" cs=\",\" ts=\"\">");
										buffer.append(centerPointX);
										buffer.append(",");
										buffer.append(centerPointY);
										buffer.append(" ");
										buffer.append("</gml:coordinates>");
										buffer.append("<gml:radius uom=\"m\">");
										buffer.append(radius);
										buffer.append("</gml:radius>");
										buffer.append("</gml:CircleByCenterPoint>");
										buffer.append("</gml:segments>");
										buffer.append("</gml:Curve>");
										buffer.append("</feature:geometry>");
										buffer.append("<feature:id>");
										buffer.append(counter);
										buffer.append("</feature:id>");
										buffer.append("<feature:layername>");
										buffer.append(lyrname);
										buffer.append("</feature:layername>");
										buffer.append("<feature:type>");
										buffer.append(entType);
										buffer.append("</feature:type>");
										buffer.append("<feature:label>");
										buffer.append(" ");
										buffer.append("</feature:label>");
										buffer.append("<feature:color>");
										buffer.append(hex);
										buffer.append("</feature:color>");
										buffer.append("</feature:features>");
										buffer.append("</gml:curveMember>");
									}
									if (entType.equals("HATCH") || entType.equals("LEADER")) {
										counter = counter + 1;
									}
								}
							}
						}

						buffer.append("</wfs:FeatureCollection>");
						map.put("resultCode", this.propertiesService.getInt("SUCCESS"));
						map.put("resultMsg", "SUCCESS");

					} catch (ParseException e) {
						e.printStackTrace();
						map.put("resultCode", this.propertiesService.getInt("FAIL"));
						map.put("resultMsg", "FAIL");
					} catch (Exception e) {
						e.printStackTrace();
						map.put("resultCode", this.propertiesService.getInt("FAIL"));
						map.put("resultMsg", "FAIL");
					}

					dxfParsingString = buffer.toString();
					buffer.setLength(0); // flush it

				}
			}
		}

		response.setCharacterEncoding("utf-8");
		response.setContentType("text/xml");
		response.getWriter().println(dxfParsingString);

	}

※ 위의 entType 에 대한 종류에 따라 더 많은 분기가 필요할 수도 있다. DXF 의 내용을 100% 호환할 수는 없다. 상황에 맞게 개발자가 수정해야한다.

 

위 API 결과로 Openlayers에서 GML2 로 파싱하면 벡터데이터로 지도상에 렌더링할 수 있게 된다.

반응형

'Spring' 카테고리의 다른 글

Geoserver 에 발행된 레이어 다운로드(.zip)  (0) 2021.06.06