var myGraphimyGraphic.geometry = new MapPoint(70000,71000);
myGraphic.symbol = new SimpleMarkerSymbol("cross");
var jsonStr = JSON.encode(myGraphic);
trace(jsonStr);
private function addGras():void
{
drawAC = new ArrayCollection();
var i:Number;
var symTypeName:String = "";
var symType:String = "";
var symLType:String = "";
var symFontE:String = "";
var symSize:Number = 1;
var symColor:Number = 0x000000;
var symColor2:Number = 0x000000;
var symWidth:Number = 1;
var symText:String = "";
var symAlpha1:Number = 1;
var symAlpha2:Number = 1;
var geomType:String = "";
var geomSR:Number;
var gname:String = "";
for (i = 0; i < graphicsLayer.numGraphics; i++)
{
var geomArray:Array = [];
symText = "";
var gra:Graphic = graphicsLayer.getChildAt(i) as Graphic;
switch(gra.geometry.type)
{
case Geometry.MAPPOINT:
{
if (gra.symbol is TextSymbol) {
var txtSym:TextSymbol = gra.symbol as TextSymbol;
symTypeName = "TextSymbol";
var txtFormat:TextFormat = txtSym.textFormat;
if(useDefaultFont){
symType = "Arial"
}else{
symType = txtFormat.font
}
symText = txtSym.text;
if (txtFormat.bold)
symFontE += "B"
if (txtFormat.italic)
symFontE += "I"
if (txtFormat.underline)
symFontE += "U"
symSize = Number(txtFormat.size);
symColor = Number(txtFormat.color);
} else {
var ptSym:SimpleMarkerSymbol = gra.symbol as SimpleMarkerSymbol;
symTypeName = "SimpleMarkerSymbol";
symType = ptSym.style;
symColor = ptSym.color;
symSize = ptSym.size;
symAlpha1 = ptSym.alpha;
symColor2 = ptSym.outline.color;
symAlpha2 = ptSym.outline.alpha;
symWidth = ptSym.outline.width;
symLType = ptSym.outline.style;
}
geomType = "MAPPOINT";
var pnt:MapPoint = gra.geometry as MapPoint;
geomSR = gra.geometry.spatialReference.wkid
geomArray.push(pnt);
break;
}
case Geometry.POLYLINE:
{
var lineSym:SimpleLineSymbol = gra.symbol as SimpleLineSymbol;
symTypeName = "SimpleLineSymbol";
symType = lineSym.style;
symWidth = lineSym.width;
symAlpha1 = lineSym.alpha;
symColor = lineSym.color;
geomType = "POLYLINE";
var polyline:Polyline = gra.geometry as Polyline;
for (var i1:int = 0; i1 < polyline.paths.length; i1++)
{
for (var j:int = 0; j < polyline.paths[i1].length; j++)
{
var mp:MapPoint = polyline.getPoint(i1,j) as MapPoint;
geomArray.push(mp);
}
}
geomSR = gra.geometry.spatialReference.wkid
break;
}
case Geometry.POLYGON:
{
var polySym:SimpleFillSymbol = gra.symbol as SimpleFillSymbol;
symTypeName = "SimpleFillSymbol";
symType = polySym.style;
symWidth = polySym.outline.width;
symLType = polySym.outline.style;
symAlpha1 = polySym.alpha;
symAlpha2 = polySym.outline.alpha
symColor = polySym.color;
symColor2 = polySym.outline.color;
geomType = "POLYGON";
var poly:Polygon= gra.geometry as Polygon;
for (var i2:int = 0; i2 < poly.rings.length; i2++)
{
for (var j1:int = 0; j1 < poly.rings[i2].length; j1++)
{
var mp2:MapPoint = poly.getPoint(i2,j1) as MapPoint;
geomArray.push(mp2);
}
}
geomSR = gra.geometry.spatialReference.wkid
break;
}
case Geometry.EXTENT:
{
var rectSym:SimpleFillSymbol = gra.symbol as SimpleFillSymbol;
symTypeName = "SimpleFillSymbol";
symType = rectSym.style;
symWidth = rectSym.outline.width;
symLType = rectSym.outline.style;
symAlpha1 = rectSym.alpha;
symAlpha2 = rectSym.outline.alpha
symColor = rectSym.color;
symColor2 = rectSym.outline.color;
geomType = "EXTENT";
var rect:Extent= gra.geometry as Extent;
var mp3:MapPoint;
mp3 = new MapPoint(rect.xmin, rect.ymin, gra.geometry.spatialReference);
geomArray.push(mp3);
mp3 = new MapPoint(rect.xmax, rect.ymax, gra.geometry.spatialReference);
geomArray.push(mp3);
geomSR = gra.geometry.spatialReference.wkid
break;
}
}
var gObj:Object = {
geomtype: geomType,
geomarray: geomArray,
geomsr: geomSR,
symtypename: symTypeName,
symtype: symType,
symsize: symSize,
symcolor: symColor,
symcolor2: symColor2,
symwidth: symWidth,
symtext: symText,
symalpha1: symAlpha1,
symalpha2: symAlpha2,
cmenu: gra.contextMenu,
symfonte: symFontE,
symltype: symLType,
gname: gra.name
}
drawAC.addItem(gObj);
}
if(!fr) fr = new FileReference();
fr.save(JSON.encode(drawAC.source),"SavedGraphics.txt")
graphicsLayer.clear();
}
private function jsonEncodeGraphic(graphic:Graphic):String {
var graObj:Object = new Object();
graObj.geometry = graphic.geometry;
graObj.symbol = encodeSymbol(graphic.symbol);
return JSON.encode(graObj);
}
private function encodeColor(color:uint, alpha:Number = 1):Array {
var colorArray:Array = new Array();
var alphaRestValue:uint = alpha * 255;
var hexRep:String = color.toString(16);
if (hexRep.length == 6) {
colorArray.push(new uint("0x" + hexRep.substring(0, 2)));
colorArray.push(new uint("0x" + hexRep.substring(2, 4)));
colorArray.push(new uint("0x" + hexRep.substring(4, 6)));
} else if (hexRep.length == 4) {
colorArray.push(new uint(0));
colorArray.push(new uint("0x" + hexRep.substring(0, 2)));
colorArray.push(new uint("0x" + hexRep.substring(2, 4)));
} else if (hexRep.length == 2) {
colorArray.push(new uint(0));
colorArray.push(new uint(0));
colorArray.push(new uint("0x" + hexRep.substring(0, 2)));
} else {
colorArray.push(new uint(0));
colorArray.push(new uint(0));
colorArray.push(new uint(0));
}
colorArray.push(alphaRestValue);
return colorArray;
}
private function encodeSymbol(symbol:Symbol):Object {
var symbolObj:Object = new Object();
if (symbol is TextSymbol) {
var textSym:TextSymbol = symbol as TextSymbol;
//not yet finished
symbolObj.type = "esriTS";
symbolObj.angle = textSym.angle;
symbolObj.color = encodeColor(textSym.color, textSym.alpha);
if (textSym.background)
symbolObj.backgroundColor = encodeColor(textSym.backgroundColor);
if (textSym.border)
symbolObj.borderLineColor = encodeColor(textSym.borderColor);
symbolObj.xoffset = textSym.xoffset;
symbolObj.yoffset = textSym.yoffset;
symbolObj.text = textSym.text;
return symbolObj;
} else if (symbol is SimpleMarkerSymbol) {
var markerSym:SimpleMarkerSymbol = symbol as SimpleMarkerSymbol;
symbolObj.type = "esriSMS";
symbolObj.style = symbolObj.type + markerSym.style.substring(0, 1).toUpperCase() + markerSym.style.substring(1);
symbolObj.color = encodeColor(markerSym.color, markerSym.alpha);
symbolObj.size = markerSym.size;
symbolObj.angle = markerSym.angle;
symbolObj.xOffset = markerSym.xoffset;
symbolObj.yOffset = markerSym.yoffset;
if (markerSym.outline) {
var outlineObj:Object = new Object();
outlineObj.color = encodeColor(markerSym.outline.color, markerSym.outline.alpha);
outlineObj.width = markerSym.outline.width;
outlineObj.style = markerSym.outline.style;
symbolObj.outline = outlineObj;
}
return symbolObj;
} else if (symbol is SimpleLineSymbol) {
var lineSym:SimpleLineSymbol = symbol as SimpleLineSymbol;
symbolObj.type = "esriSLS";
symbolObj.style = symbolObj.type + lineSym.style.substring(0, 1).toUpperCase() + lineSym.style.substring(1);
symbolObj.color = encodeColor(lineSym.color, lineSym.alpha);
symbolObj.width = lineSym.width;
return symbolObj;
} else if (symbol is SimpleFillSymbol) {
var fillSym:SimpleFillSymbol = symbol as SimpleFillSymbol;
symbolObj.type = "esriSFS";
symbolObj.style = symbolObj.type + fillSym.style.substring(0, 1).toUpperCase() + fillSym.style.substring(1);
symbolObj.color = encodeColor(fillSym.color, fillSym.alpha);
if (fillSym.outline)
symbolObj.outline = encodeSymbol(fillSym.outline);
return symbolObj;
}
Alert.show("Unknown SYMBOL type to convert to json: " + symbol);
return null;
}