kotlin DLLatLngUtil 经纬度数据处理工具的使用 坐标系转换 度分秒转换

kotlin DLLatLngUtil 经纬度数据处理工具的使用 坐标系转换 度分秒转换

前言

常用的经纬度数据的处理逻辑封装。

使用

1 Add it in your root build.gradle at the end of repositories:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

2 Add the dependency

dependencies {
    // 经纬度工具
    implementation 'com.github.D10NGYANG:DLLatLngUtil:1.1'
}

3 混淆

-keep class com.d10ng.latlnglib.** {*;}
-dontwarn com.d10ng.latlnglib.**

实例

/**
 * 经纬度的坐标系转换
 *
 * @receiver [DLatLng]
 * @param from [CoordinateSystemType] 输入坐标系
 * @param to [CoordinateSystemType] 输出坐标系
 * @return [DLatLng]
 */
fun DLatLng.convert(from: CoordinateSystemType, to: CoordinateSystemType): DLatLng

/**
 * 判断经度数据是否为东经
 * @receiver [Double]
 * @return [Boolean] true: 东经;false: 西经
 */
fun Double.isEastLongitude(): Boolean

/**
 * 判断纬度数据是否为北纬
 * @receiver [Double]
 * @return [Boolean] true: 北纬;false: 南纬
 */
fun Double.isNorthLatitude(): Boolean

/**
 * 将经度转换成不带前缀的数据
 * - 当数据大于180度或者小于0度表示西经
 * @receiver [Double]
 * @return [Double] 返回去除"-"或小于180的数值;eg:输入181.1,返回1.1; 输入-1.1返回1.1;
 */
fun Double.toLongitudeNoPre(): Double

/**
 * 将纬度转换成不带前缀的数据
 * - 当数据大于90度或者小于0度表示南纬
 * @receiver [Double]
 * @return [Double] 返回去除"-"或小于90的数值;eg:输入91.1,返回1.1; 输入-1.1返回1.1;
 */
fun Double.toLatitudeNoPre(): Double

/**
 * 将经度添加东经标记转换成完整数据
 * - eg: 输入经度=110.1,isEast=false,isPositive=false,输出经度=-110.1
 * - eg: 输入经度=110.1,isEast=false,isPositive=true,输出经度=249.9
 * @receiver Double
 * @param isEast [Boolean] 是否为东经
 * @param isPositive [Boolean] 输出数据是否需要为正值
 * @return [Double] 输出经度
 */
fun Double.toFullLongitude(isEast: Boolean, isPositive: Boolean = true): Double

/**
 * 将纬度添加北纬标记转换成完整数据
 * - eg: 输入纬度=10.1,isNorth=false,isPositive=false,输出纬度=-10.1
 * - eg: 输入纬度=10.1,isNorth=false,isPositive=true,输出纬度=79.9
 * @receiver Double
 * @param isNorth [Boolean] 是否为北纬
 * @param isPositive [Boolean] 输出数据是否需要为正值
 * @return [Double] 输出纬度
 */
fun Double.toFullLatitude(isNorth: Boolean, isPositive: Boolean = true): Double

/**
 * 将经纬度转经纬度字符串
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,E、W、N、S
 * - CH: 中文方向,东经、西经、北纬、南纬
 * @receiver [Double] eg: 103.5863933
 * @param isLongitude [Boolean] 是否为经度
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [String] eg: 东经 E103°35′11.02″
 */
fun Double.toLatLngString(isLongitude: Boolean, pattern: String = "CHFd°m′S.ss″"): String

/**
 * 将经度转经度字符串
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,E、W
 * - CH: 中文方向,东经、西经
 * @receiver [Double] eg: 103.5863933
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [String] eg: 东经 E103°35′11.02″
 */
fun Double.toLongitudeString(pattern: String = "CHFd°m′S.ss″"): String

/**
 * 将纬度转纬度字符串
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,N、S
 * - CH: 中文方向,北纬、南纬
 * @receiver [Double] eg: 29.73784595
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [String] eg: 北纬 N29°44′16.25″
 */
fun Double.toLatitudeString(pattern: String = "CHFd°m′S.ss″"): String

/**
 * 将经纬度字符串转经纬度
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,E、W、N、S
 * - CH: 中文方向,东经、西经、北纬、南纬
 * @receiver [String] eg: 东经 E103°35′11.02″
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [Double] eg: 103.5863933
 */
fun String.toLatOrLng(pattern: String): Double

/**
 * 将经度字符串转经度
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,E、W
 * - CH: 中文方向,东经、西经
 * @receiver [String] eg: 东经 E103°35′11.02″
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [Double] eg: 103.5863933
 */
fun String.toLongitude(pattern: String): Double

/**
 * 将纬度字符串转纬度
 * - d: 度
 * - m: 分
 * - S: 秒的整数部分
 * - s: 秒的小数部分
 * - F: 英文方向,N、S
 * - CH: 中文方向,北纬、南纬
 * @receiver [String] eg: 北纬 N29°44′16.25″
 * @param pattern [String] eg: "CH Fd°m′S.ss″"
 * @return [Double] eg: 29.73784595
 */
fun String.toLatitude(pattern: String): Double

/**
 * 将ddmm.mmmm格式的经纬度转换成 真正的经纬度
 * - 北斗2.0协议里专用转换
 * @receiver [Double] eg: 11301.8789
 * @return [Double] eg: 113.03131
 */
fun Double.ddmmpmmmm2LatOrLng(): Double

Github

https://github.com/D10NGYANG/DLLatLngUtil

完事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值