【GIS】本地部署nominatim地理编码服务

参考:https://www.cnblogs.com/nonkicat/p/17222677.html

docker 部署命令

4.5 版本 docker 用不了,需要用 4.0 版本

docker run -it   -e PBF_PATH=/data/你的osm文件.osm.pbf   -e FREEZE=true   -e POSTGRES_MAX_CONNECTIONS=100   -p 6666:8080   --name nominatim   -v /宿主机指向pdf目录:/data   -v /osm-maps/data:/nominatim/data   mediagis/nominatim:4.0

耐心等待建立索引

看到以下输出即成功

2025-02-10 11:17:38.015 UTC [764] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2025-02-10 11:17:38.015 UTC [764] LOG:  listening on IPv6 address "::", port 5432
2025-02-10 11:17:38.027 UTC [764] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-02-10 11:17:38.105 UTC [765] LOG:  database system was shut down at 2025-02-10 11:17:37 UTC
2025-02-10 11:17:38.118 UTC [764] LOG:  database system is ready to accept connections

查询

$ keyword="人民大学"
$ curl "http://localhost:6666/search.php?q=${keyword}&polygon_geojson=1&format=jsonv2"

输出

[{"place_id": 116078,"licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type": "node","osm_id": 7861046852,"boundingbox": ["39.960744","39.970744","116.3107286","116.3207286"],"lat": "39.965744","lon": "116.3157286","display_name": "人民大学, 北三环(四通桥), 中关村街道, 海淀区, 北京市, 100872, 中国","place_rank": 30,"category": "railway","type": "station","importance": 0.11100000000000002,"geojson": {"type": "Point","coordinates": [116.3157286,39.965744]}},...................
]

配套 python 代码查询

import requestsdef get_coordinates(keyword):"""根据关键词查询地点的经纬度。参数:keyword (str): 查询的关键词(如地点名称)。返回:list: 包含地点名称和对应经纬度的字典列表。每个字典包含 "place_name", "latitude", "longitude"。"""url = "http://localhost:6666/search.php"params = {"q": keyword,"polygon_geojson": 1,"format": "jsonv2"}try:# 发送 GET 请求response = requests.get(url, params=params)# 检查响应状态码是否为 200(成功)if response.status_code == 200:data = response.json()results = []# 遍历结果并提取经纬度for item in data:place_name = item.get("display_name", "未知地点")# 尝试从 geojson 提取经纬度try:coordinates = item["geojson"]["coordinates"]if item["geojson"]["type"] == "Point":latitude = coordinates[1]longitude = coordinates[0]elif item["geojson"]["type"] == "Polygon":# 如果是 Polygon,取第一个点作为代表latitude = coordinates[0][0][1]longitude = coordinates[0][0][0]else:# 如果类型未知,跳过该条目print(f"未知的 GeoJSON 类型: {item['geojson']['type']},跳过地点: {place_name}")continueexcept (KeyError, IndexError, TypeError):# 如果 geojson 不可用,尝试使用 lat 和 lon 字段try:latitude = float(item["lat"])longitude = float(item["lon"])except KeyError:print(f"无法提取经纬度信息,跳过地点: {place_name}")continue# 添加到结果列表results.append({"place_name": place_name,"latitude": latitude,"longitude": longitude})return resultselse:print(f"请求失败,状态码: {response.status_code}")return []except requests.exceptions.RequestException as e:print(f"网络请求出错: {e}")return []except ValueError as e:print(f"JSON 解析出错: {e}")return []# 测试样例
keywords = ["北京大学",          # 大学"天安门广场",       # 广场"故宫博物院",       # 博物馆"北京站",           # 火车站"颐和园",           # 公园"中关村创业大街",   # 街道"清华大学",         # 大学"国家体育场",       # 体育场馆(鸟巢)"首都国际机场",     # 机场"人民大会堂"        
]for keyword in keywords:print(f"查询关键词: {keyword}")coordinates = get_coordinates(keyword)if coordinates:for result in coordinates:print(f"地点名称: {result['place_name']}")print(f"纬度: {result['latitude']}, 经度: {result['longitude']}")print("-" * 40)else:print("未找到任何地点信息。")print("\n" + "=" * 80 + "\n")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek 助力 Vue 开发:打造丝滑的步骤条

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

【用Deepseek搭建免费的个人知识库--综合教程(完整版)】第二篇:Ollama服务器

用Deepseek搭建免费的个人知识库–综合教程(完整版):第二篇:Ollama服务器部署 OLLAMA服务器的配置在很多网上都已经介绍的非常清楚了,我们的重点不在于那些简单的步骤,而是在需要为下一步做准备的地方更加…

