missing check for empty polylines
This commit is contained in:
parent
5b621d8fe9
commit
4639187180
@ -25,57 +25,59 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
|
|
||||||
class PolylineCompressor {
|
class PolylineCompressor {
|
||||||
private:
|
private:
|
||||||
inline string encodeSignedNumber(int number) const {
|
inline string encodeSignedNumber(int number) const {
|
||||||
int signedNumber = number << 1;
|
int signedNumber = number << 1;
|
||||||
if (number < 0) {
|
if (number < 0) {
|
||||||
signedNumber = ~(signedNumber);
|
signedNumber = ~(signedNumber);
|
||||||
}
|
}
|
||||||
return (encodeNumber(signedNumber));
|
return (encodeNumber(signedNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline string encodeNumber(int numberToEncode) const {
|
inline string encodeNumber(int numberToEncode) const {
|
||||||
ostringstream encodeString;
|
ostringstream encodeString;
|
||||||
|
|
||||||
while (numberToEncode >= 0x20) {
|
while (numberToEncode >= 0x20) {
|
||||||
int nextValue = (0x20 | (numberToEncode & 0x1f)) + 63;
|
int nextValue = (0x20 | (numberToEncode & 0x1f)) + 63;
|
||||||
encodeString << (static_cast<char> (nextValue));
|
encodeString << (static_cast<char> (nextValue));
|
||||||
numberToEncode >>= 5;
|
numberToEncode >>= 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
numberToEncode += 63;
|
numberToEncode += 63;
|
||||||
encodeString << (static_cast<char> (numberToEncode));
|
encodeString << (static_cast<char> (numberToEncode));
|
||||||
|
|
||||||
return encodeString.str();
|
return encodeString.str();
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
inline void printEncodedString(vector<_Coordinate>& polyline, string &output) {
|
inline void printEncodedString(vector<_Coordinate>& polyline, string &output) {
|
||||||
output += "\"";
|
output += "\"";
|
||||||
output += encodeSignedNumber(polyline[0].lat);
|
if(polyline.size() > 0) {
|
||||||
output += encodeSignedNumber(polyline[0].lon);
|
output += encodeSignedNumber(polyline[0].lat);
|
||||||
for(unsigned i = 1; i < polyline.size(); i++) {
|
output += encodeSignedNumber(polyline[0].lon);
|
||||||
output += encodeSignedNumber(polyline[i].lat - polyline[i-1].lat);
|
}
|
||||||
output += encodeSignedNumber(polyline[i].lon - polyline[i-1].lon);
|
for(unsigned i = 1; i < polyline.size(); i++) {
|
||||||
}
|
output += encodeSignedNumber(polyline[i].lat - polyline[i-1].lat);
|
||||||
output += "\"";
|
output += encodeSignedNumber(polyline[i].lon - polyline[i-1].lon);
|
||||||
}
|
}
|
||||||
|
output += "\"";
|
||||||
|
}
|
||||||
|
|
||||||
inline void printUnencodedString(vector<_Coordinate> & polyline, string & output) {
|
inline void printUnencodedString(vector<_Coordinate> & polyline, string & output) {
|
||||||
output += "[";
|
output += "[";
|
||||||
string tmp;
|
string tmp;
|
||||||
for(unsigned i = 0; i < polyline.size(); i++) {
|
for(unsigned i = 0; i < polyline.size(); i++) {
|
||||||
convertLatLon(polyline[i].lat, tmp);
|
convertLatLon(polyline[i].lat, tmp);
|
||||||
output += "[";
|
output += "[";
|
||||||
output += tmp;
|
output += tmp;
|
||||||
convertLatLon(polyline[i].lon, tmp);
|
convertLatLon(polyline[i].lon, tmp);
|
||||||
output += ", ";
|
output += ", ";
|
||||||
output += tmp;
|
output += tmp;
|
||||||
output += "]";
|
output += "]";
|
||||||
if( i < polyline.size()-1 ) {
|
if( i < polyline.size()-1 ) {
|
||||||
output += ",";
|
output += ",";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
output += "]";
|
output += "]";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* POLYLINECOMPRESSOR_H_ */
|
#endif /* POLYLINECOMPRESSOR_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user