Beispiel #1
0
        public string ClickOnMarker(Map map, GeoCollection <object> args)
        {
            int times = 0;

            if (Session["ClickTimes"] == null)
            {
                times = 1;
            }
            else
            {
                times = (int)Session["ClickTimes"];
                times++;
            }
            Session["ClickTimes"] = times;

            int iconIndex = times % 4 + 1;

            if (iconIndex >= 4)
            {
                iconIndex -= 4;
            }

            string iconPath = Url.Content("~/Content/images/") + markerIcons[iconIndex];
            InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];

            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageVirtualPath = iconPath;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageOffsetX     = -10.5f;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageOffsetY     = 25f;

            return(String.Format("You have clicked the marker <span style='color:red;font-weight:bolder;font-size:15;'>{0}</span> time(s)", times));
        }
Beispiel #2
0
        //
        // GET: /AddAClickEvent/

        public ActionResult AddAClickEvent()
        {
            Map map = new Map("Map1",
                              new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage),
                              510);

            map.MapBackground = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
            map.CurrentExtent = new RectangleShape(-125, 72, 50, -46);
            map.MapUnit       = GeographyUnit.DecimalDegree;

            WorldMapKitWmsWebOverlay worldMapKitOverlay = new WorldMapKitWmsWebOverlay("WorldMapKitOverlay");

            map.CustomOverlays.Add(worldMapKitOverlay);

            InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("MarkerOverlay");

            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageWidth   = 21;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageHeight  = 25;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageOffsetX = -10.5f;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.ImageOffsetY = -25f;
            markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            map.CustomOverlays.Add(markerOverlay);

            return(View(map));
        }
Beispiel #3
0
        private void AddVehicleHistoryMarkerOverlay(Map Map1)
        {
            InMemoryMarkerOverlay vehicleHistoryOverlay = new InMemoryMarkerOverlay("VehicleHistoryOverlay", new FeatureSourceColumn[] {
                new FeatureSourceColumn("IsCurrentPosition"),
                new FeatureSourceColumn("Speed"),
                new FeatureSourceColumn("DateTime"),
                new FeatureSourceColumn("Longitude"),
                new FeatureSourceColumn("Latitude"),
                new FeatureSourceColumn("VehicleName"),
                new FeatureSourceColumn("Duration")
            });

            vehicleHistoryOverlay.IsBaseOverlay = false;
            vehicleHistoryOverlay.IsVisibleInOverlaySwitcher = false;
            Map1.CustomOverlays.Add(vehicleHistoryOverlay);

            StringBuilder popupHtml = new StringBuilder("<table>");

            popupHtml.Append("<tr><td colspan='2' class='vehicleName'>[#VehicleName#]</td></tr>");
            popupHtml.Append("<tr><td colspan='2'><div class='hrLine'></div></td></tr>");
            popupHtml.Append("<tr class='vehicleTxt'><td>Longitude:</td><td>[#Longitude#]</td></tr>");
            popupHtml.Append("<tr class='vehicleTxt'><td>Latitude:</td><td>[#Latitude#]</td></tr>");
            popupHtml.Append("<tr class='vehicleTxt'><td>Speed:</td><td>[#Speed#]</td></tr>");
            popupHtml.Append("<tr class='vehicleTxt'><td>Time</td><td>[#DateTime#]</td></tr>");
            popupHtml.Append("</table>");

            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage          = new WebImage("images/trail point.png", 6, 6, -3, -3);
            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderWidth = 1;
            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderColor = GeoColor.StandardColors.Gray;
            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = popupHtml.ToString();
            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.AutoSize    = true;
            vehicleHistoryOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
        }
Beispiel #4
0
        private void Form_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit       = GeographyUnit.DecimalDegree;
            winformsMap1.CurrentExtent = new RectangleShape(-155.733, 95.60, 104.42, -81.9);

            WorldMapKitWmsDesktopOverlay worldMapKitOverlay = new WorldMapKitWmsDesktopOverlay();

            winformsMap1.Overlays.Add(worldMapKitOverlay);

            InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay();

            markerOverlay.MapControl = winformsMap1;
            markerOverlay.Columns.Add(new FeatureSourceColumn("Name"));
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.Image       = Properties.Resources.AQUA;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.Width       = 20;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.Height      = 34;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.YOffset     = -17;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.ToolTipText = "This is [#Name#].";
            markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            winformsMap1.Overlays.Add("MarkerOverlay", markerOverlay);

            Feature newFeature = new Feature(-95.2806, 38.9554);

            newFeature.ColumnValues.Add("Name", "Lawrence");

            markerOverlay.FeatureSource.BeginTransaction();
            markerOverlay.FeatureSource.AddFeature(newFeature);
            markerOverlay.FeatureSource.CommitTransaction();

            winformsMap1.Refresh();
        }
Beispiel #5
0
        public void ClickEvent(Map map, GeoCollection <object> args)
        {
            PointShape position = new PointShape(Convert.ToDouble(args[0]), Convert.ToDouble(args[1]));

            InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];

            markerOverlay.FeatureSource.InternalFeatures.Add("marker" + Guid.NewGuid().ToString(), new Feature(position));
        }
Beispiel #6
0
 public void ShowRotation(Map map, GeoCollection <object> args)
 {
     if (null != map)
     {
         InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];
         markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.RotationAngle += 30;
     }
 }
Beispiel #7
0
        private void UpdateVehiclesToOverlays(Map Map1, Dictionary <int, Vehicle> vehicles)
        {
            InMemoryMarkerOverlay vehiclesMarkerOverlay  = Map1.CustomOverlays["VehicleOverlay"] as InMemoryMarkerOverlay;
            InMemoryMarkerOverlay vehiclesHistoryOverlay = Map1.CustomOverlays["VehicleHistoryOverlay"] as InMemoryMarkerOverlay;

            // Clear old vehicle's old positions
            vehiclesMarkerOverlay.FeatureSource.InternalFeatures.Clear();
            vehiclesHistoryOverlay.FeatureSource.InternalFeatures.Clear();

            foreach (var currentVehicle in vehicles)
            {
                foreach (var item in vehicles)
                {
                    Vehicle vehicle        = item.Value;
                    Feature vehicleFeature = new Feature(new PointShape(vehicle.Location.Longitude, vehicle.Location.Latitude));
                    vehicleFeature.ColumnValues.Add("VehicleId", vehicle.Id.ToString());

                    vehiclesMarkerOverlay.FeatureSource.Open();
                    vehiclesMarkerOverlay.FeatureSource.BeginTransaction();
                    vehiclesMarkerOverlay.FeatureSource.AddFeature(vehicleFeature);
                    vehiclesMarkerOverlay.FeatureSource.CommitTransaction();
                }

                // Add the vheicle's location histories
                foreach (Location historyLocation in currentVehicle.Value.HistoryLocations.Take(5))
                {
                    Feature breadcrumbFeature = new Feature(historyLocation.GetLocationPointShape().GetWellKnownBinary(), currentVehicle.Value.VehicleName + historyLocation.DateTime.ToString());
                    breadcrumbFeature.ColumnValues["DateTime"]          = historyLocation.DateTime.ToString();
                    breadcrumbFeature.ColumnValues["IsCurrentPosition"] = "IsNotCurrentPosition";
                    breadcrumbFeature.ColumnValues["Speed"]             = historyLocation.Speed.ToString(CultureInfo.InvariantCulture);

                    Location projectedLocation = ProjectLocation(historyLocation);
                    breadcrumbFeature.ColumnValues["Longitude"]   = projectedLocation.Longitude.ToString("N6", CultureInfo.InvariantCulture);
                    breadcrumbFeature.ColumnValues["Latitude"]    = projectedLocation.Latitude.ToString("N6", CultureInfo.InvariantCulture);
                    breadcrumbFeature.ColumnValues["VehicleName"] = currentVehicle.Value.VehicleName;
                    breadcrumbFeature.ColumnValues["Duration"]    = currentVehicle.Value.SpeedDuration.ToString(CultureInfo.InvariantCulture);
                    vehiclesHistoryOverlay.FeatureSource.InternalFeatures.Add(breadcrumbFeature);
                }

                // Add the vehicle's latest position
                Feature latestPositionFeature = new Feature(currentVehicle.Value.Location.GetLocationPointShape().GetWellKnownBinary(), currentVehicle.Value.VehicleName);
                latestPositionFeature.ColumnValues["DateTime"]          = currentVehicle.Value.Location.DateTime.ToString();
                latestPositionFeature.ColumnValues["IsCurrentPosition"] = "IsCurrentPosition";
                latestPositionFeature.ColumnValues["Speed"]             = currentVehicle.Value.Location.Speed.ToString(CultureInfo.InvariantCulture);

                Location projectedCurrentLocation = ProjectLocation(currentVehicle.Value.Location);
                latestPositionFeature.ColumnValues["Longitude"]   = projectedCurrentLocation.Longitude.ToString("N6", CultureInfo.InvariantCulture);
                latestPositionFeature.ColumnValues["Latitude"]    = projectedCurrentLocation.Latitude.ToString("N6", CultureInfo.InvariantCulture);
                latestPositionFeature.ColumnValues["VehicleName"] = currentVehicle.Value.VehicleName;
                latestPositionFeature.ColumnValues["Duration"]    = currentVehicle.Value.SpeedDuration.ToString(CultureInfo.InvariantCulture);
                vehiclesHistoryOverlay.FeatureSource.InternalFeatures.Add(latestPositionFeature);

                vehiclesHistoryOverlay.FeatureSource.Close();
            }
        }
