初探地理编码(2023.11.12)

地理编码相识 2023.11.12

  • 引言
  • 1、地理编码简介
  • 2、地理编码API和服务(解决方案供应商 / 厂商)
    • 2.1 高德
    • 2.2 百度
    • 2.3 超图
    • 2.4 天地图
    • 2.5 ArcGIS
    • 2.6 MapBox
    • 2.7 Cesium
    • 2.8 MapLocation
  • 3、python实例
    • 3.1 pip安装依赖库(python 3.6)
    • 3.2 request请求调用API + flask二次封装服务接口 + (高德 + 百度 + Cesium + MapBox)
    • 3.3 pyInstaller打包为exe
  • 4、小结

引言

        谈及地理编码一词,每个人可能有不同的理解和体会,从字面意思来看可分为地理编码两个词语,这样理解似乎更加直观深刻。
        一、地理与人们的日常生活密不可分,海量动态的地理信息涉及时空位置、方位定向,姿态角度、距离面积等的计算和分析,因此地理信息与位置角度等数据紧密相关的,并且是极为重要的,在众多信息中占有不可替代的地位,信息由数据经过加工和再生产得来,能够为人类社会的生产和生活实践提供知识指导。二、编码则是对数据或信息经过二次处理后,直接或间接地进行特殊加密,加密后的信息也可称为报文,不难理解的是,有编码就有解码,有加密就有解密,正如世间万物,相克相生,此起彼伏。
        基于上述的理解或先验知识,那么就不难理解平面坐标 (x,y) 是对二维平面上的某点进行描述三维空间坐标 (X,Y,Z) 能够对立体空间中的点位进行表达,地理学的地理坐标系采用(λ,φ)经纬度来表示地球表面的某处位置。通过进行数字化、参数化的编码和描述来达到对现实场景空间位置的精确表达,进而更好地服务于社会经济的发展,如科学技术研究探讨、文化文明交流互鉴、贸易往来道路通畅、人文艺术中西融合等多个方面。

1、地理编码简介

        地理编码也称地址匹配,它是为识别点、线、面的位置和属性而设置的编码,它将全部实体按照预先拟定的分类系统,选择最适宜的量化方法,按实体的属性特征和几何坐标的数据结构记录在计算机的储存设备上。地址编码不仅要实现从地名地址到具体位置经纬度的转换,还需要根据给定的空间位置坐标来反馈与之相关度最高的地名地址。前者被称为正向地理编码,更加侧重得到空间位置坐标从而进行地址定位;后者则为反向地理编码,作为坐标引擎来实现由位置到地名地址的解析转换。

在这里插入图片描述

        地理编码犹如海上航行的指南针,亦犹如黑夜的灯塔,它可以照亮前方的道路,更好地帮助我们定位和显示自己的足迹,追寻人生的理想。人生轨迹由每个时刻的落脚点连接而成,地理编码宛如罗盘,可以让自己认清自己当前的真实处境和航向,在必要的时刻予以纠偏和掌舵,方能拨开迷雾见云天,顺利到达目标的彼岸。

2、地理编码API和服务(解决方案供应商 / 厂商)

        互联网、计算机、信息技术、云计算、大数据、微服务、容器化、人工智能、生成式等技术的飞速发展,催生了众多的软件服务公司、云计算厂商、数据库和信息技术服务解决方案供应商等企业,分布在教育、游戏、办公、交通、医疗、工业制造、音视频转发和定位导航通信等领域,可谓是百花齐放,百家争鸣,任何一家优秀的企业想要在所涉及的行业中占据一席之地,毫无疑问离不开人才和技术,离不开应用和市场,离不开服务的品质和诚信

        正所谓实践是检验真理的唯一标准,广大的用户绝对能够为各种App应用、软件和解决方案来打分评价,货比三家,对比分析优劣所在,进而选择适合自身需求的满意产品和服务方案。

        下面简单介绍一下国内外与地理编码相关的服务厂商及其各自提供的API,有高德地图、百度地图、超图、天地图、ArcGIS、MapBox、Cesium以及MapLocation等,希望能够给大家带来直观真实的感受。

