2014-01-19 35 views

回答

1

1)检查水

你可以蒙混这跟技术如制作ReverseGeocodeQuery和检查国家字段填写的第一个条目返回,至最接近的结果距离,但是这也将失败在人口稀少的地区。另一种方法是使用场所API并检查underwater类别中最近的地方。

更好的方法是根据Map Tile API的地图图块的像素分析构建自己的二进制黑白小地图。 Map Tile API基于规范化的mercator投影,这意味着整个地球在缩放0处为一个方形,在缩放1处为2x2,在缩放2处为4x4等。因此,如果检查瓷砖左上角的颜色(和蓝色),您可以确定下一个缩放级别下方的4个像素也是蓝色。这可以用来定义一个“水”瓦:

您的最终地图将是这个样子:在迷你地图

Ocean

白色像素=蓝色像素的地图瓦片的右上角放大10倍。每块瓷砖宽13公里。使用更大的地图和更高的缩放级别来获得更高的准确性。将其存储在设备上。

现在您只需检查代表输入lat/long的地图图块的像素是黑色还是白色。显然,这里的每个像素可以被编码为一个单独的位,并且您可以使用位掩码,因此您不需要占用太多内存。是

你需要分析瓷砖如下:

http://1.aerial.maps.cit.api.here.com/maptile/2.1/basetile/newest/terrain.day/zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

2)检查城区

同样,你可以用这种技术为做傻事这使ReverseGeocodeQuery和检查城市领域填写返回的第一个条目,并且距离最近的 点。问题是你认为什么是市区?也许在这里正确的技术将是看公路密度 - 以芝加哥的这种瓷砖,例如:

http://1.base.maps.cit.api.here.com/maptile/2.1/basetile/newest/normal.day.grey/zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

这是相当明显,平均颜色瓷砖的上半部分的将比下半部分更“灰暗”。您可以分析较大区域的平均像素以制作您的位掩码。

最终的结果将是这个样子:

enter image description here

在迷你地图=市区白色像素。该图像的投影是错误的,但你会明白。

3)检查森林。

这可能是一个“绿色像素”检查普通的基本地图图块: http://1.base.maps.cit.api.here.com/maptile/2.1/xbasetile/newest/normal.day//zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

你需要谨慎使用该森林没有出现要一直呈现在不同的缩放级别。

您可以使用以下计算来查找longitudelatitiudexTileyTile值。显然zoom会根据你的小地图

latRad = lat * Math.PI/180; 
n = Math.pow(2, z); 
xTile = n * ((lon + 180)/360); 
yTile = n * (1-(Math.log(Math.tan(latRad) + 1/Math.cos(latRad))/
Math.PI))/2; 
+0

谢谢你的答案的大小是固定的,我真的很感激你中Effert,我很感激,因为应用程序,我想创造是我一直想做的事:)。我真的有这个想法,但不知道是否有可能。现在我知道了。我会将此标记为答案,因为它符合我想要做的事情。 – user1577566

相关问题