惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

明明如月成长笔记

个人数据的开源备份:从明清档案之殇想到的 简体字的双重优势:打字效率与扫盲成效全解析 四小时深圳书城奇遇:那些藏在书架间的偶然与必然 正式把我的笔记系统迁移到 Obsidian,为了和 AI 配合 如何降级 cursor-agent /cursor-cli 如何降级 cursor-agent /cursor-cli Gemini CLI 登录踩坑记录:GOOGLE_CLOUD_PROJECT_ID 的坑与解法 打印的不只是文件,还有生活的小幸福 打印的不只是文件,还有生活的小幸福 在 MacOS 上,成功恢复存储卡上被误删的照片 AI CLI 工具:Claude Code, Codex, Gemini CLI, Qwen code, CodeBuddy cli, cursor-agent 我的常用命令 双胞胎女儿一年借书122本,这份9月私藏书单请收好! | 2025-09 童书清单 双胞胎女儿一年借书122本,这份9月私藏书单请收好! | 2025-09 童书清单 港漂日记62:父亲节独自带娃,室内游戏、香港公园探展、观鸟、品味米其林餐厅 南航随心飞机票爬虫解密 acw_sc__v2 港漂日记61:香港私立诊所首诊:商业医保如何改变我的就医体验? 香港历史博物馆:看秦始皇兵马俑,还能和孔子比身高? 港漂日记59:母亲节礼物!AI 涂色小技巧,让孩子的爱跃然纸上 港漂日记60:西营盘网红旧书店 Book & Go 淘书记 港漂日记58:萌娃中环学体操,课后老师狂点赞 五一游记D4:深圳笔架山儿童乐园,邂逅无人机送外卖 我的400篇博客都写了些什么 珊瑚海兔四岁啦 港漂日记D159:亲子同乐日:一场精彩的幼儿园嘉年华 蛇年春节自驾D10:东莞-深圳-香港 DeepSeek教我如何收拾行李箱 福田取逗留签 回港新方式 蛇年春节自驾D9:江门-顺德-东莞 中国侨都华侨华人博物馆 东莞迎宾馆 蛇年春节自驾D8:茂名-开平-江门 挥春作业 粤西堵车 开平碉楼 迎财神 茂名博物馆参观记 蛇年春节自驾D7:茂名 中国第一摊 茂名博物馆 亚朵酒店 蛇年春节自驾D6:南宁-茂名 发财树 青秀山 路途亲子游戏 蛇年春节自驾D5:南宁过大年 醒狮贺岁 三街两巷 特色美食 骑行穿城 琅西夜市 打铁花 新春好!我用DeepSeek写祝福,顺便送你三款红包封面 蛇年春节自驾D4:钦州-南宁 钦州老街,万丽年夜饭 蛇年春节自驾D3:海陵岛-钦州 绝美悬崖餐厅,海景房租赁行情 明明如月成长笔记2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D2:深圳-阳江-海陵岛 明明和虹虹2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D1:深圳亲子游 港漂日记D118:备战HK100,徒步港岛'恐龙径' 港漂日记D115:春节大筹备:AI 助力,书法添彩 港漂日记D114:推荐两款适合新港漂使用的app 2025新年计划之:全面拥抱AI 港漂日记D111:备战HK50 港岛径拉练 港漂日记D110:一个普通的周六见闻,聚餐、借书、儿童乐园,体育选拔机制,公共自习室,挫折教育 我的2024:辗转四城,忙碌充实 港漂日记D104:港大幸福家庭博览会,亲子工坊与未来趋势 港漂日记D101:赤柱圣诞狂欢,古迹海景遛娃 港漂日记D100:港漂百日,圣诞快乐🎄 港漂日记D97:欢乐星期天:港大访古探幽,尖沙咀购物赏景 港漂日记D96:太平山卢吉道:一次穿越山林、俯瞰繁华的震撼之行 皇马巴萨元老赛:传奇重逢,闪耀球场 港漂日记D93:宝宝居港三月余,英语表达大进步 港漂日记D90:绘本阅读,潜水展,华嫂冰室 2024香港潜水展参观记 2024香港潜水展参观记 港漂日记D89:宝妈带娃闯大馆,老友相聚话鸡娃 港漂日记D84:消防队亲子嘉年华:风车 DIY、叠杯子,奖品拿到手软! 港漂日记D83:港澳通行证:深圳换证碰壁,香港解锁秘籍 港漂日记D82:笑不活了!在 “知悭识水”嘉年华,我被自家娃的“鬼画符”征服 别再傻傻手工记账!AI 加持 beancount,效率狂飙 N 倍,真香警告 港漂日记D76:勇闯艺趣嘉年华,数数宝宝戴了几顶帽子 港漂日记D75:抵港首次学校秋游 奔赴元朗开心农场 港漂日记D73:深圳盐田周末放松游 | 高铁'灵活行'思考 | 灯塔图书馆 | 壹海城 | 盐田印象 | 港深对比 港漂日记D72:深度揭秘:我是怎么借助AI创作宝宝校庆视频的 港漂日记D71:盐田中英街漫记:海岸盛景,历史长歌 港漂日记D70:海南巨舰下香港,全民共赴海军约 港漂日记D69:完了!在香港,幼儿园小班作业居然做到晚上九点多。。。 港漂日记D68:亲子共赴嘉年华,反诈工坊入童心 港漂日记D61:哇塞!西九龙超燃嘉年华,亲子嗨玩,禁毒护航! 港漂日记D55:台风过境,顶楼泳池看海景,铜锣湾逛吃不停歇 港漂日记D50:探秘香港看病:为宝宝抢号二十次,诊疗却遭宝妈质疑 “没意义”? 港漂日记D45:复诊体验,天哪!在香港做B超居然排到了2027年。。。 港漂日记D42:香港迪士尼 x 万圣节:游客 Cosplay 百态,共赴奇趣冒险 港漂日记D32:在香港读杂志《明报周刊》《国家地理》 港漂日记D31:在校尿裤子怎么办?爷爷寄来滑板车 爸爸讲英文绘本 港漂日记D30:楼顶滑步车 画画闹情绪 拼多多发掘低价秘诀 港漂日记D29:生活的琐碎与温暖 港漂日记D28:深圳一日游 跨境巴士体验 万象天地 陶陶居 gaga 港漂日记D27:香港公园 读绘本 淘拼集运自提体验pk 睡前故事的四个阶段 港漂日记D26:幼儿园小班竟有五项作业 给工人姐姐一部手机 港漂日记D25:社区托班体验 菜鸟驿站取件 港漂日记D22:社区托班报名 中山纪念公园体育课 乔治五世纪念公园观察 港漂日记D21:东涌东荟城 大屿山双峰越野赛 辅导作业 港漂日记D20:和平号环球游轮分享会 数码港 儿童加油站 港漂日记D19:香港故宫文化博物馆 神秘酒吧 港漂日记D15:参观幼儿园,登太平山看夜景,杜莎夫人蜡像馆 港漂日记D14:长洲岛的缤纷一日:奇趣与温情交织 港漂日记D13:香港中央图书馆观察 麦当劳价格 佐治五世纪念公园 社区配套 港漂日记D12: 免费早报 宝宝报课情况 AppleTV 港漂日记D11: 回国代理,智能家居,晨间习惯 港漂日记D10: 折腾智能家具设备,HomeKit,HomeAssistant,AppleTV,米家 港漂日记D8:西区社区中心探访 困难班 辅导班 童军 港漂日记D7:北上消费,中式独居生活vs美式家庭生活,车和家,重典治乱 港漂日记D6:宝宝天星小轮,宝爸研究医保 港漂日记D5:回顾宝宝一周学习表现 港漂日记D4:宝宝生活习惯与社交的思考 港漂日记D3:香港中秋怎么放假,看亚冠,老房子水质问题 港漂日记D2:中秋铜锣湾赏灯,学校手工作品 港漂日记D1:宝宝上学,校车接送,街市买菜,安装马桶,物业规矩,垃圾处理,读报感悟 港漂日记D0:南京飞香港,禄口V7,国泰航空,光大银行送机,上海银行境外接机
地理信息API推荐: Nominatim/MapQuest/GoogleMap
lmm333 · 2023-03-14 · via 明明如月成长笔记

