日期帮助类



import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class DateUtils {

    public final static String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

    public final static String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd hh:mm:ss";

    public final static String FORMAT_YYYYMMDD = "yyyyMMdd";

    public final static String FORMAT_YYYYMM = "yyyyMM";

    public final static String FORMAT_YYYY = "yyyy";

    public final static String FORMAT_YYYYMMDDHHMISS = "yyyyMMdd HH:mm:ss";

    public final static String FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

    public final static String FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";

    public final static String FORMAT_YYYY_MM_DD_HH_MI_SS_SSS = "yyyy-MM-dd HH:mm:ss:SSS";

    public final static String FORMAT_YYYY_MM = "yyyy-MM";

    public final static String FORMAT_DD_HH_MM_SS = "dd HH:mm:ss";

    public final static String FORMAT_HH_MM_SS = "HH:mm:ss";

    public static final int USE_YEAR = 1;

    public static final int USE_MONTH = 2;

    public static final int USE_DAY = 3;

    /**
     * 根据相应的格式初始化日期格式对象
     * @param pattern
     * @return
     */
    public static DateFormat getDateFormat(final String pattern) {
        return new SimpleDateFormat(pattern);
    }

    /**
     * 获取距离当前日期第N天的日期,若为days>0则为当前日期后几天,否则为前几天
     * @param days
     * @return
     */
    public static Date getPreviousOrNextDaysOfNow(int days) {
        return getPreviousOrNextDaysOfDate(new Date(), days);
    }

    /**
     * 返回当前日期的 格式为: format(yyyy-MM-dd)
     * @return
     */
    public static String getCurrentDate() {
        Date now = new Date();
        return getDateFormat(FORMAT_YYYY_MM_DD).format(now);
    }

    /**
     * 返回指定日期和指定格式日期字符串
     * @return
     */
    public static String getSpecifyDate(Date date,String pattern) {
        return getDateFormat(pattern).format(date);
    }

    /**
     * 返回当前日期的 格式为: format(yyyy-MM-dd HH:MM:SS)
     * @return
     */
    public static String getCurrentDateTime() {
        Date now = new Date();
        return getDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS).format(now);
    }

    /**
     * Current date with format(yyyy-MM-dd HH:MM:SS:SSS)
     * @return
     */
    public static String getCurrentDateTimeMilliSecond(Date date) {
        return getDateFormat(FORMAT_YYYY_MM_DD_HH_MI_SS_SSS).format(date);
    }

    /**
     * 根据相应时间格式(yyyy-MM-dd HH:MM:SS:SSS)字符串转换为Date
     * @return
     */
    public static Date getDateByTimeMilliSecond(String date) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MI_SS_SSS);
        return sdf.parse(date);
    }

    /**
     * 根据相应时间格式字符串转换为Date
     * @return
     */
    public static Date getDateByPattern(String date,String pattern) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.parse(date);
    }

    /**
     * 获取当月的第一天
     * @return
     */
    public static Date getFirstDayOfThisMonth() {
        Calendar nowday = Calendar.getInstance();
        nowday.set(Calendar.DAY_OF_MONTH, 1);
        nowday.set(Calendar.HOUR_OF_DAY, 0);
        nowday.set(Calendar.MINUTE, 0);
        nowday.set(Calendar.SECOND, 0);
        nowday.set(Calendar.MILLISECOND, 0);
        return nowday.getTime();
    }

    /**
     * 得到当前日期的上月日期
     * @return
     */
    public static Date getLastMonth() {
        Calendar nowday = Calendar.getInstance();
        nowday.setTime(new Date());
        nowday.set(Calendar.DAY_OF_MONTH, 1);
        nowday.add(Calendar.MONTH, -1);
        return nowday.getTime();
    }


    public static Date getLastDayByCalendar(Calendar calendar) {
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return calendar.getTime();
    }



    /**
     * 判断指定日期是否在当前N天内
     * @param old
     * @param days
     * @return
     */
    public static boolean isDaysInterval(Date old, int days) {
        Calendar now = Calendar.getInstance();
        return (now.getTimeInMillis() - old.getTime()) <= days * 24 * 3600 * 1000;
    }
    /**
     * 根据日历获取相应月份的第一天
     * @param calendar
     * @return
     */
    public static Date getFirstDayOfTheMonth(Calendar calendar) {
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取指定日期之前或者之后的日期
     * @param days Day
     * @return
     */
    public static Date getPreviousOrNextDaysOfDate(Date date, int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_YEAR, days);
        return calendar.getTime();
    }

    /**
     * 获取与指定日期相差月份数的相同日期
     * @param date
     * @param month
     * @return
     */
    public static Date getPreviousOrNextMonthsOfDate(Date date, int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, month);
        return calendar.getTime();
    }

    /**
     * 获取与指定日期相差年份数的相同日期
     * @param date
     * @param month
     * @return
     */
    public static Date getPreviousOrNextYearsOfDate(Date date, int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, year);
        return calendar.getTime();
    }

    /**
     * 得到当前日期的开始时间
     * @return
     */
    public static Date getBeginOfCurrentDay() {
        return getBeginOfTheDate(new Date());
    }

    /**
     * 得到当前日期的结束时间
     * @return
     */
    public static Date getEndOfCurrentDay() {
        return getEndOfTheDate(new Date());
    }

    public static long getDifferenceDays(Calendar beginCalender, Calendar endCalendar) {
        long days = (endCalendar.getTimeInMillis() - beginCalender.getTimeInMillis()) / (24 * 60 * 60 * 1000);
        days = days + 1;
        return days;
    }

    /**
     * 获取当前年份的第一天
     * @return
     */
    public static Date getBeginOfCurrentYear() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取当前时间 的前后N分钟
     * @param date
     * @param minute
     * @return
     */
    public static Date getPreviousOrNextMinutesOfDate(Date date, int minute) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.add(Calendar.MINUTE, minute);
        return now.getTime();
    }


    /**
     * 得到指定月份的最后时刻
     * @param date
     * @return
     */
    public static Date getLastDateOfTheMonth(Date date) {
        Calendar newday = Calendar.getInstance();
        newday.setTime(date);
        newday.set(Calendar.DAY_OF_MONTH, newday.getActualMaximum(Calendar.DAY_OF_MONTH));
        newday.set(Calendar.HOUR_OF_DAY, 23);
        newday.set(Calendar.MINUTE, 59);
        newday.set(Calendar.SECOND, 59);
        newday.set(Calendar.MILLISECOND, 999);
        return newday.getTime();
    }


    public static Date getBeginOfTheDate(Date date) {
        Calendar nowday = Calendar.getInstance();
        nowday.setTime(date);
        nowday.set(Calendar.HOUR_OF_DAY, 0);
        nowday.set(Calendar.MINUTE, 0);
        nowday.set(Calendar.SECOND, 0);
        nowday.set(Calendar.MILLISECOND, 0);
        return nowday.getTime();
    }


    public static Date getEndOfTheDate(Date date) {
        Calendar nowday = Calendar.getInstance();
        nowday.setTime(date);
        nowday.set(Calendar.HOUR_OF_DAY, 23);
        nowday.set(Calendar.MINUTE, 59);
        nowday.set(Calendar.SECOND, 59);
        nowday.set(Calendar.MILLISECOND, 998);//Sql Server BUG
        return nowday.getTime();
    }

    /**
     * 获取指定时间段内所有的天数集合
     * @param beginDate
     * @param endDate
     * @return
     * @throws Exception
     */
    public static List<String> getAreaTime(String beginDate, String endDate) throws Exception {
        List<String> timeList = new ArrayList<String>();
        if (endDate == null || "".equals(endDate)) {
            timeList.add(beginDate);
            return timeList;
        }
        // day
        if (beginDate.length() <= 7) {
            return getAreaMonthTime(beginDate, endDate);
            // month
        } else {
            return getAreaDayTime(beginDate, endDate);
        }
    }

    private static List<String> getAreaMonthTime(String beginMonth, String endMonth) throws Exception {
        Date parsedBeginMonth = getDateFormat(FORMAT_YYYY_MM).parse(beginMonth);
        String tempStr = "";
        List<String> timeList = new ArrayList<String>();
        int months = 0;
        while (!endMonth.equals(tempStr)) {
            tempStr = getDateFormat(FORMAT_YYYY_MM).format(getPreviousOrNextMonthsOfDate(parsedBeginMonth, months));
            timeList.add(tempStr);
            months++;
        }
        return timeList;
    }

    /**
     * 获取指定时间段内所有的天数集合
     * @param beginDate
     * @param endDate
     * @return
     * @throws Exception
     */
    public static List<String> getAreaDayTime(String beginDate, String endDate) throws Exception {
        Date parsedBeginMonth = getDateFormat(FORMAT_YYYY_MM_DD).parse(beginDate);
        String tempStr = "";
        List<String> timeList = new ArrayList<String>();
        int months = 0;
        while (!endDate.equals(tempStr)) {
            tempStr = getDateFormat(FORMAT_YYYY_MM_DD).format(getPreviousOrNextDaysOfDate(parsedBeginMonth, months));
            timeList.add(tempStr);
            months++;
        }
        return timeList;
    }

    /**
     * 获取当前日期前一天的相应日期的Long形式如20160227
     * @return
     */
    public static Long getPreviousDay() {
        Date date = getPreviousOrNextDaysOfDate(new Date(), -1);
        return Long.valueOf((getDateFormat(FORMAT_YYYYMMDD).format(date)));
    }

    /**
     * 获取指定日期前一天的相应日期的Long形式如20160227
     * @return
     */
    public static Long getPreviousDay(Date date,int days) {
        Date dates = getPreviousOrNextDaysOfDate(date, days);
        return Long.valueOf((getDateFormat(FORMAT_YYYYMMDD).format(dates)));
    }

    /**
     * 获取指定日期前N月或者后N月的相同日期字符串
     * @param date
     * @param n
     * @return
     * @throws Exception
     */
    public static String getPreviousOrNextMonthsOfTheMonth(String date, int n) throws Exception {
        Calendar calendar = new GregorianCalendar();
        DateFormat dateFormat = getDateFormat(FORMAT_YYYYMM);
        calendar.setTime(dateFormat.parse(date));
        calendar.add(Calendar.MONTH, n);
        return dateFormat.format(calendar.getTime());
    }


    public static String getPreviousOrNextDaysOfTheDay(String date, int days) throws Exception {
        Calendar calendar = new GregorianCalendar();
        DateFormat dateFormat = getDateFormat(FORMAT_YYYYMMDD);
        calendar.setTime(dateFormat.parse(date));
        calendar.add(Calendar.DAY_OF_MONTH, days);
        return dateFormat.format(calendar.getTime());
    }

    public static Long getFirstDayOfCurrentMonth() {
        Date date = getFirstDayOfThisMonth();
        String dateStr = getDateFormat(FORMAT_YYYYMMDD).format(date);
        return Long.valueOf(dateStr);
    }

    public static Long getFirstMonthOfNow() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.MONTH, 0);
        return Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(calendar.getTime()));
    }

    public static Integer getCurrentDay() {
        Date date = new Date();
        return Integer.parseInt(getDateFormat(FORMAT_YYYYMMDD).format(date));
    }

    public static Integer getCurrentMonth() {
        Date date = new Date();
        return Integer.parseInt(getDateFormat(FORMAT_YYYYMM).format(date));
    }

    public static Integer getCurrentYear() {
        Date date = new Date();
        return Integer.parseInt(getDateFormat(FORMAT_YYYY).format(date));
    }

    public static Integer getKpiDbAnyOffsetDayOfNow(int day) {
        Calendar nowday = Calendar.getInstance();
        nowday.set(Calendar.DAY_OF_YEAR, nowday.get(Calendar.DAY_OF_YEAR) + day);
        return Integer.parseInt(getDateFormat(FORMAT_YYYYMMDD).format(nowday.getTime()));
    }

    /**
     * 得到当前日期下一年的上个月
     * @return
     */
    public static Long getPreviousMonthOfNextYear() {
        Calendar nowday = Calendar.getInstance();
        nowday.setTime(new Date());
        nowday.set(Calendar.DAY_OF_MONTH, 1);
        nowday.add(Calendar.YEAR, +1);
        nowday.add(Calendar.MONTH, -1);
        Long time = Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(nowday.getTime()));
        return time;
    }

    /**
     * 获取指定日期下个月的相同日期
     * @param date
     * @return
     */
    public static Long getTheSameDayOfTheNextMonth(Date date) {
        Date next = getPreviousOrNextMonthsOfDate(date, 1);
        Long time = Long.valueOf(getDateFormat(FORMAT_YYYYMMDD).format(next));
        return time;
    }

    /**
     * 获取当前日期下个月的相同日期
     * @param date
     * @return
     */
    public static Long getTheSameDayOfNextMonth() {
        return getTheSameDayOfTheNextMonth(new Date());
    }

    public static Long getPreviousYear() {
        Calendar nowday = Calendar.getInstance();
        nowday.setTime(new Date());
        nowday.add(Calendar.YEAR, -1);
        return Long.valueOf(getDateFormat(FORMAT_YYYY).format(nowday.getTime()));
    }

    public static List<String> getTimeListByParameter(Date paramDate, int paramter, int type) {
        if (type == USE_YEAR) {
            Date newDate = getPreviousOfNextYearOfDate(paramDate, -paramter);
            return getDaysBetweenDate(paramDate, newDate);
        } else if (type == USE_MONTH) {
            Date newDate = getPreviousOrNextMonthsOfDate(paramDate, paramter);
            return getDaysBetweenDate(paramDate, newDate);
        } else {
            return getDaysByBeginDate(paramDate, paramter);
        }
    }

    private static Date getPreviousOfNextYearOfDate(Date date, int year) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.add(Calendar.YEAR,year);
        return now.getTime();
    }

    private static List<String> getDaysBetweenDate(Date paramDate, Date newDate) {
        DateFormat dateFormat = getDateFormat(FORMAT_YYYYMMDD);
        String formatNewDate = dateFormat.format(newDate);
        String tempStr = "";
        List<String> timeList = new ArrayList<String>();
        int days = 0;
        while (!formatNewDate.equals(tempStr)) {
            tempStr = dateFormat.format(getPreviousOrNextDaysOfDate(paramDate, -days));
            timeList.add(tempStr);
            days++;
        }
        return timeList;
    }

    private static List<String> getDaysByBeginDate(Date paramDate, int paramter) {
        List<String> timeList = new ArrayList<String>();
        for (int i = 1; i <= paramter; i++) {
            timeList.add(getDateFormat(FORMAT_YYYYMMDD).format(getPreviousOrNextDaysOfDate(paramDate, -i)));
        }
        return timeList;
    }


    public static Long getFirstMonthOfCurrentYear() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH,0);
        return Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(calendar.getTime()));
    }

    public static Date getPreviousOrNextMonthsOfDateTime(Date date, int months){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, months);
        return calendar.getTime();
    }

    /**
     * 获取指定日期的前后N天的日期字符串
     * @param ymd
     * @param days
     * @return
     * @throws ParseException
     */
    public static String  getPreviousOrNextDaysOfNow(String ymd,int days) throws ParseException {
        Date date = getDateFormat(FORMAT_YYYY_MM_DD).parse(ymd);
        Date result = getPreviousOrNextDaysOfDate(date, days);
        return getDateFormat(FORMAT_YYYY_MM_DD).format(result);
    }

    public static Date getBeginOfThePreviousOrNextMonths(int month){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    public static Date getPreviousOrNextWorkDaysOfDate(Date date, int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int step = 0;
        if(days>0){
            step = 1;
        }else{
            step = -1;
        }
        for(int i = 0; i < Math.abs(days) ; ){
            calendar.add(Calendar.DAY_OF_YEAR, step);
            if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
                continue;
            }
            i++;
        }
        return calendar.getTime();
    }

    public static Date getBeginDateOfTheMonth(Date date) {
        Calendar newday = Calendar.getInstance();
        newday.setTime(date);
        newday.set(Calendar.DAY_OF_MONTH, 1);
        newday.set(Calendar.HOUR_OF_DAY, 0);
        newday.set(Calendar.MINUTE, 0);
        newday.set(Calendar.SECOND, 0);
        newday.set(Calendar.MILLISECOND, 0);
        return newday.getTime();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值