﻿
function veshape2WKT(veshape){
    return veLatLngArr2WKT(veshape.GetPoints(), veshape.GetType());
}
function veLatLng2WKT(latLng){
    return "POINT(" + veLatLng2Str(latLng) + ")";
}
function veLatLngArr2WKT(latLngArr, shapeType){
    /*
    POINT(6 10)
     LINESTRING(3 4,10 50,20 25)
     POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2))
     MULTIPOINT(3.5 5.6,4.8 10.5)
     MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))
     MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))
     GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
     POINT ZM (1 1 5 60)
     POINT M (1 1 80)
    */
    var wkt = "";
    if (latLngArr==null || latLngArr.length ==0){
        return "";
    }
     
    if (shapeType == VEShapeType.Pushpin){
        wkt = "POINT(";
        wkt = wkt + veLatLng2Str(latLngArr[0])
        wkt = wkt + ")";
        
        
    }
    if (shapeType == VEShapeType.Polygon){
        wkt = "POLYGON((";
        wkt = wkt + veLatLngArr2Str(latLngArr);        
        wkt = wkt + "))";
    }
    if (shapeType == VEShapeType.Polyline){
        wkt = "LINESTRING(";
        wkt = wkt + veLatLngArr2Str(latLngArr);        
        wkt = wkt + ")";
    }
    
    return wkt;
}
function veLatLng2Str(latLng){

    return (cutOffDecimal(latLng.Latitude, 6) + " " + cutOffDecimal(latLng.Longitude, 6));
}
function veLatLngArr2Str(latLngArr){
    var str = "";
    for (var i = 0; i < latLngArr.length - 1; i++){
        str = str + veLatLng2Str(latLngArr[i]) + ",";
    }
    str = str + veLatLng2Str(latLngArr[latLngArr.length - 1]);
    return str;
}

//************************************ WKT to velatlng
function wkt2VELatLngArr(wktStr){
    //alert ("orignal:" + wktStr);
    var wkt = removeType(wktStr);
    wkt = removeAllPar(wkt);
    //alert ("after remove:" + wkt);
    var arr = wkt.split(",");
    //alert ("after split:" + arr);
    var veLatLngArr = new Array(arr.length);
    for (var i  = 0; i < arr.length; i++){
        str = arr[i];
        if (str != ""){
            veLatLngArr[i] = wktVertex2VELatLng(str);
        }
    }
    //alert (veLatLngArr);
    return veLatLngArr;
}
function wktVertex2VELatLng(wktStr){
    var strArr = wktStr.split(" ");
    if (strArr.length == 2){
        return new VELatLong(strArr[0]*1, strArr[1]*1);
    }
    return null; 
}
function removeType(wktStr){
    var i = wktStr.indexOf("(");
    return (wktStr.substr(i));
}
function removeAllPar(wktStr){
    
    wktStr = wktStr.replace(/\(/g, "");
    wktStr = wktStr.replace(/\)/g, "");
    return wktStr;
}

