|
POST
|
I still do not understand your plan to put a symbol to other symbol info container... As I understand, each Symbol (Picture, Text, Composite ...) is tied to the Map and can not exist without it. During symbol initialization, graphic geometry is converted to screen coordinates and the convertion result is the place where symbol must be shown in FLEX application -> in your case TextSymbol has no own Graphic -> has no own Geometry -> as a result can not be shown. Maybe I'm wrong, but to me it all seems so. In API reference for com.esri.ags.symbols.InfoSymbol a lot of links to samples. Based on samples: simple app - add graphic to map with one text attribute ("myTitle"). This attribute is shown in InfoSymbol's container as Label. Application: <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags"
xmlns:s="library://ns.adobe.com/flex/spark">
<!-- Adobe SDK 4.6.0 -->
<!-- ArcGIS API for FLEX 3.0 -->
<s:layout>
<s:VerticalLayout horizontalAlign="center" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.events.GraphicEvent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.symbols.InfoSymbol;
/**
* Listen graphic add handler
*/
protected function onGraphicAdd(event:GraphicEvent):void
{
var infoSymbol:InfoSymbol = new InfoSymbol();
infoSymbol.infoRenderer = new ClassFactory(MyInfoSymbolRenderer);
event.graphic.symbol = infoSymbol;
}
/**
* Listen button click handler
*/
protected function onAddClick(event:MouseEvent):void
{
var point:MapPoint = new MapPoint(Math.random()*10000000, Math.random()*10000000, map.spatialReference);
var graphic:Graphic = new Graphic(point, null, {myTitle: txtTitle.text, x: point.x, y: point.y});
gLayer.add(graphic);
}
]]>
</fx:Script>
<s:HGroup width="100%"
horizontalAlign="center"
verticalAlign="middle">
<s:Label text="Set title for new graphic:" />
<s:TextInput id="txtTitle"
width="250"/>
<s:Button label="Add graphic"
click="onAddClick(event)" />
</s:HGroup>
<esri:Map id="map">
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
<esri:GraphicsLayer id="gLayer"
autoMoveGraphicsToTop="true"
graphicAdd="onGraphicAdd(event)"/>
</esri:Map>
</s:Application> and info renderer 'MyInfoSymbolRenderer.mxml' for InfoSymbol: <?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true"
dataChange="onDataChange(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.utils.StringUtil;
protected function onDataChange(event:FlexEvent):void
{
if (data.myTitle && data.myTitle.toString().length > 0)
{
lblTitle.text = data.myTitle;
}
else if (data.x && data.x.toString().length > 0 && data.y && data.y.toString().length > 0)
{
lblTitle.text = StringUtil.substitute("X: {0} - Y: {1}", data.x, data.y);
}
}
]]>
</fx:Script>
<s:Label id="lblTitle"
fontFamily="Helvetica"
fontSize="14"
fontStyle="italic"
fontWeight="bold"
backgroundColor="0xFFFF00"/>
</s:ItemRenderer>
Good luck.
... View more
10-09-2012
11:18 PM
|
0
|
0
|
588
|
|
POST
|
text parameter The text string to display. or textAttribute property The string representing the attribute of the graphic that should populate the "text" content. or textFunction property The text function allows for the text of the text symbol to be dynamically picked - for example based on attributes or position of the graphic. Sorry, but I did not found any part of code, what initialize text in your sample 😞 - only format and angle Plus some ActionScript code that initializes text, something like this: var txtFormat:TextFormat = new TextFormat(textFont.selectedItem.font, numTextSize.value, cpText.selectedColor, bold.selected, italic.selected, underline.selected); textSymbol.textFormat = txtFormat; textSymbol.angle = numTextRotation.value; graphic.symbol = textSymbol; // graphic obj takes geometry as a parameter
... View more
10-09-2012
10:15 AM
|
0
|
0
|
588
|
|
POST
|
WebMercatorUtil Projects coordinates between 4326 (GCS_WGS_1984) and 102100/3857 (WGS_1984_Web_Mercator_Auxiliary_Sphere) coordinate systems. Useful when showing data defined in geographic coordinates on top of a Web Mercator based map. and your polyline is in spatial reference with WKID=102113 :confused:
... View more
10-08-2012
11:57 PM
|
0
|
0
|
583
|
|
POST
|
Similar task Layer is loaded and shown to client: LayerEvent.LOAD = added to map LayerEvent.UPDATE_START = recieved new data, starting update layer LayerEvent.UPDATE_END = layer updated protected function onLayerUpdateStart(event:LayerEvent):void { // remove this listener if you need it only 1 time - first layer update // yourLayer.removeEventListener(LayerEvent.UPDATE_START, onLayerUpdateStart); trace(">>> Layer id='" + event.layer.id + "' update started"); cursorManager.setBusyCursor(); // or show any own busy dialog } protected function onLayerUpdateEnd(event:LayerEvent):void { // remove this listener if you need it only 1 time - first layer update // yourLayer.removeEventListener(LayerEvent.UPDATE_END, onLayerUpdateEnd); trace(">>> Layer id='" + event.layer.id + "' update ended"); cursorManager.removeBusyCursor(); } right?
... View more
10-08-2012
10:17 PM
|
0
|
0
|
438
|
|
POST
|
Similar question. Smthing like this: private function addFeaturelayerToMap():void { [INDENT]var featureLayer:FeatureLayer = new FeatureLayer(); featureLayer.id = "myFeatureLayer"; featureLayer.name = "My fLayer"; featureLayer.url = "http://my host/arcgis/rest/services/my folder/my service/FeatureServer/0"; featureLayer.disableClientCaching = true; featureLayer.mode = FeatureLayer.MODE_ON_DEMAND; // TODO add other needed parameters and event listeners here featureLayer.addEventListener(LayerEvent.LOAD, onFeatureLayerLoad); featureLayer.addEventListener(LayerEvent.LOAD_ERROR, onFeatureLayerLoadError); map.addLayer(featureLayer); // add layer to map[/INDENT] } protected function onFeatureLayerLoad(event:LayerEvent):void { [INDENT]featureLayer.removeEventListener(LayerEvent.LOAD, onFeatureLayerLoad); featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, onFeatureLayerLoadError); trace(">>> Layer with id: '" + event.layer.id + "' loaded.");[/INDENT] } protected function onFeatureLayerLoadError(event:LayerEvent):void { [INDENT]featureLayer.removeEventListener(LayerEvent.LOAD, onFeatureLayerLoad); featureLayer.removeEventListener(LayerEvent.LOAD_ERROR, onFeatureLayerLoadError); trace(">>> Layer with id: '" + event.layer.id + "' not loaded.");[/INDENT] } com.esri.ags.Map addLayer()
... View more
10-08-2012
10:06 PM
|
0
|
0
|
419
|
|
POST
|
From reference: The textAttribute is the string representing the attribute of the graphic that should populate the "text" content. ... I want the TextSymbol to display custom text for each map point... use textFunction public function myTextFunction(point:MapPoint, attributes:Object):String
{
var label:String = StringUtil.substitute("X: {0}, Y:{1}", point.x, point.y);
return label;
}
...
<esri:TextSymbol background="true"
backgroundColor="0xFFFFFF"
border="true"
...
textFunction="myTextFunction">
<flash:TextFormat bold="true" size="16"/>
</esri:TextSymbol>
... View more
10-03-2012
07:32 AM
|
0
|
0
|
570
|
|
POST
|
Try to set FeatureLayer.disableClientCaching = true. Also, search this forum for 'disableClientCaching': [ATTACH=CONFIG]18062[/ATTACH]
... View more
09-27-2012
10:38 PM
|
0
|
0
|
842
|
|
POST
|
Tyler, this is extended ESRI 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:esri="http://www.esri.com/2008/ags"
initialize="application1_initializeHandler(event)"
pageTitle="Using the Editor component">
<!--
This sample shows you how to use the editor component.
-->
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace esri "http://www.esri.com/2008/ags";
esri|InfoWindow
{
background-color: #FFFFFF;
border-thickness: 2;
}
</fx:Style>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_initializeHandler(event:FlexEvent):void
{
myEditor.featureLayers = [ incidentsAreas ];
}
protected function myToolActivityChange(event:Event):void
{
myEditor.editTool.deactivate();
incidentsAreas.clearSelection();
myEditor.featureLayers = boxMayToolActive.selected ? null : [ incidentsAreas ];
myEditor.map = boxMayToolActive.selected ? null : myMap;
}
]]>
</fx:Script>
<fx:Declarations>
<esri:GeometryService id="myGeometryService" url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"/>
</fx:Declarations>
<s:HGroup width="100%"
horizontalAlign="center">
<s:CheckBox label="My Tool is Active"
id="boxMayToolActive"
selected="false"
fontSize="18"
change="myToolActivityChange(event)"/>
</s:HGroup>
<esri:Map id="myMap" wrapAround180="true">
<esri:extent>
<esri:Extent id="socal"
xmin="-13471000" ymin="3834000" xmax="-12878000" ymax="4124000">
<esri:SpatialReference wkid="102100"/>
</esri:Extent>
</esri:extent>
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
<esri:FeatureLayer id="incidentsAreas"
mode="snapshot"
outFields="[data_security,description]"
url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/operations/FeatureServer/2"/>
</esri:Map>
<esri:Editor id="myEditor"
width="100%" height="200"
geometryService="{myGeometryService}"
map="{myMap}"/>
</s:Application>
... View more
09-27-2012
03:52 AM
|
0
|
0
|
706
|
|
POST
|
From API reference com.esri.ags.layers.supportClasses.LOD Levels of detail (LOD) for a TiledMapServiceLayer. Each LOD corresponds to a map at a given scale or resolution. Both resolution and scale are required fields. LOD's are automatically sorted based on scale, so setting level isn't necessary. ... here is 20 levels. Switching Basemaps (with updating LODs based on choosen base map) Forum search is also helpful, set "LOD" as keyword and press "Search Now"
... View more
09-27-2012
02:41 AM
|
0
|
0
|
286
|
|
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">
<!-- Flex SDK v. 4.6 -->
<!-- ArcGIS API for Flex 3.0 -->
<!--
Run
- Execute Query (Button click)
- Query result shown in grid as they are in database
- double click on datagrid row
- popup shown, where all coded value codes replaced && feature type Id's replaced
-->
<s:layout>
<s:VerticalLayout horizontalAlign="center" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.layers.supportClasses.CodedValue;
import com.esri.ags.layers.supportClasses.CodedValueDomain;
import com.esri.ags.layers.supportClasses.FeatureType;
import com.esri.ags.layers.supportClasses.Field;
import com.esri.ags.layers.supportClasses.LayerDetails;
import com.esri.ags.tasks.DetailsTask;
import com.esri.ags.tasks.QueryTask;
import com.esri.ags.tasks.supportClasses.Query;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.AsyncResponder;
import mx.rpc.Fault;
[Bindable]
private var queryResults:ArrayCollection;
private var layerDetails:LayerDetails;
protected function onSubmit(event:MouseEvent):void
{
layerDetails = null; // reset
var detailsTask:DetailsTask = new DetailsTask(serviceUrl.text);
detailsTask.getDetails(layerId.value, new AsyncResponder(onDetailsResult, onDetailsFault));
}
protected function onDetailsResult(detailsTaskResult:LayerDetails, token:Object = null):void
{
layerDetails = detailsTaskResult;
executeQuery();
}
protected function onDetailsFault(fault:Fault, token:Object = null):void
{
Alert.show("Can't get given service details!");
trace(fault.message.toString());
}
private function executeQuery():void
{
queryResults = new ArrayCollection(); // reset
var queryTask:QueryTask = new QueryTask(serviceUrl.text + "/" + layerId.value);
var query:Query = new Query();
query.returnGeometry = false;
query.outFields = new Array("*");
query.where = "1=1";
queryTask.execute(query, new AsyncResponder(onQueryResult, onQueryFault));
}
protected function onQueryResult(featureSet:FeatureSet, token:Object = null):void
{
queryResults = new ArrayCollection(featureSet.attributes);
}
protected function onQueryFault(fault:Fault, token:Object = null):void
{
Alert.show("Query faults!");
trace(fault.message.toString());
}
private function getDomainsByFieldName(fieldName:String):ArrayCollection
{
if (layerDetails != null && fieldName != null)
{
var layerFields:Array = layerDetails.fields;
for each (var field:Field in layerFields)
{
if (field.name == fieldName)
{
if (field.domain is CodedValueDomain)
{
var codedValues:Array = CodedValueDomain(field.domain).codedValues;
var domains:ArrayCollection = new ArrayCollection();
for each(var codedValue:CodedValue in codedValues)
{
domains.addItem(codedValue);
}
return domains;
}
}
}
}
return null;
}
protected function onGridDoubleClick(event:MouseEvent):void
{
if (resultsGrid.selectedItem != null)
{
var selectedFeature:Object = resultsGrid.selectedItem;
// get domains for each field, if it is replace it's code to name
for each (var field:Field in layerDetails.fields)
{
var domains:ArrayCollection = getDomainsByFieldName(field.name);
if (domains)
{
for each (var codedValue:CodedValue in domains)
{
if (codedValue.code == selectedFeature[field.name])
{
selectedFeature[field.name] = codedValue.name;
break;
}
}
}
}
for each (var featureType:FeatureType in layerDetails.types)
{
// for each feature type replace its type ID to type name
if (selectedFeature[layerDetails.typeIdField] == featureType.id)
{
selectedFeature[layerDetails.typeIdField] = featureType.name;
}
// loop through featureType.domains and replace codes to names
for (var domainField:Object in featureType.domains)
{
if (featureType.domains[domainField] is CodedValueDomain)
{
var codedValueDomain:CodedValueDomain = featureType.domains[domainField] as CodedValueDomain;
for each (var codedValue1:CodedValue in codedValueDomain.codedValues)
{
if (selectedFeature[domainField] == codedValue1.code)
{
selectedFeature[domainField] = codedValue1.name;
break;
}
}
}
}
}
showPopup(selectedFeature);
}
}
private function showPopup(attributes:Object):void
{
var message:String = "";
for each (var field:Field in layerDetails.fields)
{
message = message + field.alias + ": " + attributes[field.name] + "\n";
}
Alert.show(message);
}
]]>
</fx:Script>
<s:HGroup width="100%">
<s:Label text="service url: " />
<s:TextInput id="serviceUrl"
width="100%"
text="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/operations/FeatureServer/" />
</s:HGroup>
<s:HGroup width="100%">
<s:Label text="layer Id: " />
<s:NumericStepper id="layerId"
value="0"
minimum="0"
maximum="999" />
</s:HGroup>
<s:Button click="onSubmit(event)"
label="Execute Query" />
<s:DataGrid dataProvider="{queryResults}"
sortableColumns="false"
id="resultsGrid"
width="100%"
height="100%"
doubleClick="onGridDoubleClick(event)"
doubleClickEnabled="true"/>
</s:Application>
... View more
09-24-2012
04:04 AM
|
0
|
0
|
861
|
|
POST
|
1 :confused: from your code if(drawingLine == true)
if (drawingLine) 2 :confused: from your code this.view.xCordTxt.text.toString()
this.view.xCordTxt.text
this.view.xCordTxt.text.length > 0 or this.view.xCordTxt.text != ""
3 :confused: from your code // create new point based on input coordinates and Map spatial reference
var mapPoint:MapPoint = new MapPoint(Number(this.view.xCordTxt.text), Number(this.view.yCordTxt.text), baseWidget.map.spatialReference);
// create new point based on existing point with NOT Map spatial reference
var webMapPoint:MapPoint = WebMercatorUtil.geographicToWebMercator(mapPoint) as MapPoint;
if (drawingPoint == true)
{
mapPointArray.length = 0;
mapPointArray.push(webMapPoint);
// center at no one knows where,
// because map spatial ref. not equals with center point spatial ref.
baseWidget.map.centerAt(webMapPoint);
createPoint(false);
} 4 a good way to understand what's happening in this pile of code - listening events, debug code, trace some info to console private function addGraphicsLayer():void
{
_graphicsLayer = new GraphicsLayer();
_graphicsLayer.name = "DrawGraphics";
_graphicsLayer.id = "DrawGraphicsID";
// Fires after layer properties for the layer are successfully populated.
_graphicsLayer.addEventListener(LayerEvent.LOAD, onLayerLoad);
// Fires when a graphic is added to the GraphicsLayer.
_graphicsLayer.addEventListener(GraphicEvent.GRAPHIC_ADD, onGraphicAdd);
// Fires when all graphics in the GraphicsLayer are cleared.
_graphicsLayer.addEventListener(GraphicsLayerEvent.GRAPHICS_CLEAR, onGraphicClear);
...
}
protected function onLayerLoad(event:LayerEvent):void
{
// now you can work with layer
trace("Layer with id='" + event.layer.id + "' added to map");
}
protected function onGraphicAdd(event:GraphicEvent):void
{
// now you can work with added graphic - zoom to it, change symbol, tooltip, attributes ...
var gr:Graphic = event.graphic;
trace("Graphic with id='" + gr.id + "' just added");
}
protected function onGraphicClear(event:GraphicsLayerEvent):void
{
// now graphics layer is empty
trace("Graphics layer is cleared");
} Good luck.
... View more
09-24-2012
12:49 AM
|
0
|
0
|
286
|
|
POST
|
working with table/layer - DetailsTask; working with MapService - AllDetails ... ... anywhere your target must be LayerDetails - it holds all information about layer/table types (each type is FeatureType) and layer/table fields (each field is Filed - > with public property domain). You can access to layer details before executing query, after sending query request, instead query ... smthing like this: public function getDomainsByFieldName(fieldName:String, layerDetails:LayerDetails):ArrayCollection
{
if (layerDetails != null && fieldName != null)
{
var layerFields:Array = layerDetails.fields;
for each (var field:Field in layerFields)
{
if (field.name == fieldName)
{
if (field.domain is CodedValueDomain)
{
var codedValues:Array = CodedValueDomain(field.domain).codedValues;
var domains:ArrayCollection = new ArrayCollection();
for each(var codedValue:CodedValue in codedValues)
{
// filter domains here if needed
domains.addItem(codedValue);
}
return domains;
}
/*
else if (field.domain is RangeDomain) {}
*/
}
}
}
return new ArrayCollection(); // empty list
}
... View more
09-23-2012
11:05 PM
|
0
|
0
|
861
|
|
POST
|
in this case objid must be Bindable parameter: // in script tag
[Bindable]
private var objid:Number;
// in some function when object id changed
objid = somevalue;
// in declaration tag
<esri:Query id="query" outFields=" " returnGeometry="false" where="OBJECTID={objid}"/> or reset where clause each time object id changed: // in some function when object id changed
query.where = StringUtil.substitute("OBJECTID={0}", somevalue);
// in declaration tag
<esri:Query id="query" outFields=" " returnGeometry="false" /> P.S. create new topic or find existing topic using forum search to discuss about query. This discussion is about "Communication between widgets" Good luck
... View more
09-18-2012
03:09 AM
|
0
|
0
|
1194
|
|
POST
|
Here was similar task. And here is other way to do it.
... View more
09-18-2012
12:32 AM
|
0
|
0
|
1194
|
|
POST
|
Try this: <?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">
<!-- Adobe SDK 4.6 -->
<!-- ArcGIS API 3.0 -->
<s:layout>
<s:HorizontalLayout gap="10"
paddingLeft="20"
paddingTop="20"
paddingBottom="20"
paddingRight="20"/>
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.events.LayerEvent;
import com.esri.ags.geometry.Extent;
import com.esri.ags.layers.KMLLayer;
import com.esri.ags.layers.Layer;
import com.esri.ags.utils.JSONUtil;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
protected function onCheckBoxChange(event:Event):void
{
trace(">>>\nBox state chnaged");
var box:CheckBox = CheckBox(event.target);
var url:String = box.name;
if (box.selected)
{
// create new kml layer here
var kmlLayer:KMLLayer = new KMLLayer(url);
kmlLayer.addEventListener(LayerEvent.LOAD, onLayerLoad);
map.addLayer(kmlLayer); // add to map
}
else
{
var layers:ArrayCollection = ArrayCollection(map.layers);
// find and remove unchecked layer in map layers collection
for each (var layer:Layer in layers)
{
if (layer is KMLLayer && KMLLayer(layer).url == url)
{
map.removeLayer(layer);
break;
}
}
}
trace(">>>\nMap layers count = " + map.layerIds.length);
}
protected function onLayerLoad(event:LayerEvent):void
{
trace(">>>\nLayer loaded");
var layer:KMLLayer = event.target as KMLLayer;
layer.removeEventListener(LayerEvent.LOAD, onLayerLoad);
// get kml layer details
var httpService:HTTPService = new HTTPService();
httpService.url = layer.serviceURL + "?url=" + layer.url;
httpService.method = URLRequestMethod.POST;
httpService.showBusyCursor = true;
httpService.resultFormat = "text";
httpService.concurrency = "last";
httpService.addEventListener(ResultEvent.RESULT, httpServiceResultFunction);
//TODO add fault listener here if needed
httpService.send();
}
protected function httpServiceResultFunction(event:ResultEvent):void
{
if (event.result)
{
try
{
var resultObj:Object = JSONUtil.decode(event.result.toString());
// get layer extent and zoom to it
if (resultObj.hasOwnProperty("lookAtExtent"))
{
var lookAtExtent:Object = resultObj.lookAtExtent;
map.initialExtent = Extent.fromJSON(lookAtExtent);
map.zoomToInitialExtent();
}
}
catch (error:Error)
{
trace(">>>\nError parsing result");
}
}
}
]]>
</fx:Script>
<s:VGroup height="100%"
width="200">
<s:CheckBox label="2009 splash pads"
name="http://www.mapottawa.ca/data/2009_splash_pads.points.kmz"
selected="false"
change="onCheckBoxChange(event)"/>
<s:CheckBox label="2010 museums"
name="http://www.mapottawa.ca/data/2010_museums.points.kmz"
selected="false"
change="onCheckBoxChange(event)"/>
</s:VGroup>
<esri:Map id="map">
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/>
</esri:Map>
</s:Application>
... View more
09-18-2012
12:24 AM
|
0
|
0
|
615
|
| 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
|