2.1 高德

        高德地理/逆地理编码API通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地址与经纬度之间的相互转化的能力。此API可将结构化地址转换为高德经纬度坐标,尤其支持著名的城市地标建筑物、风景名胜的查询和坐标转换,而且地理编码匹配支持国家、省、市、区县、开发区、乡镇、村庄、热点商圈、兴趣点、门牌号、单元号、道路、道路交叉路口、公交站台、地铁站等多种级别,对于地址的分级分类十分广泛。(注:个人、企业和商用的服务需要授权申请Key,调用量有受限说明)

地理编码说明(高德)
地理编码服务示例(高德)

2.2 百度

        百度地理编码接口可帮助用户将将结构化地址解析为对应的位置坐标,当然解析的结果精度与输入地址的结构完整性有关。官网提供了在线运行示例,同时还特意给出了PHP、Go、C++、Python、JavaBash(Curl)调用请求的程序代码,感兴趣的小伙伴都可以体验一下哦,非常不错,当然用户也需要申请AK方能调用服务!

https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
不同编程语言进行地理编码服务调用代码(百度)
百度——地理编码服务示例

2.3 超图

        超图在线GIS工具提供了地理编码功能,用户通过登录后方可体验;同时超图地理编码API页面十分详细地给出了使用说明和适用场景,同样地需要用户自行申请秘钥(key)方可适用,支持批量地址匹配采用五级地址库搜索策略,具有较高的检索效率和匹配精度。

2.4 天地图

        天地图地理编码API支持将结构化的地址数据转化为对应坐标点的经纬度,范围仅限国内,在申请接口调用和服务请求前需要自己申请key,同时也支持逆地理编码查询地名搜索

2.5 ArcGIS

        ArcGIS Desktop在线帮助中对于地理编码具有其他厂商无法比拟的内容输出,其介绍程度之详细,过程描述之简洁堪称经典,个人觉得大家可认真学习地理编码过程、框架、工作流等的理论和应用工具,以便有更加深刻的理解。

ArcGIS在线帮助文档
ArcGIS 工具箱中的地理编码工具集
ArcGIS桌面帮助之地理编码

2.6 MapBox

        MapBox地图页面中的搜索框支持地理编码中英文搜索,用户可以亲身体验在候选结果中进行选择并查看匹配的地址结果,具体参数说明和使用可参考Mapbox Geocoding API,另外值得一提的是,官网提供了一个在线Playground环境供广大用户测试,有兴趣的朋友不妨试试!

MapBox中的Geocoder控件
Geocoding API Playground

2.7 Cesium

        Cesium在线示例提供了地理编码功能,该功能需要用户使用access_token来进行服务调用,在输入框中会实时调用自动补全功能(autocomplete),输入结束后点击搜索框才会调用单个确定地址的搜索功能(search),查询结果会返回地址所对应的边界范围(bbox),但是主要面对国外用户且对中文支持不太友好,对国外地址感兴趣的可以试一试!

https://api.cesium.com/v1/geocode/search?text=your_interested_name&access_token=your_token
https://api.cesium.com/v1/geocode/autocomplete?text=your_interested_name&access_token=your_token
San Francisco
Peking University

2.8 MapLocation

        MapLocation的作者秉持开源初心,搭建了一个专注于地址批量转换经纬度的在线地址匹配网站,感兴趣的开发者可以在Map Location 批量转换地址为经纬度和批量工具网这两个网站进行即时学习体验,目前支持百度、高德等正逆地理编码和坐标转换处理,效果实用且已在Github开源哦!!!

MapLocation(调用百度API)
MapLocation(调用高德API)

3、python实例

        接下来利用Python脚本编程语言进行地理编码API的实际调用和服务接口封装,具体会调用高德、百度、Cesium以及MapBox地理编码API进行实操。

3.1 pip安装依赖库(python 3.6)

在这里插入图片描述

Python 3.6

        测试环境为python 3.6,利用pip安装requests、flask、flask_cors、pyinstaller四个依赖库。

pip install requests
pip install flask
pip install flask_cors
pip install pyinstaller

3.2 request请求调用API + flask二次封装服务接口 + (高德 + 百度 + Cesium + MapBox)

        话不多说,自己申请各家平台对应的token后,编写如下代码进行地理编码API的调用测试(test_GeocoderAPI.py),这里使用的IDEPyCharm