ubuntu安装VMware报错/dev/vmmon加载失败

ubuntu安装VMware报错/dev/vmmon加载失败,解决步骤如下: step1:为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…

DeepSeek和ChatGPT的优劣或者区别(答案来DeepSeek和ChatGPT)

DeepSeek的答案 DeepSeek与ChatGPT作为当前两大主流AI模型,在架构设计、性能表现、应用场景等方面存在显著差异,以下从多个维度进行对比分析: 一、架构与训练效率 架构设计 DeepSeek:采用混合专家(MoE)框架…

5 个释放 安卓潜力的 Shizuku 应用

Shizuku 软件推荐:释放安卓潜力的五款应用 Shizuku (日语:雫,意为“水滴”) 正如其名,是一款轻巧但功能强大的安卓工具。它无需 Root 权限,通过 ADB (Android Debug Bridge) 授权,即可让应用调用系统 API&…

微信授权登录接口分析

https://api.weixin.qq.com/sns/jscode2session?grant_typeauthorization_code&appid{appid}&secret{secret}&js_code{code} 你提供的链接是微信小程序进行用户登录的接口,它用于通过 js_code 换取用户的 openid 和 session_key,以实现用户…

【java API】leetcode常用刷题API及ACM模式

文章目录 ACM输入 Scanner**一、字符串高频API****二、集合高频API****三、栈(Stack)高频API****1. 推荐用Deque替代Stack类**(更高效且线程不安全,适合算法场景)**2. 核心操作****3. 经典应用场景****4. 避坑指南** *…

云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL

安全组一充当虚拟防火墙对于关联实例,在实例级别控制入站和出站流量。 网络访问控制列表(NACL)一充当防火墙关联子网,在子网级别控制入站和出站流量。 在专有网络中,安全组和网络ACL(NACL)一起帮助构建分层网络防御。 安全组在实例级别操作…

网络防御高级

接口配置: SW2: [sw2]vlan 10 [sw2]vlan 20 [sw2]interface GigabitEthernet 0/0/1 [sw2-GigabitEthernet0/0/1]port link-type trunk [SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 [sw2]interface GigabitEthernet 0/0/2 [sw2-GigabitEthernet0/0/…

在服务器部署JVM后,如何评估JVM的工作能力,比如吞吐量

在服务器部署JVM后,评估其工作能力(如吞吐量)可以通过以下步骤进行: 1. 选择合适的基准测试工具 JMH (Java Microbenchmark Harness):适合微基准测试,测量特定代码片段的性能。Apache JMeter:…

Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行

Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…

html为<td>添加标注文本

样式说明: /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料:

鸿蒙音视频播放器:libwlmedia

libwlmedia 跨平台播放器wlmedia现在已经支持了鸿蒙(Harmony)平台了,SDK插件地址:libwlmedia 一、接入SDK 1.1 导入SDK ohpm i ywl5320/libwlmedia1.2 添加权限(可选) 如果需要播放网络视频,需要添加网络权限 #m…

使用Kickstart配置文件封装操作系统实现Linux的自动化安装

使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意,配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …

Generate html

"Generate HTML"(生成 HTML)指的是通过程序或工具自动创建 HTML 代码的过程。HTML(超文本标记语言)是用于创建网页内容和结构的标准语言。生成 HTML 通常意味着通过某些方式自动化地构建或生成网页的结构和元素&#xf…

ASP.NET Core SignalR案例:导入英汉词典

Ecdict 下载词典文件stardict.7z,解压,stardict.csv是一个CSV格式的文本文件,文件的第一行是表头,除第一行外,其他每行文本是一个单词的相关信息,用逗号分隔的就是各个列的值。英汉词典ECDICT中导入单词到…

计算机自学资源分享

分享本硕期间学习过、收藏过的一些计算机相关的课程、书籍、资源。大部分都是开源资源和免费资源,部分优质资源可能收费。 文章目录 综合资源PythonMachine LearningC/CJava前端SQL数据结构与算法计算机基础AIGC类求职电子资源GitHub 优质项目 综合资源 【指南】ka…

[7] 游戏机项目说明

[7] 游戏机项目说明 在这节课中,我们将学习如何基于FreeRTOS开发一个简单的游戏项目。我们会使用一个开源项目nwatch,它是一个基于STM32的开源手表,包含了三个游戏。我们的目标是将这个游戏移植到我们的开发板上,并逐步使用FreeR…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客,通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

shell脚本控制——处理信号

Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…