public static GOPOIKind PoiKindToEnum(string kind) { try { GOPOIKind parsed_enum = (GOPOIKind)System.Enum.Parse(typeof(GOPOIKind), kind.ToLower()); return(parsed_enum); } catch { return(GOPOIKind.UNDEFINED); } }
public GOPOIRendering GetRenderingForPoiKind(GOPOIKind kind) { foreach (GOPOIRendering r in renderingOptions) { if (r.kind == kind) { return(r); } } return(null); }
private void ParsePOILayerToList(List <GOParsedLayer> list, VectorTile vt, GOPOILayer layer) { string[] lyrs = tile.GetPoisStrings().Split(','); string kindKey = tile.GetPoisKindKey(); foreach (string l in lyrs) { VectorTileLayer lyr = vt.GetLayer(l); if (lyr != null) { int featureCount = lyr.FeatureCount(); if (featureCount == 0) { continue; } GOParsedLayer pl = new GOParsedLayer(); pl.name = lyr.Name; pl.poiLayer = layer; pl.goFeatures = new List <GOFeature> (); for (int i = 0; i < featureCount; i++) { VectorTileFeature vtf = lyr.GetFeature(i); IDictionary properties = vtf.GetProperties(); GOPOIKind kind = GOEnumUtils.PoiKindToEnum((string)properties[kindKey]); GOPOIRendering rendering = layer.GetRenderingForPoiKind(kind); if (kind == GOPOIKind.UNDEFINED || rendering == null) { continue; } List <List <LatLng> > geomWgs = vtf.GeometryAsWgs84((ulong)goTile.zoomLevel, (ulong)goTile.tileCoordinates.x, (ulong)goTile.tileCoordinates.y, 0); GOFeature gf = new GOFeature(); gf.poiKind = kind; gf.goTile = goTile; gf.properties = properties; gf.attributes = GOFeature.PropertiesToAttributes(gf.properties); gf.goFeatureType = vtf.GOFeatureType(geomWgs); if (gf.goFeatureType == GOFeatureType.Undefined) { continue; } gf.poiLayer = layer; gf.poiRendering = rendering; gf.featureIndex = (Int64)i + vt.LayerNames().IndexOf(lyr.Name); gf = tile.EditFeatureData(gf); gf.ConvertAttributes(); if (geomWgs.Count > 0 && gf.goFeatureType == GOFeatureType.Point) { gf.geometry = geomWgs [0]; gf.ConvertPOIGeometries(); AddFatureToList(gf, pl.goFeatures); } } list.Add(pl); } } }