|
POST
|
The last ESRI release version of API for FLEX (2.5) has help document with name Localization. This document provide link to ESRIMessages.properties file and description: how to use it. Today we do not need to hack ESRI code (in old versions "ESRIMessages.properties" were hidden 😞 ). ... var rb:IResourceBundle = resourceManager.getResourceBundle("en_US", "ESRIMessages") as IResourceBundle; ... 1 - Create folder in you project solution (if not exists): "locale" folder. In "locale" create folder "myLanguage". Put "ESRIMessages.properties" in. 2 - Translate strings. 3 - Go to Project > Flex Compiler. 4 - Set the Additional compiler arguments: -locale=myLanguage -source-path=locale/{locale} But, yes. Hacking method still works. :cool:
... View more
03-01-2012
10:43 PM
|
0
|
0
|
266
|
|
POST
|
An, Sample (with source code), where you can find InfoSymbol with close button: http://help.arcgis.com/en/webapi/flex/samples/01nq/01nq00000040000000.htm
... View more
02-28-2012
09:32 PM
|
0
|
0
|
352
|
|
POST
|
You can write some utility for cloning graphics with own validation logic. Sample clone utility: package ee.alphagis.utils
{
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.symbols.Symbol;
import mx.core.IFactory;
public class MyGraphicUtils
{
public static function cloneGraphic(graphic:Graphic):Graphic
{
if (!graphic)
{
return null;
}
var geometry:Geometry = graphic.geometry;
var symbol:Symbol = graphic.symbol;
var attributes:Object = graphic.attributes;
var autoMoveToTop:Boolean = graphic.autoMoveToTop;
var checkForMouseListeners:Boolean = graphic.checkForMouseListeners;
var infoWindowRenderer:IFactory = graphic.infoWindowRenderer;
var result:Graphic = new Graphic(geometry, symbol, attributes);
result.autoMoveToTop = autoMoveToTop;
result.checkForMouseListeners = checkForMouseListeners;
result.infoWindowRenderer = infoWindowRenderer;
return result;
}
}
} Utility usage sample: <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- Adobe FLEX SDK ver. 4.5.1 -->
<!-- ArcGIS API for FLEX ver. 2.5 -->
<s:layout>
<s:VerticalLayout paddingBottom="20"
paddingLeft="20"
paddingRight="20"
paddingTop="20" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.symbols.SimpleMarkerSymbol;
import ee.alphagis.utils.MyGraphicUtils;
import mx.controls.Alert;
import mx.utils.StringUtil;
private var _pattern:String = "base={0}, geometry={1}, name={2}, stamp={3}\n\nclone={4}, geometry={5}, name={6}, stamp={7}";
protected function button1_clickHandler(event:MouseEvent):void
{
var attr:Object = new Object();
attr.name = "qwerty";
attr.date = new Date();
var geometry:MapPoint = new MapPoint(654, 456, new SpatialReference(4326));
var symbol:SimpleMarkerSymbol = new SimpleMarkerSymbol("circle", 16, 0x00ff56);
var baseGraphic:Graphic = new Graphic(geometry, symbol, attr);
var clonedGraphic:Graphic = MyGraphicUtils.cloneGraphic(baseGraphic);
var message:String = StringUtil.substitute(_pattern,
baseGraphic.toString(),
baseGraphic.geometry.type,
baseGraphic.attributes["name"],
baseGraphic.attributes["date"],
clonedGraphic.toString(),
clonedGraphic.geometry.type,
clonedGraphic.attributes["name"],
clonedGraphic.attributes["date"]);
Alert.show(message);
}
]]>
</fx:Script>
<s:Button label="clone"
click="button1_clickHandler(event)"/>
</s:Application>
... View more
02-28-2012
05:14 AM
|
0
|
0
|
875
|
|
POST
|
cspring, http://forums.arcgis.com/threads/31993-Can-t-add-the-same-Graphic-twice-to-a-GraphicsLayer?p=107453#post107453 Question to you: Can you tell, what is the base idea? Why do you need in 2 absolutely equals graphics?
... View more
02-27-2012
11:05 PM
|
0
|
0
|
875
|
|
POST
|
Can you show your code? I could not get an error. <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- Adobe FLEX SDK ver. 4.5.1 -->
<!-- ArcGIS API for FLEX ver. 2.5 -->
<s:layout>
<s:VerticalLayout gap="10"
paddingBottom="10"
paddingLeft="10"
paddingRight="10"
paddingTop="10" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.layers.supportClasses.Field;
import mx.collections.ArrayCollection;
private var arrFields:Array = new Array();
[Bindable]
private var gridSource:ArrayCollection = new ArrayCollection();
protected function onDateFieldAdd(event:MouseEvent):void
{
var name:String = getRandomString(6);
var alias:String = getRandomString(7);
var field:Field = createField(name, Field.TYPE_DATE, alias, 10);
arrFields.push(field);
gridSource = new ArrayCollection(arrFields);
}
protected function onDoubleFieldAdd(event:MouseEvent):void
{
var name:String = getRandomString(6);
var alias:String = getRandomString(7);
var field:Field = createField(name, Field.TYPE_DOUBLE, alias);
arrFields.push(field);
gridSource = new ArrayCollection(arrFields);
}
protected function onGeometryFieldAdd(event:MouseEvent):void
{
var name:String = getRandomString(6);
var alias:String = getRandomString(7);
var field:Field = createField(name, Field.TYPE_GEOMETRY, alias);
arrFields.push(field);
gridSource = new ArrayCollection(arrFields);
}
protected function onLongFieldAdd(event:MouseEvent):void
{
var name:String = getRandomString(6);
var alias:String = getRandomString(7);
var field:Field = createField(name, Field.TYPE_INTEGER, alias, 8);
arrFields.push(field);
gridSource = new ArrayCollection(arrFields);
}
protected function onIntFiledAdd(event:MouseEvent):void
{
var name:String = getRandomString(6);
var alias:String = getRandomString(7);
var field:Field = createField(name, Field.TYPE_SMALL_INTEGER, alias, 4);
arrFields.push(field);
gridSource = new ArrayCollection(arrFields);
}
private function createField(fieldName:String, fieldType:String, fieldAlias:String = null, fieldLength:int = 0):Field
{
var result:Field = null;
if (fieldName != null && fieldType != null)
{
result = new Field();
result.name = fieldName;
result.type = fieldType;
result.alias = fieldAlias;
if (fieldLength > 0)
{
result.length = fieldLength;
}
}
return result;
}
private function getRandomString(length:Number):String{
var a:String = "abcdefghijklmnopqrstuvwxyz";
var alphabet:Array = a.split("");
var randomString:String = "";
for (var i:Number = 0; i < length; i++){
randomString += alphabet[Math.floor(Math.random() * alphabet.length)];
}
return randomString;
}
]]>
</fx:Script>
<mx:HDividedBox width="100%"
height="100%">
<s:Panel width="50%"
height="100%">
<s:layout>
<s:VerticalLayout gap="10"
paddingTop="10"
paddingLeft="10"/>
</s:layout>
<s:Button label="Add date field"
click="onDateFieldAdd(event)" />
<s:Button label="Add double field"
click="onDoubleFieldAdd(event)" />
<s:Button label="Add geometry field"
click="onGeometryFieldAdd(event)" />
<s:Button label="Add long field"
click="onLongFieldAdd(event)" />
<s:Button label="Add int field"
click="onIntFiledAdd(event)" />
</s:Panel>
<s:Panel width="50%"
height="100%">
<s:DataGrid dataProvider="{gridSource}"
width="100%"
height="100%">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="name" />
<s:GridColumn dataField="alias" />
<s:GridColumn dataField="type" />
<s:GridColumn dataField="length" />
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:Panel>
</mx:HDividedBox>
</s:Application>
... View more
02-22-2012
09:52 PM
|
0
|
0
|
585
|
|
POST
|
Seems like all right... fields.push(field); I have no ideas...
... View more
02-22-2012
08:28 PM
|
0
|
0
|
585
|
|
POST
|
James, may be bacause Field.TYPE_INTEGER is Long Integer TYPE_INTEGER Constant public static const TYPE_INTEGER:String = esriFieldTypeInteger Long Integer. and Filed.TYPE_SMALL_INTEGER is Integer TYPE_SMALL_INTEGER Constant public static const TYPE_SMALL_INTEGER:String = esriFieldTypeSmallInteger Integer. http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/supportClasses/Field.html#TYPE_INTEGER
... View more
02-22-2012
10:30 AM
|
0
|
0
|
585
|
|
POST
|
shafi, From adobe reference: ...Validate and update the properties and layout of this object and redraw it, if necessary... Sample here:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:ags="http://www.esri.com/2008/ags">
<s:layout>
<s:VerticalLayout gap="20"
paddingBottom="20"
paddingLeft="20"
paddingRight="20"
paddingTop="20" />
</s:layout>
<fx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.graphics.codec.PNGEncoder;
private const FILE_NAME:String = "screen.png";
private var bitmapData:BitmapData;
private var logoBitmapData:BitmapData;
/**
* Listen print button click
*/
protected function onPrintClick(event:MouseEvent):void
{
exportPngImage();
}
/**
* Export png
*/
private function exportPngImage():void
{
if (map)
{
var fileReference:FileReference = new FileReference();
hideComponents();
// add listeners to show zoom slider after execution
fileReference.addEventListener(Event.COMPLETE, fileSaveComplete);
fileReference.addEventListener(Event.CANCEL, fileSaveCancel);
try
{
var mapComponent:UIComponent = map as UIComponent;
var exportData:BitmapData = getBitmapData(mapComponent);
if (exportData)
{
// encode to PNG format
var pngEncoder:PNGEncoder = new PNGEncoder();
var byteArray:ByteArray = pngEncoder.encode(exportData);
// open dialog box
fileReference.save(byteArray, FILE_NAME);
exportData = null;
bitmapData = null;
logoBitmapData = null;
}
}
catch (ioError:IllegalOperationError)
{ // handle error
}
catch (error:Error)
{ // handle error
}
}
}
/**
* file upload/download canceled by user
*/
protected function fileSaveCancel(event:Event):void
{
showComponents();
}
/**
* file upload/download completed
*/
protected function fileSaveComplete(event:Event):void
{
showComponents();
}
private function hideComponents():void
{
if (!chboxCrosshair.selected)
map.crosshairVisible = false;
if (!chboxLogo.selected)
map.logoVisible = false;
if (!chboxScale.selected)
map.scaleBarVisible = false;
if (!chboxSlider.selected)
map.zoomSliderVisible = false;
// force UIComponent update/redraw
map.validateNow();
}
private function showComponents():void
{
map.crosshairVisible = true;
map.logoVisible = true;
map.scaleBarVisible = true;
map.zoomSliderVisible = true;
}
/**
* get bitmap data from IBitmapDrawable component
*/
private function getBitmapData(uiComponent:UIComponent):BitmapData
{
if (uiComponent)
{
try
{
// map image size
var mapWidth:Number = uiComponent.width;
var mapHeigth:Number = uiComponent.height;
// get flash map bitmap data
bitmapData = new BitmapData(mapWidth, mapHeigth);
var matrix:Matrix = new Matrix();
bitmapData.draw(uiComponent, matrix);
if (chboxCR.selected)
{
// logo image size
var logoWidth:Number = logo.width;
var logoHeigth:Number = logo.height;
// get logo bitmap data
logoBitmapData = new BitmapData(logoWidth, logoHeigth);
logoBitmapData.draw(logo, matrix);
// calculate logo left-top position on map
var logoX:Number = mapWidth - logoWidth - 10;
var logoY:Number = 10;
var point:Point = new Point(logoX, logoY);
var mult:uint = 0x100; // 100% (256) RGBA channels multipliers
bitmapData.merge(logoBitmapData, logoBitmapData.rect, point, mult, mult, mult, mult);
}
}
catch (error:Error)
{
// handle error
}
}
return bitmapData;
}
]]>
</fx:Script>
<mx:Image id="logo"
source="http://edn.esri.com/common/style/images/esriLogoSm.gif" />
<ags:Map id="map"
crosshairVisible="true"
logoVisible="true"
scaleBarVisible="true"
zoomSliderVisible="true">
<ags:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
</ags:Map>
<s:HGroup width="100%"
gap="10">
<s:CheckBox id="chboxCrosshair"
selected="true"
label="Print crosshair" />
<s:CheckBox id="chboxLogo"
selected="true"
label="Print logo" />
<s:CheckBox id="chboxScale"
selected="true"
label="Print scale bar" />
<s:CheckBox id="chboxSlider"
selected="true"
label="Print zoom slider" />
<s:CheckBox id="chboxCR"
selected="true"
label="Add Copyright" />
<s:Button label="Print to png"
click="onPrintClick(event)" />
</s:HGroup>
</s:Application>
... View more
02-20-2012
02:06 AM
|
0
|
0
|
274
|
|
POST
|
Service has some limits: Min. Scale: 15000
Max. Scale: 0 May be you need to configure services before use it? My sample works, because 1 - i know extent where features are 2 - map scale where features visible API help. http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/FeatureLayer.html#mode Good luck.
... View more
02-17-2012
01:33 PM
|
0
|
0
|
1016
|
|
POST
|
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags">
<!-- Flex SDK v.4.5.1 -->
<!-- ArcGIS API v.2.5 -->
<s:layout>
<s:VerticalLayout paddingBottom="10"
paddingTop="10"
paddingLeft="10"
paddingRight="10" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.events.GraphicEvent;
import com.esri.ags.events.LayerEvent;
import mx.utils.StringUtil;
protected function onGraphicAdd(event:GraphicEvent):void
{
var gr:Graphic = event.graphic;
var attr:Object = gr.attributes;
gr.toolTip = StringUtil.substitute("Address: {0}\nOwner Name: {1}", attr.Address, attr.own_name);
gr.addEventListener(MouseEvent.MOUSE_OVER, function():void{
gr.symbol = overSymbol;
});
gr.addEventListener(MouseEvent.MOUSE_OUT, function():void{
gr.symbol = normalSymbol;
});
}
]]>
</fx:Script>
<fx:Declarations>
<esri:SimpleFillSymbol id="normalSymbol"
color="0xFF0000"
alpha="0.8"
style="cross">
<esri:outline>
<esri:SimpleLineSymbol color="0xFF0000"
width="2" />
</esri:outline>
</esri:SimpleFillSymbol>
<esri:SimpleFillSymbol id="overSymbol"
color="0x0000FF"
alpha="0.8"
style="cross">
<esri:outline>
<esri:SimpleLineSymbol color="0x0000FF"
width="4" />
</esri:outline>
</esri:SimpleFillSymbol>
</fx:Declarations>
<esri:Map id="map">
<esri:extent>
<esri:Extent xmax="-111.834"
xmin="-111.837"
ymax="40.6316"
ymin="40.6312">
<esri:SpatialReference>
<esri:wkid>4326</esri:wkid>
</esri:SpatialReference>
</esri:Extent>
</esri:extent>
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/>
<esri:FeatureLayer mode="snapshot"
id="fLayer"
graphicAdd="onGraphicAdd(event)"
outFields="[Address,own_name,own_addr]"
symbol="{normalSymbol}"
url="http://gis.chcity.org/CHwebMaps/rest/services/CityData/Parcels_SD/MapServer/0" />
</esri:Map>
</s:Application>
... View more
02-17-2012
10:51 AM
|
0
|
0
|
1016
|
|
POST
|
Bob, thx - we noticed (it does not matter in this context). We talk about FeatureLayer (not FeatureService) and its properties. Yes you can create FeatureLayer based on MapService - http://help.arcgis.com/en/webapi/flex/samples/index.html?sample=FeatureLayerBasedOnMapServerLayer
... View more
02-17-2012
10:03 AM
|
0
|
0
|
1016
|
|
POST
|
http://help.arcgis.com/en/webapi/flex/apiref/com/esri/ags/layers/FeatureLayer.html#definitionExpression ... The definition expression limits the FeatureLayer to a subset of the available features in the map service layer. It is similar to the definition query for a layer in ArcMap. ... servise you are using has no "STATE_NAME" field definitionExpression="STATE_NAME='North Carolina'" - never returns data definitionExpression="OBJECTID<100" - returns features where OBJECTID smaller when 100 http://gis.chcity.org/CHwebMaps/rest/services/CityData/Parcels_SD/MapServer/0 Fields: OBJECTID (Type: esriFieldTypeOID, Alias: OBJECTID) Sidwell10 (Type: esriFieldTypeString, Alias: Sidwell10, Length: 10 ) Sidwell14 (Type: esriFieldTypeString, Alias: Sidwell14, Length: 14 ) tax_dist (Type: esriFieldTypeString, Alias: tax_dist, Length: 3 ) Address (Type: esriFieldTypeString, Alias: Address, Length: 25 ) Acreage (Type: esriFieldTypeDouble, Alias: Acreage) Adjusted (Type: esriFieldTypeSmallInteger, Alias: Adjusted, Domain: Coded Values: [0: No], [1: Yes] ) Shape (Type: esriFieldTypeGeometry, Alias: Shape) own_name (Type: esriFieldTypeString, Alias: Owner Name, Length: 30 ) own_name_c (Type: esriFieldTypeString, Alias: Additional Owner Name, Length: 30 ) own_addr (Type: esriFieldTypeString, Alias: Owner Address, Length: 25 ) own_cityst (Type: esriFieldTypeString, Alias: Owner City/State, Length: 22 ) own_zip (Type: esriFieldTypeString, Alias: Owner Zip, Length: 5 ) own_zip_fo (Type: esriFieldTypeString, Alias: Owner Zip4, Length: 4 ) Shape_Area (Type: esriFieldTypeDouble, Alias: Area) :confused: P.S. finally your question is not correct - feature layer is added, but it has no features in its graphicProvider, because you did not test def.query before use it
... View more
02-16-2012
09:57 PM
|
0
|
0
|
1016
|
|
POST
|
Server version "10.01" returns description for each folder: Folder Louisville in ESRI sample server {"currentVersion" : "10.01", "folders" : [], "services" : [ {"name" : "Louisville/LOJIC_LandRecords_Louisville", "type" : "MapServer"}, {"name" : "Louisville/LOJIC_PublicSafety_Louisville", "type" : "MapServer"} ] } Here is help All you need is experience with parsing server response in JSON format. 🙂
... View more
02-15-2012
04:17 AM
|
0
|
0
|
671
|
|
POST
|
Try this sample. <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ags"> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.SpatialReference; import com.esri.ags.Units; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; import com.esri.ags.geometry.Polygon; import com.esri.ags.geometry.Polyline; import com.esri.ags.utils.GeometryUtil; import mx.utils.StringUtil; private const sr:SpatialReference = new SpatialReference(4326); protected function onCreatePolyline(event:MouseEvent):void { addMessage("Create polyline clicked"); var pts:Array = new Array(); for (var i:int; i < 10; i++) // add 10 random points to path { var pt:MapPoint = new MapPoint(Math.random()*10000, Math.random()*10000, sr); pts.push(pt); } var pl:Polyline = new Polyline(new Array(pts), sr); var lengths:Array = GeometryUtil.geodesicLengths(new Array(pl), Units.KILOMETERS); if (lengths != null && lengths.length > 0) { addMessage(StringUtil.substitute("polyline created with length {0} km", lengths[0])); } addGraphic(pl); } protected function onCreatePolygon(event:MouseEvent):void { addMessage("Create polygon clicked"); var pts:Array = new Array(); for (var i:int; i < 10; i++) // add 10 random points to ring { var pt:MapPoint = new MapPoint(Math.random()*10000, Math.random()*10000, sr); pts.push(pt); } var pg:Polygon = new Polygon(new Array(pts), sr); var areas:Array = GeometryUtil.geodesicAreas(new Array(pg), Units.SQUARE_KILOMETERS); if (areas != null && areas.length > 0) { addMessage(StringUtil.substitute("polygon created with area {0} km²", Math.abs(areas[0]))); } addGraphic(pg); } private function addMessage(message:String):void { log.text = StringUtil.substitute("> > > {0}\n{1}", message, log.text); } private function addGraphic(geometry:Geometry):void { var gr:Graphic = new Graphic(geometry); grLayer.clear(); var grId:String = grLayer.add(gr); addMessage(StringUtil.substitute("graphic added with id='{0}'", grId)); map.initialExtent = geometry.extent; map.zoomToInitialExtent(); } ]]> </fx:Script> <s:layout> <s:VerticalLayout gap="10" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10"/> </s:layout> <s:Button label="Create polyline" click="onCreatePolyline(event)"/> <s:Button label="Create polygon" click="onCreatePolygon(event)"/> <s:TextArea id="log" width="100%" height="100%"/> <esri:Map id="map" zoomSliderVisible="false" minHeight="200" width="100%"> <esri:GraphicsLayer id="grLayer" /> </esri:Map> </s:Application>
... View more
02-13-2012
10:25 PM
|
0
|
0
|
566
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 12-03-2017 11:25 PM | |
| 1 | 10-06-2016 11:49 PM | |
| 2 | 06-07-2012 01:38 AM | |
| 1 | 06-03-2012 09:42 PM |
| Online Status |
Offline
|
| Date Last Visited |
11-11-2020
02:23 AM
|