public static Dictionary <string, object> OSMData(List <OSMPoint> OSM, string File, string featureType, List <string> subTypes) { // Convert the string featureType to the FeatureType wayFT. if (featureType != way) { wayFT = ElkLib.ByName(featureType); way = wayFT.ToString(); } selectedTypes = subTypes; if (selectedTypes.Count == 0) { selectedTypes = new List <string> { "*" }; } way = wayFT.ToString().ToLower(); // Gather the ways List <OSMWay> collectedWays = ElkLib.GatherWays(way, selectedTypes.ToArray(), File, OSM); Point[][][] wayPoints = new Point[collectedWays.Count][][]; List <List <string> > tags = new List <List <string> >(); try { // Convert all of the OSMPoints to Dynamo Points for (int i = 0; i < collectedWays.Count; i++) { OSMWay currentWay = collectedWays[i]; wayPoints[i] = new Point[currentWay.Points.Count][]; for (int j = 0; j < currentWay.Points.Count; j++) { try { List <LINE.Geometry.Point3d> pointList = currentWay.Points[j]; wayPoints[i][j] = new Point[pointList.Count]; for (int k = 0; k < pointList.Count; k++) { LINE.Geometry.Point3d pt = pointList[k]; try { wayPoints[i][j][k] = Point.ByCoordinates(pt.X, pt.Y, pt.Z); } catch { wayPoints[i][j][k] = Point.Origin(); } } } catch { } } // Collect all of the tags List <string> tagList = new List <string>(); foreach (KeyValuePair <string, string> tag in currentWay.Tags) { try { string currentTag = tag.Key + ":" + tag.Value; tagList.Add(currentTag); } catch { } } tags.Add(tagList); } } catch { } return(new Dictionary <string, object> { { "Points", wayPoints }, { "Keys", tags } }); }
public static Dictionary <string, List <string> > SubFeatures(string feature, List <int> subIndexes) { #region Get Available Types List <string> availableTemp = new List <string>(); ElkLib.FeatureType featureType = ElkLib.ByName(feature); switch (featureType) { case ElkLib.FeatureType.Aerialway: availableTemp = Elk.Common.ElkLib.Aerialways; break; case ElkLib.FeatureType.Aeroway: availableTemp = Elk.Common.ElkLib.Aeroways; break; case ElkLib.FeatureType.Amenity: availableTemp = Elk.Common.ElkLib.Amenities; break; case ElkLib.FeatureType.Barrier: availableTemp = Elk.Common.ElkLib.Barrier; break; case ElkLib.FeatureType.Boundary: availableTemp = Elk.Common.ElkLib.Boundary; break; case ElkLib.FeatureType.Building: availableTemp = Elk.Common.ElkLib.Building; break; case ElkLib.FeatureType.Craft: availableTemp = Elk.Common.ElkLib.Craft; break; case ElkLib.FeatureType.Emergency: availableTemp = Elk.Common.ElkLib.Emergency; break; case ElkLib.FeatureType.Geological: availableTemp = Elk.Common.ElkLib.Geological; break; case ElkLib.FeatureType.Highway: availableTemp = Elk.Common.ElkLib.Highway; break; case ElkLib.FeatureType.Historic: availableTemp = Elk.Common.ElkLib.Historic; break; case ElkLib.FeatureType.Landuse: availableTemp = Elk.Common.ElkLib.Landuse; break; case ElkLib.FeatureType.Leisure: availableTemp = Elk.Common.ElkLib.Leisure; break; case ElkLib.FeatureType.ManMade: availableTemp = Elk.Common.ElkLib.ManMade; break; case ElkLib.FeatureType.Military: availableTemp = Elk.Common.ElkLib.Military; break; case ElkLib.FeatureType.Natural: availableTemp = Elk.Common.ElkLib.Natural; break; case ElkLib.FeatureType.Office: availableTemp = Elk.Common.ElkLib.Office; break; case ElkLib.FeatureType.Place: availableTemp = Elk.Common.ElkLib.Places; break; case ElkLib.FeatureType.Power: availableTemp = Elk.Common.ElkLib.Power; break; case ElkLib.FeatureType.PublicTransport: availableTemp = Elk.Common.ElkLib.PublicTransport; break; case ElkLib.FeatureType.Railway: availableTemp = Elk.Common.ElkLib.Railway; break; case ElkLib.FeatureType.Route: availableTemp = Elk.Common.ElkLib.Route; break; case ElkLib.FeatureType.Shop: availableTemp = Elk.Common.ElkLib.Shop; break; case ElkLib.FeatureType.Sport: availableTemp = Elk.Common.ElkLib.Sport; break; case ElkLib.FeatureType.Tourism: availableTemp = Elk.Common.ElkLib.Toursim; break; case ElkLib.FeatureType.Waterway: availableTemp = Elk.Common.ElkLib.Waterway; break; } ; availableTemp.Sort(); #endregion List <string> selected = new List <string>(); if (subIndexes == null || subIndexes.Count == 0) { selected = new List <string> { "*" }; } else { foreach (int index in subIndexes) { try { selected.Add(availableTemp[index]); } catch { } } } return(new Dictionary <string, List <string> > { { "all", availableTemp }, { "selected", selected } }); }