ziwei-cli 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -0
- package/SKILL.md +142 -0
- package/bin/install.cjs +249 -0
- package/bin/ziwei.js +151 -0
- package/lib/commands/bazi.js +35 -0
- package/lib/commands/palace.js +156 -0
- package/lib/commands/synastry.js +124 -0
- package/lib/engine/astrolabe.js +216 -0
- package/lib/engine/bazi.js +207 -0
- package/lib/engine/config.js +167 -0
- package/lib/engine/geo.js +252 -0
- package/lib/engine/patterns.js +371 -0
- package/lib/engine/solar.js +211 -0
- package/lib/engine/synastry.js +437 -0
- package/package.json +49 -0
- package/system-prompt.md +539 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 紫微斗数配置文件
|
|
3
|
+
* 包含权重、常量和映射定义
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// 宫位名称
|
|
7
|
+
export const PALACE_NAMES = ["疾厄", "财帛", "子女", "夫妻", "兄弟", "命宫", "父母", "福德", "田宅", "官禄", "仆役", "迁移"];
|
|
8
|
+
|
|
9
|
+
// 星曜集合
|
|
10
|
+
export const MAJOR_14 = new Set(["紫微", "天机", "太阳", "武曲", "天同", "廉贞", "天府", "太阴", "贪狼", "巨门", "天相", "天梁", "七杀", "破军"]);
|
|
11
|
+
export const SOFT = new Set(["左辅", "右弼", "天魁", "天钺", "文昌", "文曲"]);
|
|
12
|
+
export const TOUGH = new Set(["擎羊", "陀罗", "火星", "铃星", "地空", "地劫"]);
|
|
13
|
+
export const FLOWER = new Set(["红鸾", "天喜", "天姚", "咸池"]);
|
|
14
|
+
export const HELPER = new Set(["解神", "年解", "月解"]);
|
|
15
|
+
export const POS_ADJ = new Set(["天德", "月德", "天福", "三台", "八座", "恩光", "天贵", "天官", "台辅", "封诰", "龙池", "凤阁", "天才", "天厨"]);
|
|
16
|
+
export const NEG_ADJ = new Set(["天空", "旬空", "空亡", "天刑", "阴煞", "天哭", "破碎", "小耗", "大耗", "伏兵", "官符", "病符"]);
|
|
17
|
+
|
|
18
|
+
// 星曜简义
|
|
19
|
+
export const STAR_BRIEF = {
|
|
20
|
+
"紫微":"权柄统筹","天机":"机变策划","太阳":"光彩名誉","武曲":"财务执行","天同":"温和求稳","廉贞":"制度边界","天府":"守成聚财","太阴":"温润细腻","贪狼":"社交尝鲜","巨门":"口才是非","天相":"平衡协调","天梁":"庇护正直","七杀":"决断攻坚","破军":"变革重来",
|
|
21
|
+
"左辅":"强势援助","右弼":"温柔后援","天魁":"领导贵气","天钺":"方案解题","文昌":"文书逻辑","文曲":"文艺表达",
|
|
22
|
+
"擎羊":"刚猛冲突","陀罗":"顽固拖拽","火星":"急躁爆点","铃星":"惊扰敏感","地空":"理想落空","地劫":"破耗错失",
|
|
23
|
+
"禄存":"俸禄保底","天马":"机动奔波",
|
|
24
|
+
"红鸾":"端庄亲和","天喜":"活泼喜庆","天姚":"表现魅力","咸池":"风情吸引"
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// 星曜权重配置
|
|
28
|
+
export const BASE_WEIGHTS = {
|
|
29
|
+
"紫微": 2.5, "天相": 2.0, "天府": 2.0, "太阳": 1.8, "太阴": 1.6,
|
|
30
|
+
"天同": 1.6, "武曲": 1.5, "天机": 1.4, "天梁": 1.4, "巨门": 0.8,
|
|
31
|
+
"七杀": 0.8, "贪狼": 0.6, "廉贞": 0.6, "破军": 0.5,
|
|
32
|
+
"左辅": 1.2, "右弼": 1.2, "天魁": 1.2, "天钺": 1.2, "文昌": 1.2, "文曲": 1.2,
|
|
33
|
+
"擎羊": -1.5, "陀罗": -1.5, "火星": -1.5, "铃星": -1.5, "地空": -1.5, "地劫": -1.5,
|
|
34
|
+
"禄存": 1.4, "天马": 0.8
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// 四化权重
|
|
38
|
+
export const MUTAGEN_WEIGHTS = { "禄": 1.2, "权": 0.8, "科": 0.8, "忌": -1.6 };
|
|
39
|
+
|
|
40
|
+
// 动态权重
|
|
41
|
+
export const FLOWER_WEIGHT = 0.8;
|
|
42
|
+
export const HELPER_WEIGHT = 0.6;
|
|
43
|
+
export const POS_ADJ_WEIGHT = 0.4;
|
|
44
|
+
export const NEG_ADJ_WEIGHT = -0.6;
|
|
45
|
+
|
|
46
|
+
// 三方四正权重
|
|
47
|
+
export const TRI_WEIGHTS = { "self": 0.7, "opp": 0.1, "tri1": 0.1, "tri2": 0.1 };
|
|
48
|
+
|
|
49
|
+
// 归一化参数
|
|
50
|
+
export const NORM_PARAMS = { "center": 0.0, "spread": 8.0 };
|
|
51
|
+
|
|
52
|
+
// 亮度映射
|
|
53
|
+
export const BRIGHTNESS_ALIASES = {
|
|
54
|
+
"得地": "得", "利益": "利", "平和": "平", "不得地": "不", "不得": "不", "落陷": "陷", "庙旺": "庙"
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const BRIGHTNESS_POS_MULT = {
|
|
58
|
+
"庙": 1.30, "旺": 1.20, "得": 1.08, "利": 1.03, "平": 1.00, "不": 0.60, "陷": -1.20
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const BRIGHTNESS_NEG_MULT = {
|
|
62
|
+
"庙": 0.85, "旺": 0.90, "得": 0.95, "利": 0.98, "平": 1.00, "不": 1.10, "陷": 1.30
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// 评分档位
|
|
66
|
+
export const SYNASTRY_BINS = [
|
|
67
|
+
["相克", 0, 35], ["相冲", 35, 50], ["中性", 50, 60],
|
|
68
|
+
["相合", 60, 75], ["强合", 75, 85], ["共振", 85, 101]
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
// 档位建议文案
|
|
72
|
+
export const BUCKET_TONE = {
|
|
73
|
+
"相克": "冲突偏多,需规避关键决策。",
|
|
74
|
+
"相冲": "摩擦与互补并存,建立互动规则更重要。",
|
|
75
|
+
"中性": "可做但别硬上,围绕具体主题再看组合。",
|
|
76
|
+
"相合": "和谐互补,适合推进关键事项。",
|
|
77
|
+
"强合": "高度匹配,建议升阶合作/关系。",
|
|
78
|
+
"共振": "强同频,适合关键节点与共创。"
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// 宫位建议配置
|
|
82
|
+
export const PALACE_ADVICE = {
|
|
83
|
+
"夫妻": {
|
|
84
|
+
"pos": ["提升沟通频率,规划共同时间与仪式感。"],
|
|
85
|
+
"neg": ["建立冲突降噪规则:冷静期/复盘/沟通边界。"],
|
|
86
|
+
"neu": ["从小议题协作,逐步验证相处节奏。"]
|
|
87
|
+
},
|
|
88
|
+
"官禄": {
|
|
89
|
+
"pos": ["明确分工与节奏,设立周迭代和月度复盘。"],
|
|
90
|
+
"neg": ["明确权限与决策门槛,避免职责拉扯。"],
|
|
91
|
+
"neu": ["小范围试合作,逐步扩大责任。"]
|
|
92
|
+
},
|
|
93
|
+
"财帛": {
|
|
94
|
+
"pos": ["共拟预算与分配规则,设收益复盘。"],
|
|
95
|
+
"neg": ["设止损线与上限,避免冲动投入。"],
|
|
96
|
+
"neu": ["从小额试点开始校验资金规则。"]
|
|
97
|
+
},
|
|
98
|
+
"田宅": {
|
|
99
|
+
"pos": ["可共建家庭资产/居住规划,明确产权边界。"],
|
|
100
|
+
"neg": ["保持财产独立,避免高杠杆与长期绑定。"],
|
|
101
|
+
"neu": ["从短期居住/资产安排试运行。"]
|
|
102
|
+
},
|
|
103
|
+
"父母": {
|
|
104
|
+
"pos": ["建立与权威的正向沟通与汇报机制。"],
|
|
105
|
+
"neg": ["隔离外部权威压力,内部先达成一致。"],
|
|
106
|
+
"neu": ["约定对外口径,降低外部干扰。"]
|
|
107
|
+
},
|
|
108
|
+
"子女": {
|
|
109
|
+
"pos": ["推进项目/育成计划,明确里程碑与质控。"],
|
|
110
|
+
"neg": ["明确职责归属与质量门槛,避免扯皮。"],
|
|
111
|
+
"neu": ["小步快跑,短周期评审与纠偏。"]
|
|
112
|
+
},
|
|
113
|
+
"迁移": {
|
|
114
|
+
"pos": ["安排旅行/差旅/岗位轮换,增强共同体验。"],
|
|
115
|
+
"neg": ["减少大幅变动,必要时先做短期尝试。"],
|
|
116
|
+
"neu": ["短期流动尝试,评估适配度。"]
|
|
117
|
+
},
|
|
118
|
+
"疾厄": {
|
|
119
|
+
"pos": ["建立健康习惯与风险缓释清单。"],
|
|
120
|
+
"neg": ["避免高风险安排,设置预警与兜底。"],
|
|
121
|
+
"neu": ["制定基础作息与体检提醒。"]
|
|
122
|
+
},
|
|
123
|
+
"兄弟": {
|
|
124
|
+
"pos": ["利用社交与协同网络,扩大协作半径。"],
|
|
125
|
+
"neg": ["避免圈层冲突,划清人际边界。"],
|
|
126
|
+
"neu": ["小群试协作,逐步扩圈。"]
|
|
127
|
+
},
|
|
128
|
+
"福德": {
|
|
129
|
+
"pos": ["强化价值观同频:共享语言与仪式。"],
|
|
130
|
+
"neg": ["避免价值观争论,聚焦具体议题。"],
|
|
131
|
+
"neu": ["围绕共同兴趣开展低风险活动。"]
|
|
132
|
+
},
|
|
133
|
+
"命宫": {
|
|
134
|
+
"pos": ["鼓励优势表达,彼此赋能。"],
|
|
135
|
+
"neg": ["尊重个体空间与界限,降低消耗。"],
|
|
136
|
+
"neu": ["观察互动边界,逐步加深了解。"]
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// 星曜类型中文映射
|
|
141
|
+
export function starsTypeMapping(type) {
|
|
142
|
+
const stars = {
|
|
143
|
+
'major': '主星',
|
|
144
|
+
'soft': '吉星',
|
|
145
|
+
'tough': '煞星',
|
|
146
|
+
'adjective': '杂耀',
|
|
147
|
+
'flower': '桃花',
|
|
148
|
+
'helper': '解神',
|
|
149
|
+
'lucun': '禄存',
|
|
150
|
+
'tianma': '天马'
|
|
151
|
+
};
|
|
152
|
+
return stars[type] || type;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// 运限类型中文映射
|
|
156
|
+
export function scopeMapping(scope) {
|
|
157
|
+
const scopes = {
|
|
158
|
+
'daily': '流日星耀',
|
|
159
|
+
'monthly': '流月星耀',
|
|
160
|
+
'yearly': '流年星耀',
|
|
161
|
+
'decadal': '大限星耀',
|
|
162
|
+
'origin': '本命星耀'
|
|
163
|
+
};
|
|
164
|
+
return scopes[scope] || scope;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export const MUTAGENS_MAPPING = ['禄', '权', '科', '忌'];
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 简化版地理位置查询服务
|
|
3
|
+
* 包含主要城市坐标,未知城市默认返回北京坐标
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// 主要城市坐标数据
|
|
7
|
+
const CITY_DATA = {
|
|
8
|
+
// 直辖市
|
|
9
|
+
"北京": { lat: 39.9042, lng: 116.4074 },
|
|
10
|
+
"北京市": { lat: 39.9042, lng: 116.4074 },
|
|
11
|
+
"上海": { lat: 31.2304, lng: 121.4737 },
|
|
12
|
+
"上海市": { lat: 31.2304, lng: 121.4737 },
|
|
13
|
+
"天津": { lat: 39.0842, lng: 117.2008 },
|
|
14
|
+
"天津市": { lat: 39.0842, lng: 117.2008 },
|
|
15
|
+
"重庆": { lat: 29.5630, lng: 106.5516 },
|
|
16
|
+
"重庆市": { lat: 29.5630, lng: 106.5516 },
|
|
17
|
+
|
|
18
|
+
// 省会城市
|
|
19
|
+
"广州": { lat: 23.1291, lng: 113.2644 },
|
|
20
|
+
"广州市": { lat: 23.1291, lng: 113.2644 },
|
|
21
|
+
"深圳": { lat: 22.5431, lng: 114.0579 },
|
|
22
|
+
"深圳市": { lat: 22.5431, lng: 114.0579 },
|
|
23
|
+
"杭州": { lat: 30.2741, lng: 120.1551 },
|
|
24
|
+
"杭州市": { lat: 30.2741, lng: 120.1551 },
|
|
25
|
+
"南京": { lat: 32.0603, lng: 118.7969 },
|
|
26
|
+
"南京市": { lat: 32.0603, lng: 118.7969 },
|
|
27
|
+
"成都": { lat: 30.6598, lng: 104.0633 },
|
|
28
|
+
"成都市": { lat: 30.6598, lng: 104.0633 },
|
|
29
|
+
"武汉": { lat: 30.5928, lng: 114.3055 },
|
|
30
|
+
"武汉市": { lat: 30.5928, lng: 114.3055 },
|
|
31
|
+
"西安": { lat: 34.3416, lng: 108.9398 },
|
|
32
|
+
"西安市": { lat: 34.3416, lng: 108.9398 },
|
|
33
|
+
"长沙": { lat: 28.2282, lng: 112.9388 },
|
|
34
|
+
"长沙市": { lat: 28.2282, lng: 112.9388 },
|
|
35
|
+
"郑州": { lat: 34.7466, lng: 113.6253 },
|
|
36
|
+
"郑州市": { lat: 34.7466, lng: 113.6253 },
|
|
37
|
+
"济南": { lat: 36.6512, lng: 117.1201 },
|
|
38
|
+
"济南市": { lat: 36.6512, lng: 117.1201 },
|
|
39
|
+
"青岛": { lat: 36.0671, lng: 120.3826 },
|
|
40
|
+
"青岛市": { lat: 36.0671, lng: 120.3826 },
|
|
41
|
+
"沈阳": { lat: 41.8057, lng: 123.4315 },
|
|
42
|
+
"沈阳市": { lat: 41.8057, lng: 123.4315 },
|
|
43
|
+
"大连": { lat: 38.9140, lng: 121.6147 },
|
|
44
|
+
"大连市": { lat: 38.9140, lng: 121.6147 },
|
|
45
|
+
"哈尔滨": { lat: 45.8038, lng: 126.5349 },
|
|
46
|
+
"哈尔滨市": { lat: 45.8038, lng: 126.5349 },
|
|
47
|
+
"长春": { lat: 43.8171, lng: 125.3235 },
|
|
48
|
+
"长春市": { lat: 43.8171, lng: 125.3235 },
|
|
49
|
+
"石家庄": { lat: 38.0428, lng: 114.5149 },
|
|
50
|
+
"石家庄市": { lat: 38.0428, lng: 114.5149 },
|
|
51
|
+
"太原": { lat: 37.8706, lng: 112.5489 },
|
|
52
|
+
"太原市": { lat: 37.8706, lng: 112.5489 },
|
|
53
|
+
"合肥": { lat: 31.8206, lng: 117.2272 },
|
|
54
|
+
"合肥市": { lat: 31.8206, lng: 117.2272 },
|
|
55
|
+
"福州": { lat: 26.0745, lng: 119.2965 },
|
|
56
|
+
"福州市": { lat: 26.0745, lng: 119.2965 },
|
|
57
|
+
"厦门": { lat: 24.4798, lng: 118.0819 },
|
|
58
|
+
"厦门市": { lat: 24.4798, lng: 118.0819 },
|
|
59
|
+
"南昌": { lat: 28.6820, lng: 115.8581 },
|
|
60
|
+
"南昌市": { lat: 28.6820, lng: 115.8581 },
|
|
61
|
+
"昆明": { lat: 25.0389, lng: 102.7183 },
|
|
62
|
+
"昆明市": { lat: 25.0389, lng: 102.7183 },
|
|
63
|
+
"贵阳": { lat: 26.6470, lng: 106.6302 },
|
|
64
|
+
"贵阳市": { lat: 26.6470, lng: 106.6302 },
|
|
65
|
+
"南宁": { lat: 22.8170, lng: 108.3669 },
|
|
66
|
+
"南宁市": { lat: 22.8170, lng: 108.3669 },
|
|
67
|
+
"海口": { lat: 20.0444, lng: 110.1989 },
|
|
68
|
+
"海口市": { lat: 20.0444, lng: 110.1989 },
|
|
69
|
+
"兰州": { lat: 36.0611, lng: 103.8343 },
|
|
70
|
+
"兰州市": { lat: 36.0611, lng: 103.8343 },
|
|
71
|
+
"西宁": { lat: 36.6171, lng: 101.7782 },
|
|
72
|
+
"西宁市": { lat: 36.6171, lng: 101.7782 },
|
|
73
|
+
"银川": { lat: 38.5026, lng: 106.2309 },
|
|
74
|
+
"银川市": { lat: 38.5026, lng: 106.2309 },
|
|
75
|
+
"乌鲁木齐": { lat: 43.8256, lng: 87.6168 },
|
|
76
|
+
"乌鲁木齐市": { lat: 43.8256, lng: 87.6168 },
|
|
77
|
+
"拉萨": { lat: 29.6625, lng: 91.1146 },
|
|
78
|
+
"拉萨市": { lat: 29.6625, lng: 91.1146 },
|
|
79
|
+
"呼和浩特": { lat: 40.8414, lng: 111.7519 },
|
|
80
|
+
"呼和浩特市": { lat: 40.8414, lng: 111.7519 },
|
|
81
|
+
|
|
82
|
+
// 其他主要城市
|
|
83
|
+
"苏州": { lat: 31.2989, lng: 120.5853 },
|
|
84
|
+
"苏州市": { lat: 31.2989, lng: 120.5853 },
|
|
85
|
+
"无锡": { lat: 31.4912, lng: 120.3124 },
|
|
86
|
+
"无锡市": { lat: 31.4912, lng: 120.3124 },
|
|
87
|
+
"宁波": { lat: 29.8683, lng: 121.5440 },
|
|
88
|
+
"宁波市": { lat: 29.8683, lng: 121.5440 },
|
|
89
|
+
"温州": { lat: 27.9943, lng: 120.6994 },
|
|
90
|
+
"温州市": { lat: 27.9943, lng: 120.6994 },
|
|
91
|
+
"东莞": { lat: 23.0209, lng: 113.7518 },
|
|
92
|
+
"东莞市": { lat: 23.0209, lng: 113.7518 },
|
|
93
|
+
"佛山": { lat: 23.0218, lng: 113.1219 },
|
|
94
|
+
"佛山市": { lat: 23.0218, lng: 113.1219 },
|
|
95
|
+
"珠海": { lat: 22.2769, lng: 113.5678 },
|
|
96
|
+
"珠海市": { lat: 22.2769, lng: 113.5678 },
|
|
97
|
+
"常州": { lat: 31.7725, lng: 119.9462 },
|
|
98
|
+
"常州市": { lat: 31.7725, lng: 119.9462 },
|
|
99
|
+
"烟台": { lat: 37.4638, lng: 121.4475 },
|
|
100
|
+
"烟台市": { lat: 37.4638, lng: 121.4475 },
|
|
101
|
+
"潍坊": { lat: 36.7070, lng: 119.1615 },
|
|
102
|
+
"潍坊市": { lat: 36.7070, lng: 119.1615 },
|
|
103
|
+
"绍兴": { lat: 30.0023, lng: 120.5822 },
|
|
104
|
+
"绍兴市": { lat: 30.0023, lng: 120.5822 },
|
|
105
|
+
"嘉兴": { lat: 30.7467, lng: 120.7507 },
|
|
106
|
+
"嘉兴市": { lat: 30.7467, lng: 120.7507 },
|
|
107
|
+
"金华": { lat: 29.1028, lng: 119.6472 },
|
|
108
|
+
"金华市": { lat: 29.1028, lng: 119.6472 },
|
|
109
|
+
"台州": { lat: 28.6568, lng: 121.4200 },
|
|
110
|
+
"台州市": { lat: 28.6568, lng: 121.4200 },
|
|
111
|
+
"徐州": { lat: 34.2619, lng: 117.2848 },
|
|
112
|
+
"徐州市": { lat: 34.2619, lng: 117.2848 },
|
|
113
|
+
"南通": { lat: 32.0085, lng: 120.8647 },
|
|
114
|
+
"南通市": { lat: 32.0085, lng: 120.8647 },
|
|
115
|
+
"扬州": { lat: 32.3932, lng: 119.4217 },
|
|
116
|
+
"扬州市": { lat: 32.3932, lng: 119.4217 },
|
|
117
|
+
"洛阳": { lat: 34.6197, lng: 112.4540 },
|
|
118
|
+
"洛阳市": { lat: 34.6197, lng: 112.4540 },
|
|
119
|
+
"开封": { lat: 34.7971, lng: 114.3075 },
|
|
120
|
+
"开封市": { lat: 34.7971, lng: 114.3075 },
|
|
121
|
+
"惠州": { lat: 23.1115, lng: 114.4152 },
|
|
122
|
+
"惠州市": { lat: 23.1115, lng: 114.4152 },
|
|
123
|
+
"中山": { lat: 22.5177, lng: 113.3927 },
|
|
124
|
+
"中山市": { lat: 22.5177, lng: 113.3927 },
|
|
125
|
+
"汕头": { lat: 23.3547, lng: 116.6810 },
|
|
126
|
+
"汕头市": { lat: 23.3547, lng: 116.6810 },
|
|
127
|
+
"湛江": { lat: 21.2707, lng: 110.3594 },
|
|
128
|
+
"湛江市": { lat: 21.2707, lng: 110.3594 },
|
|
129
|
+
|
|
130
|
+
// 港澳台
|
|
131
|
+
"香港": { lat: 22.3193, lng: 114.1694 },
|
|
132
|
+
"澳门": { lat: 22.1987, lng: 113.5439 },
|
|
133
|
+
"台北": { lat: 25.0330, lng: 121.5654 },
|
|
134
|
+
"台北市": { lat: 25.0330, lng: 121.5654 },
|
|
135
|
+
"台中": { lat: 24.1477, lng: 120.6736 },
|
|
136
|
+
"台中市": { lat: 24.1477, lng: 120.6736 },
|
|
137
|
+
"高雄": { lat: 22.6273, lng: 120.3014 },
|
|
138
|
+
"高雄市": { lat: 22.6273, lng: 120.3014 },
|
|
139
|
+
|
|
140
|
+
// 海外主要城市
|
|
141
|
+
"新加坡": { lat: 1.3521, lng: 103.8198 },
|
|
142
|
+
"吉隆坡": { lat: 3.1390, lng: 101.6869 },
|
|
143
|
+
"曼谷": { lat: 13.7563, lng: 100.5018 },
|
|
144
|
+
"东京": { lat: 35.6762, lng: 139.6503 },
|
|
145
|
+
"首尔": { lat: 37.5665, lng: 126.9780 },
|
|
146
|
+
"纽约": { lat: 40.7128, lng: -74.0060 },
|
|
147
|
+
"洛杉矶": { lat: 34.0522, lng: -118.2437 },
|
|
148
|
+
"旧金山": { lat: 37.7749, lng: -122.4194 },
|
|
149
|
+
"悉尼": { lat: -33.8688, lng: 151.2093 },
|
|
150
|
+
"墨尔本": { lat: -37.8136, lng: 144.9631 },
|
|
151
|
+
"伦敦": { lat: 51.5074, lng: -0.1278 },
|
|
152
|
+
"巴黎": { lat: 48.8566, lng: 2.3522 },
|
|
153
|
+
"温哥华": { lat: 49.2827, lng: -123.1207 },
|
|
154
|
+
"多伦多": { lat: 43.6532, lng: -79.3832 }
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// 历史地名别名
|
|
158
|
+
const ALIASES = {
|
|
159
|
+
"燕京": "北京",
|
|
160
|
+
"金陵": "南京",
|
|
161
|
+
"临安": "杭州",
|
|
162
|
+
"长安": "西安",
|
|
163
|
+
"奉天": "沈阳",
|
|
164
|
+
"汴京": "开封",
|
|
165
|
+
"汴梁": "开封",
|
|
166
|
+
"羊城": "广州",
|
|
167
|
+
"花城": "广州",
|
|
168
|
+
"鹏城": "深圳",
|
|
169
|
+
"泉城": "济南",
|
|
170
|
+
"山城": "重庆",
|
|
171
|
+
"春城": "昆明",
|
|
172
|
+
"冰城": "哈尔滨",
|
|
173
|
+
"江城": "武汉",
|
|
174
|
+
"星城": "长沙",
|
|
175
|
+
"狮城": "新加坡",
|
|
176
|
+
"三藩市": "旧金山"
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// 默认坐标(北京)
|
|
180
|
+
const DEFAULT_COORDS = { lat: 39.9042, lng: 116.4074 };
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* 查询城市坐标
|
|
184
|
+
* @param {string} city - 城市名称
|
|
185
|
+
* @returns {Object} { success, data: { latitude, longitude }, error }
|
|
186
|
+
*/
|
|
187
|
+
export function lookupCity(city) {
|
|
188
|
+
if (!city || typeof city !== 'string') {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
error: '城市参数无效',
|
|
192
|
+
data: null
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// 标准化输入
|
|
197
|
+
const normalized = city.trim().replace(/市$/, '').replace(/省$/, '');
|
|
198
|
+
|
|
199
|
+
// 检查别名
|
|
200
|
+
const aliasKey = ALIASES[normalized];
|
|
201
|
+
if (aliasKey) {
|
|
202
|
+
const coords = CITY_DATA[aliasKey] || CITY_DATA[aliasKey + '市'];
|
|
203
|
+
if (coords) {
|
|
204
|
+
return {
|
|
205
|
+
success: true,
|
|
206
|
+
data: {
|
|
207
|
+
latitude: coords.lat,
|
|
208
|
+
longitude: coords.lng,
|
|
209
|
+
city: aliasKey
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// 直接查找
|
|
216
|
+
let coords = CITY_DATA[normalized] || CITY_DATA[normalized + '市'] || CITY_DATA[city];
|
|
217
|
+
|
|
218
|
+
if (coords) {
|
|
219
|
+
return {
|
|
220
|
+
success: true,
|
|
221
|
+
data: {
|
|
222
|
+
latitude: coords.lat,
|
|
223
|
+
longitude: coords.lng,
|
|
224
|
+
city: normalized
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// 模糊匹配:检查是否包含某个城市名
|
|
230
|
+
for (const [name, coord] of Object.entries(CITY_DATA)) {
|
|
231
|
+
if (city.includes(name.replace(/市$/, '')) || name.includes(normalized)) {
|
|
232
|
+
return {
|
|
233
|
+
success: true,
|
|
234
|
+
data: {
|
|
235
|
+
latitude: coord.lat,
|
|
236
|
+
longitude: coord.lng,
|
|
237
|
+
city: name
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// 未找到,返回默认坐标(北京)
|
|
244
|
+
return {
|
|
245
|
+
success: true,
|
|
246
|
+
data: {
|
|
247
|
+
latitude: DEFAULT_COORDS.lat,
|
|
248
|
+
longitude: DEFAULT_COORDS.lng,
|
|
249
|
+
city: '北京(默认)'
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|