python - 如何使用 Python 从 KML 服务器获取数据?
问题描述
本质上,我试图从 Python 脚本中模仿 Google 地球的行为,以从 NetworkLink 获取数据。阅读文档,我发现我需要使用 BBOX 变量提供一个边界框。但是,似乎我需要在数据的初始请求之后请求这个。
关于如何在 Google 地球之外请求这些数据的任何建议?
解决方案
Google 地球专业版可以被认为是一个专门的网络浏览器,除了图像之外,它还获取 KML 和 KMZ 内容,并在 3D 地球环境中呈现该内容。在幕后,Google 地球会根据当前视图和 KML 内容(例如 NetworkLinks)构建 URL。在 NetworkLink 中调用 URL 的 Python 代码需要模仿 Google 地球调用目标 URL 的操作。
如果目标 KML NetworkLink具有viewFormat或httpQuery元素,则获取的实际 URL 将根据指定的参数进行更新。viewFormat和httpQuery定义了一个带有命名字段的模板,这些字段用适当的值填充并附加到 URL。
具有目标 href 和 viewFormat 的示例 NetworkLink 定义。
<NetworkLink>
<Link>
<href>http://www.example.com/kml</href>
<viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]</viewFormat>
</Link>
</NetworkLink>
该字符串BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]
是一个模板,它将替换括号中的命名参数以获得适当的值,并将结果附加到目标 URL 的查询字符串。表达式 [bboxWest] 和 [bboxEast] 替换为查看边界框的西经度值和最东经度值,[bboxNorth] 和 [bboxSouth] 替换为视图中的最大和最小纬度值。
这是需要通过 HTTP GET 请求获取的实际 URL 的示例。
http://www.example.com/kml?BBOX=-180,-90,180,90
可以出现在 viewFormat 元素中的参数列表。
- [lookatLon], [lookatLat] - 正在查看的点的经度和纬度
- [lookatRange]、[lookatTilt]、[lookatHeading] - 元素使用的值(参见KML 元素中
<range>
、<tilt>
和<heading>
的描述)<LookAt>
- [lookatTerrainLon]、[lookatTerrainLat]、[lookatTerrainAlt] - 以度/米
<LookAt>
为单位查看的地形上的点 - [cameraLon], [cameraLat], [cameraAlt] - 相机视点的度/米
- [horizFov], [vertFov] - 相机的水平、垂直视野
- [horizPixels], [vertPixels] - 3D 查看器的像素大小
- [terrainEnabled] - 指示 3D 查看器是否显示地形
包含 viewFormat 和 httpClient 元素的更复杂的 NetworkLink 示例。
<NetworkLink>
<Link>
<href>http://www.example.com/kml</href>
<viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth];
CAMERA=[lookatLon],[lookatLat],[lookatRange],[lookatTilt],[lookatHeading];
VIEW=[horizFov],[vertFov],[horizPixels],[vertPixels],[terrainEnabled];
LOOKAT=[lookatTerrainLon],[lookatTerrainLat],[lookatTerrainAlt]
</viewFormat>
<httpQuery>client=[clientVersion],[kmlVersion],[clientName],[language]</httpQuery>
</Link>
</NetworkLink>
这是一个可以获取以适应上述 NetworkLink 的 URL。
http://www.example.com/kml?client=7.3.3.7786,2.2,Google+Earth+Pro,en&
BBOX=-180,-90,180,90;CAMERA=0,0,0,0,0;VIEW=0,0,0,0,0;LOOKAT=0,0,0
推荐阅读
- django - Django 运行特定测试
- android - ndk-gdb 中的“无法从 Android.mk 检索应用程序 ABI”错误
- cmake - CMake 的 find_package 找不到使用 add_subdirectory 添加的库
- css - CSS / SCSS:仅在存在溢出时启用悬停
- html - 页眉和页脚未在 puppeteer 生成的 pdf 中应用 css
- swift4.2 - 如何在过滤器不起作用时进行正确的搜索
- python - 迭代三行然后进行线性回归
- msbuild - 错误 MSB3086:任务无法使用 SdkToolsPath“”找到“LC.exe”
- apache-spark - Hive Warehouse Connector + Spark = 签名者信息与同包中其他类的签名者信息不匹配
- android - Android Mapbox如何在使用CirclceClustering层时捕获标记点击