一、什么是经纬度

经度和纬度是描述地球表面位置的坐标系,是地球表面的横纵坐标,用于确定某个具体的地理位置。

经度是以本初子午线为基础,东西两边各180度。东经0度是本初子午线,向东经度递增,向西逆序递减,例如,东经120度,表示该地位于本初子午线以东120度的地方。

纬度是以赤道为基础,南北两边各90度。赤道是0度,向北纬度递增,向南逆序递减,例如,北纬30度,表示该地位于赤道以北30度的地方。

二、经纬度的格式

经纬度的格式有多种,最常用的格式有以下几种:

  1. 度、分、秒(符号+数字)
  2. 度十进制(符号+数字)
  3. 地球坐标系(符号+数字)

三、经纬度的正则表达式

利用正则表达式可以判断输入是否符合经纬度格式。以下是常用的经纬度正则表达式:

1、度、分、秒(符号+数字):
/^[+-]?((0?[1-9]|[1-8]\d|90)°([1-5]?\d′([1-5]?\d″)?)?|(0?[1-9]|[1-8]\d|90)°(0?\d′(0?\d″)?)) [+-]?((0?[1-9]|[1-9]\d|1[0-7]\d|180)°([1-5]?\d′([1-5]?\d″)?)?|(0?[1-9]|[1-9]\d|1[0-7]\d|180)°(0?\d′(0?\d″)?))$/

2、度十进制(符号+数字):
/^[+-]?(0?\d{1,2}(\.\d+)?|1[0-7]?\d{1}(\.\d+)?|180(\.0+)?)[°] [+-]?(0?\d{1,2}(\.\d+)?|[1-8]?\d{1}(\.\d+)?|90(\.0+)?)°$/

3、地球坐标系(符号+数字)
/^[+-]?(0?\d{1,2}(\.\d+)?|1[0-7]?\d{1}(\.\d+)?|180(\.0+)?),[+-]?(0?\d{1,2}(\.\d+)?|[1-8]?\d{1}(\.\d+)?|90(\.0+)?)$/

四、经纬度正则表达式解析

1、度、分、秒(符号+数字)

该正则表达式与度、分、秒(符号+数字)格式的经纬度相匹配,如“37°22′40.5″N122°05′06.5″E”。

解析:

  • ^[+-]?:以可选的符号开头,即字符串可以是正数、负数或不带符号。
  • ((0?[1-9]|[1-8]\d|90)°:1到2位数,且不能以0开头,或者以1~8开头的两位数,或者是90。
  • ([1-5]?\d′([1-5]?\d″)?)?:0到2个数字表示分钟,单引号是分隔符,如果有分钟,之后可能有0到2个数字表示秒,秒用双引号分隔。
  • |:或
  • (0?[1-9]|[1-8]\d|90)°(0?\d′(0?\d″)?):即45°00′
  • [+-]?((0?[1-9]|[1-9]\d|1[0-7]\d|180)°([1-5]?\d′([1-5]?\d″)?)?|(0?[1-9]|[1-9]\d|1[0-7]\d|180)°(0?\d′(0?\d″)?))$:以可选符号结尾,即字符串可以是正数、负数或不带符号。

2、度十进制(符号+数字)

该正则表达式与度十进制(符号 + 数字)格式的经纬度相匹配,如“37.3775°N122.057°E”。

解析:

  • ^[+-]?:以可选符号开头,即字符串可以是正数、负数或不带符号。
  • (0?\d{1,2}(\.\d+)?):1到3位数,可以是以0开头的1到2位数或以1到9开头的两位数或三位数,中间可以是一个小数点以及1位或多位的数字。
  • |:或
  • (1[0-7]?\d{1}(\.\d+)?):以1开头,后面可以是一位或两位数字,最大值不能超过179,中间可以是一个小数点以及1位或多位的数字。
  • |:或
  • (180(\.0+)?))°:以180结尾,中间可以是一个小数点加0或多个0。
  • [ ]:一个空格
  • [+-]?(0?\d{1,2}(\.\d+)?|[1-8]?\d{1}(\.\d+)?|90(\.0+)?)°$:以可选符号结尾,即字符串可以是正数、负数或不带符号。

3、地球坐标系(符号+数字)

该正则表达式与地球坐标系(符号+数字)格式的经纬度相匹配,如“37.3775,122.057”。

解析:

  • ^[+-]?:以可选符号开头,即字符串可以是正数、负数或不带符号。
  • (0?\d{1,2}(\.\d+)?):与度十进制的解析类似。
  • |:或
  • (1[0-7]?\d{1}(\.\d+)?):与度十进制的解析类似。
  • |:或
  • (180(\.0+)?))°:与度十进制的解析类似。
  • ,:逗号
  • [+-]?(0?\d{1,2}(\.\d+)?|[1-8]?\d{1}(\.\d+)?|90(\.0+)?)$:以可选符号结尾,即字符串可以是正数、负数或不带符号。

五、使用示例

以下是使用JavaScript实现检验经纬度是否符合格式的示例代码:

function isLatitude(input) {
  // 精确到小数点后6位
  const regex = /^[+-]?(0?\d{1,2}(\.\d{1,6})?|1[0-7]?\d{1}(\.\d{1,6})?|180(\.0{1,6})?)°$/;
  return regex.test(input);
}

function isLongitude(input) {
  // 精确到小数点后6位
  const regex = /^[+-]?((0?\d|[1-9]\d|1[0-7]\d)(\.\d{1,6})?|180(\.0{1,6})?)°$/;
  return regex.test(input);
}

// 使用示例
console.log(isLatitude("37.3775°N")); // true
console.log(isLatitude("-90°")); // true
console.log(isLatitude("91.12345678°E")); // false
console.log(isLongitude("122°E")); // false
console.log(isLongitude("122.057°E")); // true