一、什麼是經緯度
經度和緯度是描述地球表面位置的坐標系,是地球表面的橫縱坐標,用於確定某個具體的地理位置。
經度是以本初子午線為基礎,東西兩邊各180度。東經0度是本初子午線,向東經度遞增,向西逆序遞減,例如,東經120度,表示該地位於本初子午線以東120度的地方。
緯度是以赤道為基礎,南北兩邊各90度。赤道是0度,向北緯度遞增,向南逆序遞減,例如,北緯30度,表示該地位於赤道以北30度的地方。
二、經緯度的格式
經緯度的格式有多種,最常用的格式有以下幾種:
- 度、分、秒(符號+數字)
- 度十進位(符號+數字)
- 地球坐標系(符號+數字)
三、經緯度的正則表達式
利用正則表達式可以判斷輸入是否符合經緯度格式。以下是常用的經緯度正則表達式:
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
原創文章,作者:XCLHH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332262.html