I cant figure out how can i specify line barrier in setPolylineBarriersByRef of NAServerRouteParams class,
i know it takes INAServerLocations but i cant figure out how to provide line in propertySet
IPropertySet line = new PropertySet();
line.setProperty("paths", polyline); // cant figure out this
IPropertySetArray pPropSets = new PropertySetArray();
pPropSets.add(line );
//Setting the Server Property Sets for the Network Analysis
INAServerPropertySets propSets = new NAServerPropertySets();
propSets .setPropertySetsByRef(pPropSets);
INAServerLocations2 serverLoc = (INAServerLocations2) propSets ;
return serverLoc;
Solved! Go to Solution.
Hi Haider,
The GISClient API you are referring to is deprecated since version 10.0. If you still have to use it, the following snippet may help:
protected INAServerPropertySets GetPolylineBarriers(int numberOfLocations2Load, double[] candidates)
{
/* Assumes that candidates is an array of doubles
* which contains 3 vertices (6 double numbers) per polyline-
*
* 3 * (x, y)
*/
INAServerPropertySets res = new NAServerPropertySetsClass();
res.PropertySets = new PropertySetArrayClass();
for (int i = 0; i < numberOfLocations2Load; i++)
{
res.PropertySets.Add(new PropertySetClass());
res.PropertySets.get_Element(i).SetProperty("Name", "Polyline " + (i + 1));
IPolyline pl = new PolylineClass();
IPointCollection pcol = pl as IPointCollection;
object missing = Type.Missing;
for (int j = 0; j < 3; j++)
{
IPoint pnt = new PointClass();
int xIndex = i * 6 + j * 2;
pnt.X = candidates[xIndex];
pnt.Y = candidates[xIndex + 1];
pcol.AddPoint(pnt, ref missing, ref missing);
}
res.PropertySets.get_Element(i).SetProperty("Shape", pl);
}
return res;
}
On the other hand, if you are using a newer version of ArcGIS Server I strongly recommend using REST API instead:
Hi Haider,
The GISClient API you are referring to is deprecated since version 10.0. If you still have to use it, the following snippet may help:
protected INAServerPropertySets GetPolylineBarriers(int numberOfLocations2Load, double[] candidates)
{
/* Assumes that candidates is an array of doubles
* which contains 3 vertices (6 double numbers) per polyline-
*
* 3 * (x, y)
*/
INAServerPropertySets res = new NAServerPropertySetsClass();
res.PropertySets = new PropertySetArrayClass();
for (int i = 0; i < numberOfLocations2Load; i++)
{
res.PropertySets.Add(new PropertySetClass());
res.PropertySets.get_Element(i).SetProperty("Name", "Polyline " + (i + 1));
IPolyline pl = new PolylineClass();
IPointCollection pcol = pl as IPointCollection;
object missing = Type.Missing;
for (int j = 0; j < 3; j++)
{
IPoint pnt = new PointClass();
int xIndex = i * 6 + j * 2;
pnt.X = candidates[xIndex];
pnt.Y = candidates[xIndex + 1];
pcol.AddPoint(pnt, ref missing, ref missing);
}
res.PropertySets.get_Element(i).SetProperty("Shape", pl);
}
return res;
}
On the other hand, if you are using a newer version of ArcGIS Server I strongly recommend using REST API instead:
Thanks that worked, i.e. line.setProperty("Shape", polyline);
Actually our requirement is to get multiple alternative route , so our solution was to use SOE to avoid multiple call to server i.e. in the SOE find the route and provide that route as barrier for next solve route.