当前位置: 首页 > 工具软件 > GML4J > 使用案例 >

GML解析读入PostGIS

纪实
2023-12-01
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.io.WKTReader;


public class Test3 {

	/**
	 * @param args
	 * @throws DocumentException 
	 */
	public static void main(String[] args) throws DocumentException {
		// TODO Auto-generated method stub
		Map map = new HashMap();
        map.put("","http://www.opengis.net/gml");
        SAXReader saxReader = new SAXReader();
        File file = new File("E:\\City.xml");
        
        Document document = saxReader.read(file);
        XPath x = document.createXPath("//gml:");
        x.setNamespaceURIs(map);
        
        Element root=document.getRootElement();
        for(Iterator ie = root.elementIterator(); ie.hasNext();)
		{/*Element skill = root.element("feature");*/
		 Element skill = (Element) ie.next();
      
		MyVisitor visitor = new MyVisitor();
		skill.accept(visitor);}
	}

}



Visitor模式
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;

import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.io.WKTReader;

public class MyVisitor extends VisitorSupport {
	  static GeometryFactory fact = new GeometryFactory();
	  static WKTReader wktRdr = new WKTReader(fact);
		static String url = "jdbc:postgresql://127.0.0.1:5432/myTest";

	    static String usr = "postgres";

	    static String psd = "ubiloc";
/*	  @Override
	  public void visit(Attribute node) {  
	        System.out.println("属性:"+node.getName()+"="+node.getText());  
	    }  */
	@Override
	public void visit(Element node) {
		// TODO Auto-generated method stub

       /* System.out.println(node.getName());*/
	
       /* System.out.println(node.asXML());*/
/*        if(node.getName()=="pos"){
        	System.out.println(node.getName() + "===="
                    + node.getText());
        	String s=node.getText();
        	System.out.println(s);
        	
        	
        	String wktA="POINT(10 10)";
        	try {
				Geometry A = wktRdr.read(wktA);
				System.out.println(A);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	
        	
        	int a=Integer.parseInt(node.getText());
        	System.out.println(a);
        }*/
        
        if(node.getName()=="LineString"){

        	System.out.println(node.asXML());
        	
        	String s1=node.asXML();
        	
        	Connection conn = null;

            try {

                Class.forName("org.postgresql.Driver");

                conn = DriverManager.getConnection(url, usr, psd);

                Statement st = conn.createStatement();
                
                
/*                String s1="<gml:LineString><gml:pos>100 100</gml:pos><gml:pos>200 300</gml:pos></gml:LineString>";
                String s="'"+s1+"'";*/
                String s2="'"+s1+"'";
             String sql="INSERT INTO test1(myid, myname, pt)VALUES (29, 'J',ST_GeomFromGML(";
             /*sql+="'<gml:LineString><gml:pos>100 100</gml:pos><gml:pos>200 300</gml:pos></gml:LineString>'";*/
             sql+=s2;
             sql+=")";
             sql+=")";
            	/*st.execute("INSERT INTO test1(myid, myname, pt)VALUES (24, 'J',ST_GeomFromGML('<gml:LineString><gml:pos>100 100</gml:pos><gml:pos>200 300</gml:pos></gml:LineString>'))");*/
             st.execute(sql);
             
             st.close();

             conn.close();
        	
/*        	String wktA="POINT(10 10)";
        	try {
				Geometry A = wktRdr.read(wktA);
				System.out.println(A);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}*/
        	
        	
/*        	int a=Integer.parseInt(node.getText());
        	System.out.println(a);*/
        }
            catch (Exception e) {

                e.printStackTrace();

            }
		/*System.out.println(node.getName());*/
	}
	 
	}	 
}
这里只是简单的将GMl文档的Geometry部分读入数据库,实例的GML文档格式要求很好,还没有涉及过多的schema
 类似资料: