private static void InitScript(StringBuilder sb, string qgisPath, MapExportModel.Extent extent)
        {
            sb.AppendLine("from qgis.core import QgsApplication, QgsMapRenderer, QgsMapLayerRegistry, QgsLayerTreeGroup, QgsVectorLayer, QgsRectangle, QgsComposition, QgsComposerMap, QgsComposerLegend, QgsComposerScaleBar, QgsComposerLabel, QgsComposerLegendStyle, QgsMarkerSymbolV2, QgsSymbolV2, QgsRendererRangeV2, QgsGraduatedSymbolRendererV2");
            sb.AppendLine("from PyQt4.QtCore import QSize, QRectF");
            sb.AppendLine("from PyQt4.QtGui import QImage, QPainter, QColor, QFont");
            sb.AppendLine("");

            //Function for getting time stamp of layer id
            sb.AppendLine("def getTimeStamp(uStr):");
            sb.AppendLine("\treturn str(uStr)[len(uStr) - 11:]");
            sb.AppendLine("");

            sb.AppendLine("qgs = QgsApplication([], False)");
            sb.AppendFormat("qgs.setPrefixPath(\"{0}\", True)", qgisPath.Replace(@"\", @"\\"));
            sb.AppendLine("");
            sb.AppendLine("qgs.initQgis()");
            sb.AppendLine("");

            sb.AppendLine("instance = QgsMapLayerRegistry.instance()");
            sb.AppendFormat("mapRectangle = QgsRectangle({0}, {1}, {2}, {3})", extent.Left.ToString().Replace(",", "."), extent.Bottom.ToString().Replace(",", "."), extent.Right.ToString().Replace(",", "."), extent.Top.ToString().Replace(",", "."));
            sb.AppendLine("");
            //sb.AppendLine("widthInKm = mapRectangle.width() / 1000");
            //sb.AppendLine("heightInKm = mapRectangle.height() / 1000");
            //Height and width in meter (SWEREF99) * 1000 equals mm / scale

            sb.AppendLine("legendLayers = QgsLayerTreeGroup()");
        }
        public static string GetLayerGeojson(
            IUserContext currentUser,
            int layerId,
            CoordinateSystemId coordinateSystemId,
            IDictionary <string, object> parameters,
            out string layerName,
            MapExportModel.Extent mapExtent)
        {
            string geoJson = null;

            layerName = null;

            if (layerId == null)
            {
                return(null);
            }

            if (layerId >= CustomLayersStartLayerId)
            {
                var viewManager = new WfsLayersViewManager(currentUser, SessionHandler.MySettings);

                var layer = viewManager.GetWfsLayers().FirstOrDefault(l => l.Id == layerId);
                layerName = layer.Name;

                if (layer.IsFile)
                {
                    geoJson = JsonConvert.SerializeObject(MySettingsManager.GetMapDataFeatureCollection(currentUser, layer.GeometryName, coordinateSystemId));
                }
                else
                {
                    var url = WFSFilterUtils.GetResultingUrl(layer.ServerUrl, layer.TypeName, "1.1.0", layer.Filter, "application%2Fjson", null, string.Format("EPSG%3A{0}", coordinateSystemId.Srid()));

                    var request = WebRequest.Create(url);
                    request.Credentials = CredentialCache.DefaultCredentials;
                    // Get the response.

                    using (var response = request.GetResponse())
                    {
                        using (var dataStream = response.GetResponseStream())
                        {
                            using (var reader = new StreamReader(dataStream))
                            {
                                geoJson = reader.ReadToEnd();
                                reader.Close();
                            }
                        }
                        response.Close();
                    }
                }
            }
            else
            {
                switch (layerId)
                {
                case SpeciesRichnessGridLayerId:
                    var taxonGridCalculator = new TaxonGridCalculator(currentUser, SessionHandler.MySettings);
                    geoJson = taxonGridCalculator.GetTaxonGridAsGeoJson();

                    var attribute = (string)(parameters.ContainsKey("attribute") ? parameters["attribute"] : null);

                    layerName = Resource.ResultViewSpeciesRichnessGridMapLayerName;
                    if (attribute != null)
                    {
                        switch (attribute.ToLower().Trim())
                        {
                        case "speciescount":
                            layerName = Resource.ResultDownloadSpeciesRichnessGridMap;
                            break;

                        case "observationcount":
                            layerName = Resource.ResultDownloadObservationsGridMap;
                            break;
                        }
                    }

                    break;

                case SpeciesObservationGridMapLayerId:
                case EooConvexHullLayerId:
                case EooConcaveHullLayerId:
                    var speciesObservationGridCalculator = new SpeciesObservationGridCalculator(currentUser, SessionHandler.MySettings);
                    if (layerId == SpeciesObservationGridMapLayerId)
                    {
                        geoJson   = speciesObservationGridCalculator.GetSpeciesObservationGridAsGeoJson();
                        layerName = Resource.ResultViewSpeciesObservationGridMap;
                    }
                    else
                    {
                        var alphaValue     = (int?)(parameters.ContainsKey("alphaValue") ? parameters["alphaValue"] : null);
                        var useCenterPoint = (bool?)(parameters.ContainsKey("useCenterPoint") ? parameters["useCenterPoint"] : null);
                        geoJson = speciesObservationGridCalculator.GetSpeciesObservationAOOEOOAsGeoJson(
                            layerId == EooConcaveHullLayerId ? alphaValue : 0,
                            useCenterPoint ?? true);
                        layerName = Resource.MapEOOLayer;
                    }

                    break;

                case ObservationsLayerId:     //Observations
                case SpeciesObservationClusterPointMapLayerId:
                    SpeciesObservationResultCalculator resultCalculator = null;
                    try
                    {
                        var displayCoordinateSystemId = SessionHandler.MySettings.Presentation.Map.PresentationCoordinateSystemId;
                        resultCalculator = new SpeciesObservationResultCalculator(currentUser, SessionHandler.MySettings);
                        geoJson          = resultCalculator.GetSpeciesObservationsAsGeoJson(displayCoordinateSystemId);
                        layerName        = Resource.MapLayerObservations;
                    }
                    catch (Exception)
                    {
                    }
                    break;
                }
            }

            return(geoJson);
        }