Beispiel #8
0
        public void RefreshMarkerOverlay(Map map, Collection <object> args)
        {
            InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];

            for (int i = 0; i < markerOverlay.FeatureSource.InternalFeatures.Count; i++)
            {
                PointShape point = markerOverlay.FeatureSource.InternalFeatures[i].GetShape() as PointShape;

                double lon = point.X + new Random(Guid.NewGuid().GetHashCode()).Next(-12, 20) / 5000.0;
                double lat = point.Y + new Random(Guid.NewGuid().GetHashCode()).Next(-11, 26) / 5000.0;

                markerOverlay.FeatureSource.InternalFeatures[i] = new Feature(lon, lat);
            }
        }
Beispiel #9
0
 public void AddMarker(Map map, GeoCollection <object> args)
 {
     if (map != null)
     {
         string markerId = args["markerId"].ToString();
         double x        = Convert.ToDouble(args["x"]);
         double y        = Convert.ToDouble(args["y"]);
         InMemoryMarkerOverlay markerOverlay = map.CustomOverlays["MarkerOverlay"] as InMemoryMarkerOverlay;
         if (!markerOverlay.FeatureSource.InternalFeatures.Contains(markerId))
         {
             // Add a new feature as a marker
             markerOverlay.FeatureSource.InternalFeatures.Add(markerId, new Feature(x, y));
         }
     }
 }
Beispiel #10
0
        public void Clear(Map map, GeoCollection <object> args)
        {
            // Clear search poi markers.
            map.MarkerOverlay.FeatureSource.Clear();

            // Clear the service area.
            LayerOverlay         queriedOverlay   = map.CustomOverlays["QueriedOverlay"] as LayerOverlay;
            InMemoryFeatureLayer serviceAreaLayer = queriedOverlay.Layers["serviceArea"] as InMemoryFeatureLayer;

            serviceAreaLayer.InternalFeatures.Clear();

            // Clear the plot point.
            InMemoryMarkerOverlay plotPointOverlay = map.CustomOverlays["DrawnPointOverlay"] as InMemoryMarkerOverlay;

            plotPointOverlay.FeatureSource.Clear();
        }