baidu_apiKey = 'your_baidu_key'
gaode_apiKey = 'your_gaode_key'cesium_access_token = 'your_cesium_key'mapbox_access_token = 'your_mapbox_key'import requests
# from flask import Flask
# from flask_cors import CORS, cross_origin
# from datetime import datetimedef getGaodeGeoCode(location, GaodeApiKey):result = ''response = requests.get('https://restapi.amap.com/v3/geocode/geo?' + 'key=' + GaodeApiKey + '&address=' + location + '&output=json&callback=', data={})if response.status_code == 200:result = response.json()else:result = {"status": 0}return resultheaders = {'Referer': 'https://www.piliang.tech/'
}
headers2 = {'Referer': 'https://maplocation.sjfkai.com/'
}def getBaiduGeoCode(headers, location, baiduApiKey):result = ''response = requests.get('https://api.map.baidu.com/geocoding/v3/?' + 'ak=' + baiduApiKey + '&address=' + location + '&output=json&callback=', headers=headers, data={})if response.status_code == 200:result = response.json()return resultheaders3 = {'Referer': 'https://sandcastle.cesium.com/'
}def getCesiumGeoCode(location, access_token):result = ''response = requests.get('https://api.cesium.com/v1/geocode/search?' + 'access_token=' + access_token + '&text=' + location, headers=headers3, data={})if response.status_code == 200:result = response.json()return result['features']headers4 = {'Referer': 'https://docs.mapbox.com/'
}
def getMapboxGeoCode(location, access_token):result = ''response = requests.get('https://api.mapbox.com/geocoding/v5/mapbox.places/' + location + '.json?access_token=' + access_token, headers=headers4, data={})if response.status_code == 200:result = response.json()return result['features']# app = Flask(__name__)
# @app.route('/geocode/<location>', methods=['GET'])
# @cross_origin()
# def getLocationAddress(location):
#     return getBaiduGeoCode(headers2, location, baidu_apiKey)if __name__ == "__main__":locations = ['北京市海淀区上地十街十号','北京市西城区复兴门内大街101号','北京市东城区王府井西街6号',]print('百度-地理编码API调用查询结果:\n')for i in range(0, len(locations)):print(locations[i], getBaiduGeoCode(headers2, locations[i], baidu_apiKey))print('高德-地理编码API调用查询结果:\n')for i in range(0, len(locations)):print(locations[i], getGaodeGeoCode(locations[i], gaode_apiKey))print('Cesium-地理编码API调用查询结果:\n')for i in range(0, len(locations)):print(locations[i], getCesiumGeoCode(locations[i], cesium_access_token))print('MapBox-地理编码API调用查询结果:\n')for i in range(0, len(locations)):print(locations[i], getMapboxGeoCode(locations[i], mapbox_access_token))# app.run(debug=False, port=8081, host='0.0.0.0')

3.3 pyInstaller打包为exe

        输入如下打包命令后,在dist文件夹下会得到exe文件,双击运行即可在浏览器发起服务请求,测试地理编码功能。

pyinstaller -F test_GeocoderAPI.py