Part1: Nominatim(OpenStreenMap/OSM)

晚上调研了一下地理信息的API,发现了一个很好用的API: Nominatim

  • 可以根据地址查询详细信息(包含经纬度,各种人类语言的名称,邮编等等)
  • 还可以根据经纬度查询同样的详情信息

数据源

数据来源是 OpenStreetMap ,一个开放的地图数据项目

Nominatim 是OpenStreetMap的搜索引擎

该API由Nominatim提供,官方 API 文档

使用举例

根据地址查询

  • 文档
    • https://nominatim.org/release-docs/develop/api/Search/
  • 以查询查询 英国大本钟 “big ben” 为例
  • 网页体验:

    https://nominatim.openstreetmap.org/ui/search.html?q=big+ben

geo_ui

  • API地址

    https://nominatim.openstreetmap.org/search?q=big+ben&format=json&polygon_geojson=1&addressdetails=1

  • API返回:
    [
    {
      "place_id": 16357159,
      "licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
      "osm_type": "node",
      "osm_id": 1802652184,
      "boundingbox": [
        "51.5006542",
        "51.5007542",
        "-0.1246221",
        "-0.1245221"
      ],
      "lat": "51.5007042",
      "lon": "-0.1245721",
      "display_name": "大本钟, Bridge Street, Westminster, Millbank, City of Westminster, Greater London, 英格兰 / 英格蘭, SW1A 2JX, 英国 / 英國",
      "class": "tourism",
      "type": "attraction",
      "importance": 0.5169301795209977,
      "icon": "https://nominatim.openstreetmap.org/ui/mapicons/poi_point_of_interest.p.20.png",
      "address": {
        "tourism": "大本钟",
        "road": "Bridge Street",
        "quarter": "Westminster",
        "suburb": "Millbank",
        "city": "City of Westminster",
        "ISO3166-2-lvl8": "GB-WSM",
        "state_district": "Greater London",
        "state": "英格兰 / 英格蘭",
        "ISO3166-2-lvl4": "GB-ENG",
        "postcode": "SW1A 2JX",
        "country": "英国 / 英國",
        "country_code": "gb"
      },
      "geojson": {
        "type": "Point",
        "coordinates": [
          -0.1245721,
          51.5007042
        ]
      }
    },
    {
      "place_id": 133736079,
      ... 还有有很多叫 big ben 的地方,返回值是列表,此处省略若干包含不同名为big ben的地点
    }
    ]
    