Beispiel #11
0
        public string ConvertCoordinate(Map map, GeoCollection <object> args)
        {
            string result = string.Empty;
            float  screenX, screenY;
            string x = args[0].ToString();
            string y = args[1].ToString();

            if (float.TryParse(x, out screenX) && float.TryParse(y, out screenY))
            {
                PointShape            worldCoordinate       = map.ToWorldCoordinate(screenX, screenY);
                InMemoryMarkerOverlay inMemoryMarkerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["InMemoryMarkerOverlay"];
                inMemoryMarkerOverlay.FeatureSource.InternalFeatures.Clear();
                inMemoryMarkerOverlay.FeatureSource.InternalFeatures.Add("marker", new Feature(worldCoordinate));

                result = string.Format("The converted world coordinates are <br/><span style='color:red;font-size:13;font-weight:bolder;'>({0}, {1})</span>.", worldCoordinate.X, worldCoordinate.Y);
            }
            return(result);
        }
Beispiel #12
0
        public void ShowTextCheckBox(Map map, GeoCollection <object> args)
        {
            if (null != map)
            {
                string checkedString = args[0] as string;

                InMemoryMarkerOverlay markerOverlay = (InMemoryMarkerOverlay)map.CustomOverlays["MarkerOverlay"];
                if ("checked" == checkedString)
                {
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.Text        = "Vehicle";
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.FontColor   = GeoColor.StandardColors.OrangeRed;
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.FontStyle   = new GeoFont("Arail Black", 12, DrawingFontStyles.Bold);
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.TextOffsetX = 7F;
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.TextOffsetY = 3F;
                }
                else
                {
                    markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage.Text = string.Empty;
                }
            }
        }
Beispiel #13
0
        private void AddVehicleMarkerOverlay(Map Map1)
        {
            DateTime currentTime = GetAdjustedCurrentDateTime();
            Dictionary <int, Vehicle> vehicles = GetVehicles(Map1, currentTime);

            ValueMarkerStyle valueStyle = new ValueMarkerStyle("VehicleId");

            foreach (var item in vehicles)
            {
                Vehicle          vehicle = item.Value;
                WebImage         currentPositionImage = new WebImage(vehicle.VehicleIconVirtualPath);
                PointMarkerStyle currentPositionStyle = new PointMarkerStyle(currentPositionImage);
                MarkerValueItem  currentPositionItem  = new MarkerValueItem(vehicle.Id.ToString(), (MarkerStyle)currentPositionStyle);
                valueStyle.ValueItems.Add(currentPositionItem);
            }

            InMemoryMarkerOverlay vehiclesMarkerOverlay = new InMemoryMarkerOverlay("VehicleOverlay", new FeatureSourceColumn[] { new FeatureSourceColumn("VehicleId") });

            vehiclesMarkerOverlay.IsVisibleInOverlaySwitcher = false;
            vehiclesMarkerOverlay.IsBaseOverlay = false;
            vehiclesMarkerOverlay.ZoomLevelSet.ZoomLevel01.CustomMarkerStyle   = valueStyle;
            vehiclesMarkerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            Map1.CustomOverlays.Add(vehiclesMarkerOverlay);
        }