4、小结

        对于GISer来说,用好地理编码工具和服务可以快速地获取一些感兴趣点位的地理坐标,从而快速满足场景定位、地图模型展示的需求,可进行二次封装和服务链集成调用。一般来说,地理编码Geocode)和基于位置的服务Location Based Service,简称LBS)息息相关,相辅相成,和大家的生活密不可分,与人们的需求十分贴切,小到查询一个学校、运动场地、住宅小区、商超的具体位置,大到旅游出行、物流交通运输、快递配送。如地铁线路图上的每个站点用圆圈表示,旁边伴有站名,不同的地铁线路采用不同颜色的线条进行表达,更能够从宏观上为人们展示全局视野,从而做到“心中有数”、“目标可达”;如售楼处的房地产商都要在大厅展示楼盘的三维模型,以此更加直观逼真、生动形象地展示所售楼房的区位优势、交通便利程度、小区绿化环境等设施条件,给人一种身临其境之感。
        当然,许多的WebGIS应用都离不开地址搜索、地址匹配、地址定位通过正向地理编码实现快速定位功能由文本描述到坐标 ),可用于地址信息的空间三维表达;利用反向地理编码获取最佳地址从坐标到文本信息 ),更多地是从位置数据来获取尽可能标准化、精准详细的地名描述。尤其需要注意的是,不同厂商的API所提供的服务能力肯定是有所差异的,具体与背后的技术实现思路、顶层设计、专业化精细化程度、数据库等方面息息相关,大家在选择相应的API服务,也要多加思考,择优利用哦。任何一项先进的理念和技术往往都需要和应该首先应用于军事和国防安全领域,不断提高现代化作战环境下精准打击、快速高效防卫的水平和能力。当今时代,全球化、多元化、信息化、数字化、智能化和智慧化的需求日益膨胀,尽管新技术、新方法、新问题和新挑战都层出不穷,但还是需要不断进行优化迭代后方可深化行业应用。如果小伙伴们有兴趣自己实现地理编码功能和服务的话,应该广泛阅读优秀期刊上的学术论文,这里推荐大家可从以下几点深入思考,也可事半功倍:

  • 地名地址标准化
  • 地名地址分层分级
  • 兴趣点按门类划分
  • 数据分库分表
  • 快速精准得分匹配
  • 贪婪式进化式搜索策略
  • 海纳百川,集众家之长

        尽管OpenAI自问世以来异常火热,但还望诸位头脑清晰,理智对待和谨慎使用,国产自主可控尤为关键和必要。
        注:本文旨在分享个人对于地理编码的学习体会和感受,观点并非完全正确,望各位伙伴同仁见谅,疏漏错误之处在所难免,同时欢迎广大开发者和专业爱好者共同交流,批评指正!!!

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

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

相关文章

MVVM框架:图片加载有问题

一、前言&#xff1a;在我使用ImageView加载图片的时候添加如下代码发现报错 app:imageUrl"{viewModel.observableField.assetImg}"报错如下错误 二、原因&#xff1a;是啥我不太清楚好像是没有imageView的适配器&#xff0c;后来我看了一下确实没有 public class I…

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

linux 安装 mini conda,linux下安装 Miniconda

下载地址 https://docs.conda.io/projects/miniconda/en/latest/index.html 安装conda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/mini…

微信开发者工具如何使用

首先是下载微信开发者工具 链接: https://pan.baidu.com/s/1ri-fRCUQsz9vLxbTqtdPUQ 提取码: 8rhn 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 安装完打开就是以下界面 接下来进入正题 第一步新建或导入 新建 获取AppID 第一步&#xff1a;通过微信公众平…

第12章 PyTorch图像分割代码框架-3:推理与部署

推理模块 模型训练完成后&#xff0c;需要单独再写一个推理模块来供用户测试或者使用&#xff0c;该模块可以命名为test.py或者inference.py&#xff0c;导入训练好的模型文件和待测试的图像&#xff0c;输出该图像的分割结果。inference.py主体部分如代码11-7所示。 代码11-7 …

vue做的一个一点就转的转盘(音乐磁盘),点击停止时会在几秒内缓慢停止,再次点击按钮可以再次旋转,

先看效果&#xff1a; 代码&#xff1a;主要部分我会红线画出来 css:部分&#xff1a; 源码&#xff1a; vue部分&#xff1a; <template><div class"song-lyric"><div><div class"type"><div class"right">&l…

如何用自然语言 5 分钟构建个人知识库应用?我的 GPTs builder 尝试

开发者的想象力闸门一旦打开&#xff0c;迎接我们的必然是目不暇接的 AI 应用浪潮冲击。 兴奋 早晨&#xff0c;我突然发现 ChatGPT 最新的 Create GPTs 功能可以用了。 这太让我意外了&#xff0c;没想到这么快。根据页面上的提示&#xff0c;我一直以为还得等上一周左右。于是…

3C制造RFID产线智能化升级改造设计方案

3C行业需求 近年来&#xff0c;随着政策的支持、相关技术的进步以及市场需求的推动&#xff0c;3C行业迅速发展&#xff0c;我国的3C市场已经进入了稳定发展阶段&#xff0c;作为仅次于汽车产业的大市场&#xff0c;3C产业在智能制造的推动下&#xff0c;越来越多的物联网技术…

软考网络工程师知识点总结(四)

目录 61、FTP文件传输服务 62、DHCP动态主机配置协议 63、电子邮件服务 64、各种新技术相关概念及功能的考查 65、Windows的ipconfig命令 66、Windows的其它命令及说明 67、Linux系统关机和重启命令 68、Linux系统文件属性命令 69、SNMP协议版本 70、SNMP协议的报文类…