备注:

  • 优点:无需注册,免费,也不存在注册和付费的渠道,QPS有一定限制,官方要求是 1 query/second,亲测频率高了会报错
  • 缺点:需要科学上网

Part2: MapQuest

介绍

  • 感觉用的是OSM的数据和 Here(曾经被诺基亚高价收购的地图服务)的地图(不是很确定)
  • 地图官网 https://www.mapquest.com/
  • API网址 https://developer.mapquest.com/ (需要注册)
  • API文档: https://developer.mapquest.com/documentation/
  • 每个月 15000 次免费 API 查询,基本够用了,我用超了一次,感觉付费有点贵,就注册了小号(生成新的API KEY)临时顶一下

使用举例

  • API文档: https://developer.mapquest.com/documentation/geocoding-api/address/get
  • 参考请求: > GET https://www.mapquestapi.com/geocoding/v1/address?key=KEY&location=Washington,DC
  • 感觉API的结果质量和结构比 Nominatim(OpenStreenMap/OSM) 稍微好一点,比如地理位置的层级会用 adminArea1-6标注类型和名称,而Nomination则只有 “city”, “city_district”, “municipality”, “village”, “county” 这类key,不同国家搞不清楚会用哪个key,大小关系是什么
  • 参考返回
    {
    "info": {
      "statuscode": 0,
      "copyright": {
        "text": "© 2023 MapQuest, Inc.",
        "imageUrl": "https://api.mqcdn.com/res/mqlogo.gif",
        "imageAltText": "© 2023 MapQuest, Inc."
      },
      "messages": []
    },
    "options": {
      "maxResults": -1,
      "thumbMaps": true,
      "ignoreLatLngInput": false
    },
    "results": [
      {
        "providedLocation": {
          "location": "Washington,DC"
        },
        "locations": [
          {
            "street": "",
            "adminArea6": "",
            "adminArea6Type": "Neighborhood",
            "adminArea5": "Washington",
            "adminArea5Type": "City",
            "adminArea4": "District of Columbia",
            "adminArea4Type": "County",
            "adminArea3": "DC",
            "adminArea3Type": "State",
            "adminArea1": "US",
            "adminArea1Type": "Country",
            "postalCode": "",
            "geocodeQualityCode": "A5XAX",
            "geocodeQuality": "CITY",
            "dragPoint": false,
            "sideOfStreet": "N",
            "linkId": "282772166",
            "unknownInput": "",
            "type": "s",
            "latLng": {
              "lat": 38.892062,
              "lng": -77.019912
            },
            "displayLatLng": {
              "lat": 38.892062,
              "lng": -77.019912
            },
            "mapUrl": "https://www.mapquestapi.com/staticmap/v4/getmap?key=KEY&type=map&size=225,160&pois=purple-1,38.892062,-77.019912,0,0,|&center=38.892062,-77.019912&zoom=12&rand=306744981"
          }
        ]
      }
    ]
    }
    

