Showing posts with label ArcGIS. Show all posts
Showing posts with label ArcGIS. Show all posts

Tuesday, July 27, 2010

Advantages and Disadvantages of the Flex ArcGIS Template

Available for download from the ESRI Flex web site is the Flex template. The template and widgets are free. This provides out of the box basic and advanced Web ArcGIS functionality using Flex. From zoom, and pan to address locator and query builder; there are a range of different widgets provided by ESRI and their user community. Build a Flex based ArcGIS web site in minutes. Well maybe.

The biggest two main advantages of the template are fast development and the built in animation. The basic template comes with a core set of widgets or modules which are easily loaded into the template framework. Additional widgets are available for download. The framework has some nice built in animation when widgets are loaded and unloaded.

From a development perspective, modules are easy to build and integrate into the framework. So what then are the disadvantages? These are worth considering not only in deciding whether to use the template but also in planning and estimating. Often the time to develop a site using the template is longer than expected. So let us list out these disadvantages:

- Inflexible UI - you will quickly recognise sites built from the template. Both the look and feel and animation are a give away. It is not easy to customise the UI to make it unique.

- The need to customise widgets - widgets have usually been built for a specific purpose, particularly the more advanced widgets such as query builder. Often clients have their own specific needs, You may thus find yourself pulling the widget apart. This may prove more challenging than it appears. What seem simple modifications may actually take considerably longer. In some case it may be quicker to simply rebuild the widget from scratch.

- Locked into ArcGIS - Not really a disadvantage, but worth noting; the template is only for use with ArcGIS. It is not a template which can be used to hook into other spatial servers. It would be nice if you could easily use this for interacting with other spatial servers, notably Geoserver or Mapserver. But it is an ESRI solution, so why allow access to the ‘competition’.

Overall, the template is a nice solution for clients who have limited budgets and want standard functionality. But, more complexity and a custom look and feel will both be challenging and time consuming. Step back and look closely at client needs. If the requirement is very specific, think about building the application using the ArcGIS Flex API.

Wednesday, July 1, 2009

ArcGIS and the IPhone

I took the following from James Fee's blog:

Q: Will ESRI support the iPhone?

Yes, we will support the iPhone as a mobile platform to get maps from ArcGIS Server and do queries and edits on data from ArcGIS Server. We plan on releasing an application for the iPhone later this year and then adding additional capability as part of our 9.4 release. In addition developers can build their own solutions for the iPhone using the REST APIs available from ArcGIS Server.

I didn't think this would be too far away.

On another mobile note. I'm in line for beta testing the Nokia OVI API. Its an interesting process. Nokia have a limited number of beta slots. Once considered you then need to explain the mobile application you plan to build and whether you can get it done in 2 months.

Tuesday, June 9, 2009

Modest Maps and ArcGIS


I've been looking into hooking the Modest maps Flex client to ArcGIS. Just finished a basic demo for United maps.

I edited a dataprovider.as posted on the modest maps discussion board. Here is the code:

package com.modestmaps.mapproviders
{
import com.modestmaps.core.Coordinate;
import com.modestmaps.mapproviders.AbstractMapProvider;
import com.modestmaps.mapproviders.IMapProvider;
import com.modestmaps.geo.LinearProjection;
import com.modestmaps.geo.Transformation;

public class EsriMapProvider extends AbstractMapProvider implements IMapProvider
{
public function EsriMapProvider(minZoom:int=MIN_ZOOM, maxZoom:int=MAX_ZOOM)
{
super(minZoom, Math.min(20, maxZoom));

var t:Transformation = new Transformation(0.3183098861837907, 0, 1, 0, -0.3183098861837907, 0.5);
__projection = new LinearProjection(0, t);

}

override public function sourceCoordinate(coord:Coordinate):Coordinate
{
var tilesWide:int = Math.pow(2, coord.zoom+1);

var wrappedColumn:Number = coord.column % tilesWide;

while (wrappedColumn < 0)
{
wrappedColumn += tilesWide;
}

return new Coordinate(coord.row, wrappedColumn, coord.zoom);
}

public function toString():String
{
return "ESRI";
}

public function getTileUrls(coord:Coordinate):Array
{
//return [ "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/tile/" + getZoomString(sourceCoordinate(coord)) ];
return [ "http://..../ArcGIS/rest/services/MUC_Basemap/MapServer/tile/" + getZoomString(sourceCoordinate(coord)) ];
//return [ "http://..../umapserver/mapdijits/config/proxy.ashx?http://..../ArcGIS/rest/services/MUC_Basemap/MapServer/tile/" + getZoomString(sourceCoordinate(coord)) ];
}

protected function getZoomString( coord : Coordinate ) : String
{
var sourceCoord:Coordinate = sourceCoordinate(coord)
return (sourceCoord.zoom) + "/" + (sourceCoord.row) + "/" +(sourceCoord.column) ;
}

}
}