【OpenCV(3)】linux arm aarch 是 opencv 交叉编译与使用

文章目录 1、直接找github 别人编译好的2、自主编译参考 3使用CMake检查 参考 1、直接找github 别人编译好的 测试很多&#xff0c;找到一个可用的。 https://github.com/dog-qiuqiu/libopencv 它用了超级模块&#xff01; OpenCV的world模块也称为超级模块&#xff08;supe…

Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态

波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成&#xff0c;将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动&#xff0c;并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…

5个最佳开源RPA框架

在最近两年中&#xff0c;RPA加上AI&#xff0c;即智能自动化流程&#xff0c;已经成为频繁讨论的话题&#xff0c;特别是在企业和机构的数字化转型过程中。自动化与智能化成为了提高效率的关键手段&#xff0c;而RPA便是迈向这一未来的起始步骤。 可以将RPA视为人体的躯干神经…

[MySQL] MySQL库的基础操作

文章目录 一、数据库的创建 1、1 库的创建 1、2 字符集与校验规则 1、2、1 查看字符集与校验规则 1、2、2 字符集与校验规则的设置 1、2、3 校验规则对数据库的影响 二、数据库的操作 2、1 查看数据库 2、2 删除数据库 2、3 修该数据库 2、4 数据库删除和备份 2、5 显示创建语…

C#医学检验室(LIS)信息管理系统源码

LIS:实验室信息管理系统 (Laboratory Information Management System简称:LIS)。 LIS 是面向医院检验科、检验中心、动物实验所、生物医疗研究所等科研单位研发的集数据采集、传输、存储、分析、处理、发布等功能于一体的信息管理系统。 一、完善的质控&#xff1a; 从样本管理…

芯片设计工程师必备基本功——《设计与验证:Verilog HDL》

Verilog HDL 作为两大硬件描述语言之一&#xff0c;拥有很大的用户群。据调查&#xff0c;目前美国有 90%左右的 IC 设计人员使用 Verilog. 在中国&#xff0c;大概再 50% 左右的人在使用 Verilog 。 大量高校毕业生和部分软件设计人员正在不断涌入这个领域。要想尽快在 IC设计…

Python开源项目CodeFormer——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

无论是自己、家人或是朋友、客户的照片&#xff0c;免不了有些是黑白的、被污损的、模糊的&#xff0c;总想着修复一下。作为一个程序员 或者 程序员的家属&#xff0c;当然都有责任满足他们的需求、实现他们的想法。除了这个&#xff0c;学习了本文的成果&#xff0c;或许你还…

git02->gui图形化界面使用,ssh协议,idea集成GIT

gui图形化界面使用ssh协议idea集成GIT 1.gui图形化界面使用 2.ssh协议 git/github生成密钥并通过 操作分为本地电脑配置和github网站配置 第一步&#xff1a;本地电脑配置 右键空白处&#xff0c;选择Git Bash Here打开相关命令窗口 1.配置用户名和邮箱&#xff08;如果已经配…

node插件MongoDB(三)—— 库mongoose 的使用和数据类型(一)

前言 提示&#xff1a;使用mongoose 的前提是你安装了node和 MongoDB。 mongoose 官网文档&#xff1a;http://mongoosejs.net/docs/index.html 文章目录 前言一、安装二、基本使用1. 打开bin目录的mongod.exe文件2. 基本使用的代码&#xff08;连接mongodb 服务&#xff09;3.…

基于《环境影响评价技术导则大气环境(HJ 2.2-2018)》的AERMOD模型配置方法

数值模式模拟是分析大气污染物时空分布和成分贡献的重要工具&#xff0c;利用模拟结果可以分析大气污染的来源、成因、污染程度、持续时间、主要成分、相对贡献等问题&#xff0c;有助于分析并合理控制污染源排放&#xff0c;为产业调整提供参考。当前&#xff0c;针对不同理论…

海思平台awb标定

文章目录 1、raw图采集2、awb标定3、标定效果优化1、raw图采集 raw图采集标准: 如果raw是12bit,即raw12,那么Block9 块的亮度就是40960.8 = 3276.8左右。 勾上Dump Raw,我这里raw10,即Depth为10bit,那么Block19的亮度应该为10240.8 = 819.2左右,调整曝光Exposure Attr…