Part3: Google Map API

简介

  • 大名鼎鼎的谷歌地图API,无需多言,应该是世界上最好的地图
  • 优点:
    • 功能完善,数据强大,多语言支持丰富,文档丰富
    • 还有多种语言的SDK,开发效率高
  • 缺点:
    • 要钱,以下面查询地理位置的信息的API为例,$5/1000次查询,换成人民币,大约3分钱一次查询
    • 要先注册谷歌云(有些技巧,要),一定要绑定信用卡(亲测国内的AE/VISA可以使用),新用户有 3个月$100的免费额度

参考链接

  • 查询地理位置的API https://developers.google.com/maps/documentation/geocoding?hl=zh_CN
  • 多语言支持 https://developers.google.com/maps/faq?hl=zh-cn#languagesupport
  • 地域编码 https://developers.google.com/maps/documentation/geocoding/requests-geocoding?hl=zh-cn#RegionCodes

参考代码 JAVA SDK, 查询地理信息

import com.google.maps.GeoApiContext;
import com.google.maps.GeocodingApi;
import com.google.maps.errors.ApiException;
import com.google.maps.model.AddressComponent;
import com.google.maps.model.GeocodingResult;
import com.google.maps.model.Geometry;

public static List<GeocodingResult> search(String query, String language, String countryCode) {
    // Create a client object with the API key
    GeoApiContext context = new GeoApiContext
            .Builder()
            .apiKey(apiKey)
            .build();

    GeocodingResult[] results;
    try {
        // Send a request to the Places API to retrieve the place details
        results = GeocodingApi
                .geocode(context, query)
                .language(language)
                .region(countryCode)
                .await();
    } catch (ApiException | InterruptedException | IOException e) {
        e.printStackTrace();
        return null;
    }

    return Arrays.asList(results);
}

public static void main(String[] args) {
    search("Gazion", "el", "GR"); // 查询 地名 "Gazion",在 🇬🇷希腊国范围内查询,并使用"希腊语"返回
}