关于hibernate支持mysql-spatial

其实在诸多数据库中对于空间分析的支持 mysql 是最不好的,但是谁让我们公司用的是 mysql 呢。看看官网怎么说来着: Some functions that work for PostGIS or Oracle may fail to work for MySQL.。哎真是的,看的我头疼。看了看官网,写了一个小例子,首先先看一下项目结构:

                                           

其中有三个jar包比较重要分别为:hibernate-spatial-1.1.jar、hibernate-spatial-mysql-1.1.1.jar、

jts-1.11.jar,以我的理解:JTS( java Topology Suite)字面上理解就是空间拓扑的意思。hibernate-spatial则是pojo的映射,hibernate-spatial-mysql-1.1.1.jar这是对于mysql专门的空间支持。

Event.java

package event;

import java.util.Date;

import com.vividsolutions.jts.geom.Point;

public class Event {
	private Long id;
	private Point point;
	private Date date;
	private String title;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Point getPoint() {
		return point;
	}
	public void setPoint(Point point) {
		this.point = point;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	

}

EventManager.java

package event;

    import org.hibernate.HibernateException;
import org.hibernate.Session;

    import java.util.Date;

    import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.WKTReader;
import com.vividsolutions.jts.io.ParseException;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.List;
import org.hibernatespatial.criterion.SpatialRestrictions;
    
import util.HibernateUtil;
public class EventManager {

        public static void main(String[] args) throws ParseException {
            EventManager mgr = new EventManager();

          /*  if (args[0].equals("store")) {
                mgr.createAndStoreEvent("My Event", new Date(),  assemble(args));
            }
            
            
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.getTransaction().commit();*/

            for(int i=0;i<10;i++){
            Event ev = new Event();
            ev.setDate(new java.sql.Date((new Date()).getTime()));
            
            WKTReader fromText = new WKTReader();
            Geometry geom = null;
            geom = fromText.read("POINT(12.32 223)");
            ev.setPoint((Point)geom);
            ev.setTitle("name");
            mgr.Save(ev);
            }
            
            List<Event> points =  mgr.find("POLYGON((0 0,200 0,200 400,0 400,0 0))");
            for(Event pt:points){
            	System.out.println("size---"+points.size()+"-----"+pt.getPoint().getX());
            }
        }

        public void Save(Event ev)
        {
        try
        {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();  //获取hibernate的session
         session.beginTransaction();
         session.save(ev);  //这里只需要调用save方法把news对象传进去就插入成功了!
         session.getTransaction().commit();
        } catch (HibernateException e)
        {
        e.printStackTrace();
        }
        }
        
        /**
        * Utility method to assemble all arguments save the first into a String
        */
        private static String assemble(String[] args){
                StringBuilder builder = new StringBuilder();
                for(int i = 1; i<args.length;i++){
                        builder.append(args[i]).append(" ");
                }
                return builder.toString();
        }
        
        private List find(String wktFilter){
            WKTReader fromText = new WKTReader();
            Geometry filter = null;
            try{
                    filter = fromText.read(wktFilter);
            } catch(ParseException e){
                    throw new RuntimeException("Not a WKT String:" + wktFilter);
            }
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            System.out.println("Filter is : " + filter);
            Criteria testCriteria = session.createCriteria(Event.class);
            testCriteria.add(SpatialRestrictions.within("point", filter));
            List results = testCriteria.list();
            session.getTransaction().commit();
            return results;
        }

    }

Event.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="event">
	<class name="Event" table="EVENTS">

        <id name="id" column="EVENT_ID">
			<generator class="native"/>
		</id>

       <property name="date" type="timestamp" column="EVENT_DATE"/> 

        <property name="title" type="string"/>

       <property name="point" type="org.hibernatespatial.GeometryUserType"  column="LOC"/>  
	</class>
</hibernate-mapping>

HibernateUtil.java

 package util;


    import org.hibernate.*;
    import org.hibernate.cfg.*;

    public class HibernateUtil {

        private static final SessionFactory sessionFactory;

        static {
            try {
                // Create the SessionFactory from hibernate.cfg.xml
                sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
            } catch (Throwable ex) {
                // Make sure you log the exception, as it might be swallowed
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }

        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }

    }

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/events</property>
        <property name="connection.username">root</property>
        <property name="connection.password">B10090120</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SPATIAL SQL dialect -->
        <property name="dialect">org.hibernatespatial.mysql.MySQLSpatialDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <mapping resource="event/Event.hbm.xml"/>

    </session-factory>

</hibernate-configuration>		

参考文档:http://www.hibernatespatial.org/tutorial.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
explicit spectral-to-spatial convolution for pansharpening是一种用于全色融合的显式光谱到空间卷积方法。全色融合是将高分辨率的全色(黑白)图像与低分辨率的多光谱(彩色)图像融合,以提高图像质量和细节。传统的融合方法常常使用高通滤波器进行频域操作,而explicit spectral-to-spatial convolution for pansharpening则使用基于卷积的空间域方法。 该方法基于以下原理:在全色图像中,光谱分辨率高,但空间分辨率较低;而在多光谱图像中,光谱分辨率较低,但空间分辨率较高。因此,通过将全色图像的光谱信息传递给多光谱图像,可以提高多光谱图像的空间分辨率。 explicit spectral-to-spatial convolution for pansharpening方法通过使用卷积核,将全色图像的光谱信息转换为空间域的高频细节。这个卷积核是根据光谱和空间信息之间的关系而设计的。通过将这个卷积核应用于低分辨率的多光谱图像,可以增强其空间细节,使其接近高分辨率的全色图像。 这种方法的优势在于显式地将光谱信息转换为空间域的细节,能够更好地保留图像的光谱特征和空间细节。与传统的频域方法相比,显式光谱到空间卷积方法更容易实现,并且能够更好地适应各种图像场景。 总之,explicit spectral-to-spatial convolution for pansharpening是一种通过卷积将全色图像的光谱信息转换为多光谱图像的空间细节的方法,以实现全色融合,提高图像质量和细节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值