Beispiel #14
0
        public JsonResult SearchSimilarSites(Map map, GeoCollection <object> args)
        {
            string[]   searchPointLatLng = args["searchPoint"].ToString().Split(',');
            PointShape searchPoint       = new PointShape(double.Parse(searchPointLatLng[0]), double.Parse(searchPointLatLng[1]));

            object  result            = new { status = "2", message = "out of restriction area" };
            Feature searchAreaFeature = null;

            // check if the clicked point is in valid area (Frisco City)
            FeatureLayer friscoLayer = (FeatureLayer)(map.CustomOverlays["RestrictOverlay"] as LayerOverlay).Layers["RestrictLayer"];

            friscoLayer.Open();
            if (friscoLayer.QueryTools.GetFeaturesContaining(searchPoint, ReturningColumnsType.NoColumns).Any())
            {
                // Calculate the service area/buffer area and display it on the map
                if (args["searchMode"].ToString().Equals("serviceArea", StringComparison.InvariantCultureIgnoreCase))
                {
                    int drivingTimeInMinutes = Convert.ToInt32(args["driveTime"].ToString(), CultureInfo.InvariantCulture);
                    searchAreaFeature = new Feature(routingEngine.GenerateServiceArea(searchPoint, new TimeSpan(0, drivingTimeInMinutes, 0), 100, GeographyUnit.Meter));
                }
                else
                {
                    DistanceUnit distanceUnit   = args["distanceUnit"].ToString() == "Mile" ? DistanceUnit.Mile : DistanceUnit.Kilometer;
                    double       distanceBuffer = Convert.ToDouble(args["distanceBuffer"].ToString(), CultureInfo.InvariantCulture);
                    searchAreaFeature = new Feature(searchPoint.Buffer(distanceBuffer, 40, GeographyUnit.Meter, distanceUnit));
                }

                // Search the Pois in calculated service area and display them on map
                LayerOverlay          poiOverlay = map.CustomOverlays["PoisOverlay"] as LayerOverlay;
                ShapeFileFeatureLayer poiLayer   = (ShapeFileFeatureLayer)(poiOverlay.Layers[args["category"].ToString()]);
                poiLayer.Open();
                Collection <Feature> featuresInServiceArea = poiLayer.QueryTools.GetFeaturesWithin(searchAreaFeature.GetShape(), ReturningColumnsType.AllColumns);
                List <Feature>       filteredQueryFeatures = FilterFeaturesByQueryConfiguration(featuresInServiceArea, args["category"].ToString(), args["subCategory"].ToString().Replace(">~", ">="));

                if (filteredQueryFeatures.Any())
                {
                    Collection <object> returnedJsonFeatures = new Collection <object>();
                    foreach (Feature feature in filteredQueryFeatures)
                    {
                        PointShape latlng = feature.GetShape() as PointShape;
                        returnedJsonFeatures.Add(new { name = feature.ColumnValues["NAME"], point = string.Format("{0},{1}", latlng.Y, latlng.X) });
                    }

                    // Add into plot marker overlay.
                    InMemoryMarkerOverlay drawPointOverlay = map.CustomOverlays["DrawnPointOverlay"] as InMemoryMarkerOverlay;
                    drawPointOverlay.FeatureSource.Clear();
                    drawPointOverlay.FeatureSource.BeginTransaction();
                    drawPointOverlay.FeatureSource.AddFeature(new Feature(searchPoint));
                    drawPointOverlay.FeatureSource.CommitTransaction();

                    // Add into markerOvelray.
                    AddMarkers(filteredQueryFeatures, map);

                    Feature wgs84Feature = new Feature(searchAreaFeature.GetShape());
                    // Add into queried overlay.
                    LayerOverlay         queriedOverlay   = map.CustomOverlays["QueriedOverlay"] as LayerOverlay;
                    InMemoryFeatureLayer serviceAreaLayer = (queriedOverlay.Layers["serviceArea"] as InMemoryFeatureLayer);
                    serviceAreaLayer.Open();
                    serviceAreaLayer.InternalFeatures.Clear();
                    serviceAreaLayer.InternalFeatures.Add(wgs84Feature);

                    result = new { status = "0", message = "has features", features = returnedJsonFeatures };
                }
                else
                {
                    result = new { status = "1", message = "without features" };
                }
            }

            // return the search poi feature information to the client.
            return(Json(result));
        }
