我正在使用地图应用程序,此应用程序的一个功能是允许用户在地图上绘制特定任务的多边形。
此Polygon
将保存在我们的服务器上供以后使用。
我设法对这些点进行编码并生成一个编码的字符串路径,以减少存储和从服务器传输多边形的大小。
String path = PolyUtil.encode(latLngs); // Android
但我在Google developer webiste上读到:
折线编码是一种有损压缩算法,允许您将一系列坐标存储为单个字符串。点坐标使用有符号值进行编码。如果您只有几个静态点,您可能还希望使用交互式折线编码实用程序。
阅读本文时我感到震惊:(因为我在多个App中使用encodedPath
。
有损压缩是什么意思?
使用此类型存储用户的多边形是否安全?
我的意思是:decode
字符串中的每个encoded
都会生成相同的点,这是真的吗?
或者最好将polygon
作为多点存储在服务器上?
感谢您的帮助。
答案 0 :(得分:3)
如果您查看用于编码Google Maps Android API Utility Library纬度/经度序列的encode
方法,您会看到它绕过小数点后五位:
long lat = Math.round(point.latitude * 1e5);
long lng = Math.round(point.longitude * 1e5);
从the Wikipedia起,0.00001十进制度相当于赤道1.1132米。
无论如何,请考虑到这是现在的行为,并且它对您来说是透明的,因此您可能不会注意到实现是否更改以允许更高的精度或更精确度是否被截断。因此,如果坐标的精度对您很重要,您可能希望将坐标存储为系统上的点列表。