..然后谷歌地图"划分水域的水"
嗯,不是在圣经的意义上,但..
我想知道我有什么选择来验证[Lat,Lon]的点是土地还是水.
谷歌地图显然有这些数据(水体是蓝色的) - 但是我可以使用API中的某些东西吗?如果没有 - 他们是不是因为他们没有想到它而服务它?还是因为它太复杂了?
我没有找到任何关于这个问题的信息 - 除了一些类似的问题(比如寻找地形类型或海拔 - 但这不是我需要的).
那有分离的层吗?一个选项?命令?或者我应该手动去做?
我能想到如何处理这个问题的唯一方法(我是否需要手动执行)是检查每个服务的磁贴的确切点 - 然后检查该Google地图色调的RGB值.这只是在理论上 - 因为在实践中 - 我不知道如何实现这一点,第一个障碍是我不知道如何将瓷砖上的像素位置转换为[LatLon]点,例如
现成的解决方案会更容易.
请注意,我不需要世界上所有的水(例如 - 我不关心溪流,小池塘,大多数河流或邻居的游泳池.我需要一个人可以在没有浮动车辆的情况下冒险的地方)
编辑我
阅读评论后:提升方法不可靠,海平面下面有太多地方(你可以在这里查看 "最深"10的列表http://geology.com/below-sea-level/)海平面(湖泊)上面有太多内陆水体.反向地理定位方法不可靠,因为它会多次返回地理政治实体,如城市或州 - 或ZERO.在问这个问题之前我已经研究了那些伪解决方案 - 但他们都没有回答过这个问题 - 这些方法充其量只是"猜测".
我知道在WorldWind Java中你可以找到高程和特定位置,如下所示:
public Double getPositionElevationMeters(Double lat, Double lon) {
double elevation = getWorldWindCanvas().getModel().getGlobe()
.getElevation(Angle.fromDegrees(lat), Angle.fromDegrees(lon));
return elevation;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法弄清楚这个纬度/经度是否实际上是一个主要的水体或土地?我采取了一种"盲目"的方法,只考虑低于0的高度是水,但这显然不是理想的.
我甚至会使用另一个能够提供这些信息的图书馆; 我只需要它离线工作.
Google Ajax API游乐场(http://code.google.com/apis/ajax/playground/?exp=maps#map_markers)提供了一个很好的例子,可以将随机标记添加到任何地图:
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 9);
// Add 10 markers to the map at random locations
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for (var i = 0; i < 10; i++) {
var point = new GLatLng(southWest.lat() + latSpan * Math.random(),
southWest.lng() + lngSpan * Math.random());
map.addOverlay(new GMarker(point)); …Run Code Online (Sandbox Code Playgroud) 我正在使用https://randomuser.me/生成一些随机用户数据进行测试。我想对提供附加真实城市/州/国家信息的纬度和经度进行地理编码,而不是 RandomUser 提供的完全虚假的信息。然而,这些物体的许多实际纬度/经度值结果都在海洋的中间。
是否有 API 或其他方法可以让我获得始终在陆地上的随机坐标?我见过这个:随机地理坐标(在陆地上,避开海洋)但是肯定有一些更有效的方法,而不是通过不断的地理编码猜测和检查直到找到一个有效的方法,对吧?