Beispiel #15
0
        private void AddOverlays(Map map)
        {
            // Background Overlay
            WorldStreetsAndImageryOverlay worldMapKitRoadOverlay = new WorldStreetsAndImageryOverlay("World Map Kit Road");

            worldMapKitRoadOverlay.Projection = WorldStreetsAndImageryProjection.SphericalMercator;
            worldMapKitRoadOverlay.MapType    = WorldStreetsAndImageryMapType.Road;
            map.CustomOverlays.Add(worldMapKitRoadOverlay);

            WorldStreetsAndImageryOverlay worldMapKitAerialOverlay = new WorldStreetsAndImageryOverlay("World Map Kit Aerial");

            worldMapKitAerialOverlay.Projection = WorldStreetsAndImageryProjection.SphericalMercator;
            worldMapKitAerialOverlay.MapType    = WorldStreetsAndImageryMapType.Aerial;
            map.CustomOverlays.Add(worldMapKitAerialOverlay);

            WorldStreetsAndImageryOverlay worldMapKitAerialWithLabelsOverlay = new WorldStreetsAndImageryOverlay("World Map Kit Aerial With Labels");

            worldMapKitAerialWithLabelsOverlay.Projection = WorldStreetsAndImageryProjection.SphericalMercator;
            worldMapKitAerialWithLabelsOverlay.MapType    = WorldStreetsAndImageryMapType.AerialWithLabels;
            map.CustomOverlays.Add(worldMapKitAerialWithLabelsOverlay);

            OpenStreetMapOverlay openStreetMapOverlay = new OpenStreetMapOverlay("Open Street Map");

            map.CustomOverlays.Add(openStreetMapOverlay);

            LayerOverlay poisOverlay = new LayerOverlay("PoisOverlay");

            poisOverlay.IsBaseOverlay = false;
            poisOverlay.IsVisibleInOverlaySwitcher = false;
            map.CustomOverlays.Add(poisOverlay);

            // POI Overlay
            Proj4Projection proj4 = new Proj4Projection();

            proj4.InternalProjectionParametersString = Proj4Projection.GetDecimalDegreesParametersString();
            proj4.ExternalProjectionParametersString = Proj4Projection.GetSphericalMercatorParametersString();
            proj4.Open();

            ShapeFileFeatureLayer hotelsLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["HotelsShapeFilePathName"]), GeoFileReadWriteMode.Read);

            hotelsLayer.Name         = Resource.Hotels;
            hotelsLayer.Transparency = 120f;
            hotelsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle   = new PointStyle(new GeoImage(Server.MapPath("~/Content/Images/Hotel.png")));
            hotelsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            hotelsLayer.FeatureSource.Projection = proj4;
            poisOverlay.Layers.Add(hotelsLayer.Name, hotelsLayer);

            ShapeFileFeatureLayer medicalFacilitesLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["MedicalFacilitiesShapeFilePathName"]), GeoFileReadWriteMode.Read);

            medicalFacilitesLayer.Name         = Resource.MedicalFacilites;
            medicalFacilitesLayer.Transparency = 120f;
            medicalFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle   = new PointStyle(new GeoImage(Server.MapPath("~/Content/Images/DrugStore.png")));
            medicalFacilitesLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            medicalFacilitesLayer.FeatureSource.Projection = proj4;
            poisOverlay.Layers.Add(medicalFacilitesLayer.Name, medicalFacilitesLayer);

            ShapeFileFeatureLayer publicFacilitesLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["PublicFacilitiesShapeFilePathName"]), GeoFileReadWriteMode.Read);

            publicFacilitesLayer.Name         = Resource.PublicFacilites;
            publicFacilitesLayer.Transparency = 120f;
            publicFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle   = new PointStyle(new GeoImage(Server.MapPath("~/Content/Images/public_facility.png")));
            publicFacilitesLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            publicFacilitesLayer.FeatureSource.Projection = proj4;
            poisOverlay.Layers.Add(publicFacilitesLayer.Name, publicFacilitesLayer);

            ShapeFileFeatureLayer restaurantsLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["RestaurantsShapeFilePathName"]), GeoFileReadWriteMode.Read);

            restaurantsLayer.Name         = Resource.Restaurants;
            restaurantsLayer.Transparency = 120f;
            restaurantsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle   = new PointStyle(new GeoImage(Server.MapPath("~/Content/Images/restaurant.png")));
            restaurantsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            restaurantsLayer.FeatureSource.Projection = proj4;
            poisOverlay.Layers.Add(restaurantsLayer.Name, restaurantsLayer);

            ShapeFileFeatureLayer schoolsLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["SchoolsShapeFilePathName"]), GeoFileReadWriteMode.Read);

            schoolsLayer.Name         = Resource.Schools;
            schoolsLayer.Transparency = 120f;
            schoolsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle   = new PointStyle(new GeoImage(Server.MapPath("~/Content/Images/school.png")));
            schoolsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            schoolsLayer.FeatureSource.Projection = proj4;
            poisOverlay.Layers.Add(schoolsLayer.Name, schoolsLayer);

            // Restrict area Overlay
            ShapeFileFeatureLayer restrictedLayer = new ShapeFileFeatureLayer(Server.MapPath(ConfigurationManager.AppSettings["RestrictedShapeFilePathName"]), GeoFileReadWriteMode.Read);
            AreaStyle             extentStyle     = new AreaStyle();

            extentStyle.CustomAreaStyles.Add(new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Transparent))
            {
                OutlinePen = new GeoPen(GeoColor.SimpleColors.White, 5.5f)
            });
            extentStyle.CustomAreaStyles.Add(new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Transparent))
            {
                OutlinePen = new GeoPen(GeoColor.SimpleColors.Red, 1.5f)
                {
                    DashStyle = LineDashStyle.Dash
                }
            });
            restrictedLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle    = extentStyle;
            restrictedLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            restrictedLayer.FeatureSource.Projection = proj4;

            LayerOverlay restrictOverlay = new LayerOverlay("RestrictOverlay");

            restrictOverlay.IsBaseOverlay = false;
            restrictOverlay.IsVisibleInOverlaySwitcher = false;
            restrictOverlay.Layers.Add("RestrictLayer", restrictedLayer);
            map.CustomOverlays.Add(restrictOverlay);

            // Queried Service Overlay
            InMemoryFeatureLayer serviceAreaLayer    = new InMemoryFeatureLayer();
            GeoColor             serviceAreaGeoColor = new GeoColor(120, GeoColor.FromHtml("#1749c9"));

            serviceAreaLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle    = AreaStyles.CreateSimpleAreaStyle(serviceAreaGeoColor, GeoColor.FromHtml("#fefec1"), 2, LineDashStyle.Solid);
            serviceAreaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            InMemoryFeatureLayer highlightFeatureLayer = new InMemoryFeatureLayer();

            highlightFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay queriedOverlay = new LayerOverlay("QueriedOverlay");

            queriedOverlay.IsBaseOverlay = false;
            queriedOverlay.IsVisibleInOverlaySwitcher = false;
            queriedOverlay.TileType = TileType.SingleTile;
            queriedOverlay.Layers.Add("highlightFeatureLayer", highlightFeatureLayer);
            queriedOverlay.Layers.Add("serviceArea", serviceAreaLayer);
            map.CustomOverlays.Add(queriedOverlay);

            // Marker Overlay
            map.MarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage = new WebImage("/Content/Images/selectedHalo.png")
            {
                ImageOffsetX = -16, ImageOffsetY = -16
            };
            map.MarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderWidth = 1;
            map.MarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.BorderColor = GeoColor.StandardColors.Gray;
            map.MarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.AutoSize    = true;
            map.MarkerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            map.MarkerOverlay.IsVisibleInOverlaySwitcher = false;

            // Drawn Point
            InMemoryMarkerOverlay markerOverlay = new InMemoryMarkerOverlay("DrawnPointOverlay");

            markerOverlay.FeatureSource.InternalFeatures.Add(new Feature(new PointShape(-10776838.0796536, 3912346.50475619)));     // Add a initial point for query
            markerOverlay.IsVisibleInOverlaySwitcher = false;
            markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.WebImage = new WebImage("/Content/Images/drawPoint.png")
            {
                ImageOffsetX = -16, ImageOffsetY = -32
            };
            markerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            map.CustomOverlays.Add(markerOverlay);

            // Legend Layer
            LegendAdornmentLayer legendlayer = new LegendAdornmentLayer {
                Height = 135, Location = AdornmentLocation.LowerRight
            };

            map.AdornmentOverlay.Layers.Add(legendlayer);

            LegendItem hotelsLayeritem = new LegendItem();

            hotelsLayeritem.ImageStyle = hotelsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;
            hotelsLayeritem.TextStyle  = WorldStreetsTextStyles.GeneralPurpose(Resource.Hotels, 10);
            legendlayer.LegendItems.Add("hotels", hotelsLayeritem);

            LegendItem medicalFacilitesLayeritem = new LegendItem();

            medicalFacilitesLayeritem.ImageStyle = medicalFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;
            hotelsLayeritem.TextStyle            = WorldStreetsTextStyles.GeneralPurpose(Resource.MedicalFacilites, 10);

            legendlayer.LegendItems.Add("medicalFacilites", medicalFacilitesLayeritem);

            LegendItem publicFacilitesLayeritem = new LegendItem();

            publicFacilitesLayeritem.ImageStyle = publicFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;
            hotelsLayeritem.TextStyle           = WorldStreetsTextStyles.GeneralPurpose(Resource.PublicFacilites, 10);

            legendlayer.LegendItems.Add("publicFacilites", publicFacilitesLayeritem);

            LegendItem restaurantsLayeritem = new LegendItem();

            restaurantsLayeritem.ImageStyle = restaurantsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;
            hotelsLayeritem.TextStyle       = WorldStreetsTextStyles.GeneralPurpose(Resource.Restaurants, 10);

            legendlayer.LegendItems.Add("restaurants", restaurantsLayeritem);

            LegendItem schoolsLayeritem = new LegendItem();

            schoolsLayeritem.ImageStyle = schoolsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;
            hotelsLayeritem.TextStyle   = WorldStreetsTextStyles.GeneralPurpose(Resource.Schools, 10);

            legendlayer.LegendItems.Add("schools", schoolsLayeritem);

            // Scale bar layer
            ScaleBarAdornmentLayer scaleBarAdormentLayer = new ScaleBarAdornmentLayer();

            scaleBarAdormentLayer.Location       = AdornmentLocation.LowerLeft;
            scaleBarAdormentLayer.XOffsetInPixel = 10;
            map.AdornmentOverlay.Layers.Add("ScaleBar", scaleBarAdormentLayer);
            map.AdornmentOverlay.IsVisibleInOverlaySwitcher = false;

            // Create the Routine Engine.
            string streetShapeFilePathName = Server.MapPath(ConfigurationManager.AppSettings["StreetShapeFilePathName"]);
            string streetRtgFilePathName   = Path.ChangeExtension(streetShapeFilePathName, ".rtg");

            RtgRoutingSource routingSource = new RtgRoutingSource(streetRtgFilePathName);
            FeatureSource    featureSource = new ShapeFileFeatureSource(streetShapeFilePathName);

            featureSource.Projection    = proj4;
            routingEngine               = new RoutingEngine(routingSource, featureSource);
            routingEngine.GeographyUnit = GeographyUnit.Meter;
        }
        public static InMemoryMarkerOverlay CreateInMemoryMarkerOverlay()
        {
            const string inMemoryMarkerOverlayName = "InMemory Marker Overlay";

            InMemoryMarkerOverlay inMemoryMarkerOverlay = new InMemoryMarkerOverlay();
            inMemoryMarkerOverlay.Name = inMemoryMarkerOverlayName;
            inMemoryMarkerOverlay.Columns.Add(new FeatureSourceColumn("Name"));

            //  Set the marker's name as its Tooltip.
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.ToolTip = "[#Name#]";

            //  Set the marker's style.
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.ImageSource = new BitmapImage(new Uri("/Images/marker.png", UriKind.RelativeOrAbsolute));
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.Width = 20;
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.Height = 34;
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.DefaultPointMarkerStyle.YOffset = -17;
            inMemoryMarkerOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            //  Create a feature and add it to FeatureSource.
            Feature newFeature = new Feature("POINT(-10780998.2372393 3912039.4655777)");
            newFeature.ColumnValues.Add("Name", "William and Abbie Allen Elementary School");
            inMemoryMarkerOverlay.FeatureSource.BeginTransaction();
            inMemoryMarkerOverlay.FeatureSource.AddFeature(newFeature);
            inMemoryMarkerOverlay.FeatureSource.CommitTransaction();

            return inMemoryMarkerOverlay;
        }