private void button1_Click(object sender, EventArgs e) { try { var fact = new MgdServiceFactory(); MgFeatureService featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); MgFeatureQueryOptions query = new MgFeatureQueryOptions(); string[] propNames = txtProps.Text.Split(','); foreach (var p in propNames) { if (string.IsNullOrEmpty(p)) continue; query.AddFeatureProperty(p); } foreach (Pair p in lstComputed.Items) { query.AddComputedProperty(p.Name, p.Expr); } if (!string.IsNullOrEmpty(txtFilter.Text.Trim())) query.SetFilter(txtFilter.Text.Trim()); MgResourceIdentifier fsId = new MgResourceIdentifier(txtFeatureSource.Text); MgFeatureReader reader = featSvc.SelectFeatures(fsId, txtClass.Text, query); new ReaderResponseDialog(reader).ShowDialog(); } catch (MgException ex) { MessageBox.Show(ex.ToString(), "Error from MapGuide"); } }
private void btnSearch_Click(object sender, EventArgs e) { var query = new MgFeatureQueryOptions(); query.SetFilter(_filter.Replace("$USER_VARIABLE", txtSearch.Text)); //NOXLATE var reader = _layer.SelectFeatures(query); new MgQueryResultsDialog(_viewer, _layer, reader, -1).Show(); }
private void btnSelectDistrict1_Click(object sender, EventArgs e) { MgMapBase map = _viewer.GetMap(); MgLayerCollection layers = map.GetLayers(); MgLayerBase districts = layers.GetItem("Districts"); MgLayerBase parcels = layers.GetItem("Parcels"); //Query the geometry of district 1 MgFeatureQueryOptions districtQuery = new MgFeatureQueryOptions(); districtQuery.SetFilter("Autogenerated_SDF_ID = 1"); MgFeatureReader reader = districts.SelectFeatures(districtQuery); MgGeometry districtGeom = null; MgAgfReaderWriter agfRw = new MgAgfReaderWriter(); try { reader.ReadNext(); MgByteReader geomAgf = reader.GetGeometry(districts.GetFeatureGeometryName()); districtGeom = agfRw.Read(geomAgf); } finally { reader.Close(); } //Now use this geometry as the basis of our 2nd query MgFeatureQueryOptions parcelQuery = new MgFeatureQueryOptions(); parcelQuery.SetFilter("RNAME LIKE 'SCHMITT%'"); parcelQuery.SetSpatialFilter(parcels.GetFeatureGeometryName(), districtGeom, MgFeatureSpatialOperations.Inside); //Select the features reader = parcels.SelectFeatures(parcelQuery); MgSelectionBase selection = _viewer.GetSelection(); try { selection.FromXml(""); //Clear existing selection data selection.AddFeatures(parcels, reader, 0); } finally { reader.Close(); } //Because we manipulated the active selection outside the viewer //We need to call UpdateSelection() to instruct the viewer to //re-render the active selection. The "true" parameter instructs //the viewer to raise the SelectionChanged event as well, so that //subscribers like the Property Pane get updated as well. _viewer.UpdateSelection(true); _viewer.RefreshMap(); }
public void AddBuffer() { MgMap map = new MgMap(); map.Open(_resourceService, GetParameter(this.args, "MAPNAME")); MgSelection selection = new MgSelection(map); selection.Open(_resourceService, map.Name); MgReadOnlyLayerCollection layers = selection.GetLayers(); if (layers != null && layers.Count == 1) { MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(selection.GenerateFilter(layers[0], layers[0].FeatureClassName)); MgFeatureReader featureReader = _featureService.SelectFeatures(new MgResourceIdentifier(layers[0].FeatureSourceId), layers[0].FeatureClassName, opt); MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); MgGeometryCollection inputGeometries = new MgGeometryCollection(); MgClassDefinition classDef = _featureService.GetClassDefinition( new MgResourceIdentifier(layers[0].FeatureSourceId), layers[0].FeatureClassName.Split(':')[0], layers[0].FeatureClassName.Split(':')[1]); while (featureReader.ReadNext()) { MgByteReader byteReader = featureReader.GetGeometry(classDef.DefaultGeometryPropertyName); MgGeometry geom = agfRW.Read(byteReader); inputGeometries.Add(geom); } if (inputGeometries.Count > 0) { MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory(); MgCoordinateSystem mapSrs = coordSysFactory.Create(map.MapSRS); double distance = mapSrs.ConvertMetersToCoordinateSystemUnits(7.0); MgCoordinateSystemMeasure measure = mapSrs.GetMeasure(); MgGeometryFactory geomFactory = new MgGeometryFactory(); MgGeometry buffer = geomFactory.CreateMultiGeometry(inputGeometries).Buffer(distance, measure); if (buffer != null) { MgByteReader byteReader = agfRW.Write(buffer); MgGeometryFactory geometryFactory = new MgGeometryFactory(); MgAgfReaderWriter agfWriter = new MgAgfReaderWriter(); MgPropertyCollection propertyValues = CreatePropertyCollection(byteReader); this.InsertMarkupFeature(propertyValues); } } } }
private void btnQueryDistrict1_Click(object sender, EventArgs e) { MgMapBase map = _viewer.GetMap(); MgLayerCollection layers = map.GetLayers(); MgLayerBase districts = layers.GetItem("Districts"); MgLayerBase parcels = layers.GetItem("Parcels"); //Query the geometry of district 1 MgFeatureQueryOptions districtQuery = new MgFeatureQueryOptions(); districtQuery.SetFilter("Autogenerated_SDF_ID = 1"); MgFeatureReader reader = districts.SelectFeatures(districtQuery); MgGeometry districtGeom = null; MgAgfReaderWriter agfRw = new MgAgfReaderWriter(); try { reader.ReadNext(); MgByteReader geomAgf = reader.GetGeometry(districts.GetFeatureGeometryName()); districtGeom = agfRw.Read(geomAgf); } finally { reader.Close(); } //Now use this geometry as the basis of our 2nd query MgFeatureQueryOptions parcelQuery = new MgFeatureQueryOptions(); parcelQuery.SetFilter("RNAME LIKE 'SCHMITT%'"); parcelQuery.SetSpatialFilter(parcels.GetFeatureGeometryName(), districtGeom, MgFeatureSpatialOperations.Inside); //Select the features reader = parcels.SelectFeatures(parcelQuery); List <string> results = new List <string>(); try { while (reader.ReadNext()) { if (!reader.IsNull("RPROPAD")) { results.Add(reader.GetString("RPROPAD")); } } } finally { reader.Close(); } new ParcelQueryResultWindow(results).ShowDialog(); }
// GET: Search/Results public ActionResult Results(SearchInputModel input) { MgSiteConnection conn = CreateConnection(input); MgMap map = new MgMap(conn); map.Open(input.MapName); MgLayerCollection layers = map.GetLayers(); int lidx = layers.IndexOf("Parcels"); if (lidx < 0) { throw new Exception("Layer not found on map: Parcels"); } MgLayerBase layer = layers[lidx]; MgFeatureQueryOptions query = new MgFeatureQueryOptions(); //Don't fret about the input here. This is not a SQL injection attack vector. This filter string is //not SQL, it's a FDO filter. A 'DROP TABLE' or any other destructive SQL will fail on //query execution when this filter is parsed to a FDO filter. switch (input.By) { case "OWNER": query.SetFilter("RNAME LIKE '%" + input.Query.Replace("'", "\'") + "%'"); break; case "ADDRESS": query.SetFilter("RPROPAD LIKE '%" + input.Query.Replace("'", "\'") + "%'"); break; case "BBOX": double[] parts = input.Query.Split(',').Select(s => double.Parse(s, CultureInfo.InvariantCulture)).ToArray(); if (parts.Length != 4) { throw new Exception("Invalid BBOX parameter"); } MgWktReaderWriter wktRw = new MgWktReaderWriter(); MgGeometry filterGeom = wktRw.Read(MakeWktPolygon(parts[0], parts[1], parts[2], parts[3])); query.SetSpatialFilter(layer.FeatureGeometryName, filterGeom, MgFeatureSpatialOperations.Intersects); break; default: throw new Exception("Unknown query type: " + input.By); } SearchResultViewModel vm = new SearchResultViewModel(); vm.Session = input.Session; vm.MapName = input.MapName; vm.LoadResults(layer, query); return(View(vm)); }
private void btnQueryDistrict1_Click(object sender, EventArgs e) { MgMapBase map = _viewer.GetMap(); MgLayerCollection layers = map.GetLayers(); MgLayerBase districts = layers.GetItem("Districts"); MgLayerBase parcels = layers.GetItem("Parcels"); //Query the geometry of district 1 MgFeatureQueryOptions districtQuery = new MgFeatureQueryOptions(); districtQuery.SetFilter("Autogenerated_SDF_ID = 1"); MgFeatureReader reader = districts.SelectFeatures(districtQuery); MgGeometry districtGeom = null; MgAgfReaderWriter agfRw = new MgAgfReaderWriter(); try { reader.ReadNext(); MgByteReader geomAgf = reader.GetGeometry(districts.GetFeatureGeometryName()); districtGeom = agfRw.Read(geomAgf); } finally { reader.Close(); } //Now use this geometry as the basis of our 2nd query MgFeatureQueryOptions parcelQuery = new MgFeatureQueryOptions(); parcelQuery.SetFilter("RNAME LIKE 'SCHMITT%'"); parcelQuery.SetSpatialFilter(parcels.GetFeatureGeometryName(), districtGeom, MgFeatureSpatialOperations.Inside); //Select the features reader = parcels.SelectFeatures(parcelQuery); List<string> results = new List<string>(); try { while (reader.ReadNext()) { if (!reader.IsNull("RPROPAD")) results.Add(reader.GetString("RPROPAD")); } } finally { reader.Close(); } new ParcelQueryResultWindow(results).ShowDialog(); }
public static int GetUidFromSelection(HtzMgHelper helper, MgSelection selection, string idField) { MgLayer layer = selection.GetLayers()[0] as MgLayer; if (layer == null) { return 0; } MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(selection.GenerateFilter(layer, layer.FeatureClassName)); MgFeatureReader reader = helper.FeatureService.SelectFeatures(new MgResourceIdentifier(layer.FeatureSourceId), layer.FeatureClassName, opt); reader.ReadNext(); int result = (int)helper.GetFeaturePropertyValue(reader, idField); reader.Close(); reader.Dispose(); return result; }
public override TestResult Execute(int paramSetId) { try { NameValueCollection param = new NameValueCollection(); _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param); _unitTestVm.ReadParameterValue(paramSetId, "CLASSNAME", param); _unitTestVm.ReadParameterValue(paramSetId, "PROPERTIES", param); _unitTestVm.ReadParameterValue(paramSetId, "FILTER", param); MgResourceIdentifier resId = null; if (param["RESOURCEID"] != null) { resId = new MgResourceIdentifier(param["RESOURCEID"]); } MgFeatureQueryOptions query = new MgFeatureQueryOptions(); //TODO: Set query options if (param["FILTER"] != null) { query.SetFilter(param["FILTER"]); } //PROPERTIES should be stored in the database as comma separated string without spaces if (param["PROPERTIES"] != null) { string [] props = param["PROPERTIES"].Split(','); foreach (var p in props) { query.AddFeatureProperty(p); } } MgFeatureReader reader = _featureService.SelectFeatures(resId, param["CLASSNAME"], query); MgByteReader byteReader = reader.ToXml(); reader.Close(); return(TestResult.FromByteReader(byteReader)); } catch (MgException ex) { return(TestResult.FromMgException(ex)); } catch (Exception ex) { return(TestResult.FromException(ex)); } }
// GET: Search/Results public ActionResult Results(SearchInputModel input) { MgSiteConnection conn = CreateConnection(input); MgMap map = new MgMap(conn); map.Open(input.MapName); MgLayerCollection layers = map.GetLayers(); int lidx = layers.IndexOf("Parcels"); if (lidx < 0) { throw new Exception("Layer not found on map: Parcels"); } MgLayerBase layer = layers.GetItem(lidx); MgFeatureQueryOptions query = new MgFeatureQueryOptions(); //Don't fret about the input here. This is not a SQL injection attack vector. This filter string is //not SQL, it's a FDO filter. A 'DROP TABLE' or any other destructive SQL will fail on //query execution when this filter is parsed to a FDO filter. switch (input.By) { case "OWNER": query.SetFilter("RNAME LIKE '%" + input.Query.Replace("'", "\'") + "%'"); break; case "ADDRESS": query.SetFilter("RPROPAD LIKE '%" + input.Query.Replace("'", "\'") + "%'"); break; case "BBOX": double[] parts = input.Query.Split(',').Select(s => double.Parse(s, CultureInfo.InvariantCulture)).ToArray(); if (parts.Length != 4) { throw new Exception("Invalid BBOX parameter"); } MgWktReaderWriter wktRw = new MgWktReaderWriter(); MgGeometry filterGeom = wktRw.Read(MakeWktPolygon(parts[0], parts[1], parts[2], parts[3])); query.SetSpatialFilter(layer.FeatureGeometryName, filterGeom, MgFeatureSpatialOperations.Intersects); break; default: throw new Exception("Unknown query type: " + input.By); } SearchResultViewModel vm = new SearchResultViewModel(); vm.Session = input.Session; vm.MapName = input.MapName; vm.LoadResults(layer, query); return View(vm); }
public ActionResult SelectFeature(SelectInputModel input) { MgSiteConnection conn = CreateConnection(input); MgMap map = new MgMap(conn); map.Open(input.MapName); MgLayerCollection layers = map.GetLayers(); int lidx = layers.IndexOf("Parcels"); if (lidx < 0) { throw new Exception("Layer not found on map: Parcels"); } MgLayerBase layer = layers[lidx]; MgClassDefinition clsDef = layer.GetClassDefinition(); MgPropertyDefinitionCollection props = clsDef.GetProperties(); MgPropertyDefinition idProp = props[0]; string idPropName = idProp.Name; MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(idPropName + " = " + input.id); MgFeatureReader reader = layer.SelectFeatures(query); MgSelection selection = new MgSelection(map, ""); MgResourceService resSvc = (MgResourceService)conn.CreateService(MgServiceType.ResourceService); string result = ""; try { selection.Open(resSvc, input.MapName); selection.FromXml(""); //Clear existing selection.AddFeatures(layer, reader, 0); result = selection.ToXml(); } finally { reader.Close(); } return(Content(result, MgMimeType.Xml)); }
//---------------------------------------------------------------------------------------- // �� �ܣ� ��ѯָ����Χ�ڵ�Ҫ�� // // �� �ߣ� // // // �� �ڣ�2007.05.# // //----------------------------------------------------------------------------------------- public ParcelProperty[] GetNearParcels(string parcelType, GeocodeAddress geocodeAddress, double bufferDistance) { ParcelProperty[] parcelProperties = null; //���ڵ�ַ���� ���ε�͵�Ļ������������Σ� MgGeometryFactory geoFactory = new MgGeometryFactory(); MgCoordinate coord = geoFactory.CreateCoordinateXY(Convert.ToDouble(geocodeAddress.lon), Convert.ToDouble(geocodeAddress.lat)); MgPoint pt = geoFactory.CreatePoint(coord); //��ѯ��ָ����Χ�ڣ�����Σ���Ҫ�� MgPolygon buffer = (MgPolygon)pt.Buffer(bufferDistance, null); MgFeatureService featureService = (MgFeatureService)siteConnection.CreateService(MgServiceType.FeatureService); MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter("RTYPE LIKE '" + parcelType + "%'"); query.SetSpatialFilter("SHPGEOM", buffer, MgFeatureSpatialOperations.Inside); MgResourceIdentifier resId = new MgResourceIdentifier("Library://Samples/Sheboygan/Data/Parcels.FeatureSource"); MgFeatureReader featReader = featureService.SelectFeatures(resId, "Parcels", query); //�����ѯ��� ArrayList props = new ArrayList(); while (featReader.ReadNext()) { ParcelProperty prop = new ParcelProperty(); prop.ID = featReader.GetInt32("Autogenerated_SDF_ID").ToString(); prop.Acreage = featReader.GetString("RACRE"); prop.BillingAddr = featReader.GetString("RBILAD"); prop.Description1 = featReader.GetString("RLDESCR1"); prop.Description2 = featReader.GetString("RLDESCR2"); prop.Description3 = featReader.GetString("RLDESCR3"); prop.Description4 = featReader.GetString("RLDESCR4"); prop.LotDimension = featReader.GetString("RLOT"); prop.LotSize = featReader.GetInt32("RSQFT"); prop.Owner = featReader.GetString("RNAME"); prop.Zoning = featReader.GetString("RTYPE"); props.Add(prop); } parcelProperties = (ParcelProperty[])props.ToArray(typeof(ParcelProperty)); return parcelProperties; }
private void btnExecute_Click(object sender, EventArgs e) { var query = new MgFeatureQueryOptions(); var provider = _viewer.GetProvider(); var layer = (MgLayerBase)cmbLayer.SelectedItem; var prop = (MgDataPropertyDefinition)cmbProperty.SelectedItem; var op = (QueryOperator)cmbOperator.SelectedItem; if (chkPropFilterEnabled.Checked) { query.SetFilter(FilterToString(prop, op, txtValue.Text)); } if (chkSpatialFilter.Checked) { query.SetSpatialFilter(layer.GetFeatureGeometryName(), _filterGeometry, MgFeatureSpatialOperations.Intersects); } var reader = layer.SelectFeatures(query); new MgQueryResultsDialog(_viewer, layer, reader, Convert.ToInt32(numResults.Value)).Show(); }
//--------------------------------------------------------------------------------------- // // ���ܣ�����ѯ���ת��ΪXML��ʽ���ַ� // // ���ߣ� // // ���ڣ� 2007.5.23 // // ����ʷ���� // //--------------------------------------------------------------------------------------- public void CreateSelectionXML(String queryString) { //������Դ��Ҫ�ط��� MgResourceService resService = (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService); MgFeatureService featureService = (MgFeatureService)siteConnection.CreateService(MgServiceType.FeatureService); //��ȡҪ��ѯ��Ҫ��������ڵIJ� MgMap map = new MgMap(); map.Open(resService, "Sheboygan"); MgLayer layer = map.GetLayers().GetItem("Parcels"); //ִ��Ҫ�ز�ѯ MgResourceIdentifier resId = new MgResourceIdentifier(layer.GetFeatureSourceId()); MgFeatureQueryOptions queryOption = new MgFeatureQueryOptions(); queryOption.SetFilter(queryString); MgFeatureReader featureReader = featureService.SelectFeatures(resId, "Parcels", queryOption); //����ѡ�� MgSelection selection = new MgSelection(map); selection.AddFeatures(layer, featureReader, 0); //����ѡ����ת��ΪXML OutputSelectionInHTML(selection, featureService); selectionXML = selection.ToXml(); }
private void button1_Click(object sender, EventArgs e) { try { var fact = new MgdServiceFactory(); MgFeatureService featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); MgFeatureQueryOptions query = new MgFeatureQueryOptions(); string[] propNames = txtProps.Text.Split(','); foreach (var p in propNames) { if (string.IsNullOrEmpty(p)) { continue; } query.AddFeatureProperty(p); } foreach (Pair p in lstComputed.Items) { query.AddComputedProperty(p.Name, p.Expr); } if (!string.IsNullOrEmpty(txtFilter.Text.Trim())) { query.SetFilter(txtFilter.Text.Trim()); } MgResourceIdentifier fsId = new MgResourceIdentifier(txtFeatureSource.Text); MgFeatureReader reader = featSvc.SelectFeatures(fsId, txtClass.Text, query); new ReaderResponseDialog(reader).ShowDialog(); } catch (MgException ex) { MessageBox.Show(ex.ToString(), "Error from MapGuide"); } }
public void LoadResults(MgLayerBase layer, MgFeatureQueryOptions query) { MgClassDefinition clsDef = layer.GetClassDefinition(); MgPropertyDefinitionCollection idProps = clsDef.GetIdentityProperties(); MgPropertyDefinition idProp = idProps[0]; string idPropName = idProp.Name; string geomName = layer.FeatureGeometryName; MgFeatureReader reader = layer.SelectFeatures(query); MgAgfReaderWriter agfRw = new MgAgfReaderWriter(); try { while (reader.ReadNext()) { var res = new ParcelFeatureModel(); res.ID = reader.GetInt32(idPropName); res.Owner = reader.IsNull("RNAME") ? "(unknown)" : reader.GetString("RNAME"); res.Address = reader.IsNull("RPROPAD") ? "(unknown)" : reader.GetString("RPROPAD"); if (!reader.IsNull(geomName)) { MgByteReader agf = reader.GetGeometry(geomName); MgGeometry geom = agfRw.Read(agf); MgPoint center = geom.Centroid; MgCoordinate coord = center.Coordinate; res.X = coord.X; res.Y = coord.Y; } this.Results.Add(res); } } finally { reader.Close(); } }
private void button1_Click(object sender, EventArgs e) { try { var fact = new MgdServiceFactory(); MgdRenderingService renSvc = (MgdRenderingService)fact.CreateService(MgServiceType.RenderingService); MgResourceIdentifier resId = new MgResourceIdentifier(textBox1.Text); var sw = new Stopwatch(); sw.Start(); MgdMap map = new MgdMap(resId); sw.Stop(); Trace.TraceInformation("Runtime map created in {0}ms", sw.ElapsedMilliseconds); MgdSelection selection = null; if (!string.IsNullOrEmpty(txtSelectLayer.Text) && !string.IsNullOrEmpty(txtSelectFilter.Text)) { selection = new MgdSelection(map); var layers = map.GetLayers(); if (layers.IndexOf(txtSelectLayer.Text) >= 0) { var layer = layers.GetItem(txtSelectLayer.Text); var query = new MgFeatureQueryOptions(); query.SetFilter(txtSelectFilter.Text); var reader = layer.SelectFeatures(query); selection.AddFeatures(layer, reader, 0); Trace.TraceInformation("{0} features in selection set", selection.GetSelectedFeaturesCount(layer, layer.GetFeatureClassName())); } } double x; double y; if (double.TryParse(textBox2.Text, out x) && double.TryParse(textBox3.Text, out y)) { map.SetViewCenterXY(x, y); } int w; int h; if (int.TryParse(txtWidth.Text, out w) && int.TryParse(txtHeight.Text, out h)) { map.SetDisplaySize(w, h); } double scale; if (double.TryParse(textBox4.Text, out scale)) { map.SetViewScale(scale); } int mode; if (int.TryParse(textBox6.Text, out mode)) { } MgColor selColor = new MgColor("0x0000FFFF"); MgdRenderingOptions renderOpts = new MgdRenderingOptions(textBox5.Text, mode, selColor); sw.Start(); MgByteReader response = renSvc.RenderDynamicOverlay(map, selection, renderOpts); sw.Stop(); Trace.TraceInformation("RenderDynamicOverlay executed in {0}ms", sw.ElapsedMilliseconds); new ImageResponseDialog(response).ShowDialog(); } catch (MgException ex) { MessageBox.Show(ex.ToString(), "Error from MapGuide"); } }
public IFeatureReader QueryFeatureSource(string resourceID, string schema, string query, string[] columns, System.Collections.Specialized.NameValueCollection computedProperties) { MgFeatureService fes = this.Connection.CreateService(MgServiceType.FeatureService) as MgFeatureService; MgFeatureQueryOptions mgf = new MgFeatureQueryOptions(); if (query != null) mgf.SetFilter(query); if (columns != null && columns.Length != 0) foreach(string s in columns) mgf.AddFeatureProperty(s); if (computedProperties != null && computedProperties.Count > 0) foreach (string s in computedProperties.Keys) mgf.AddComputedProperty(s, computedProperties[s]); MgFeatureReader mr = fes.SelectFeatures(new MgResourceIdentifier(resourceID), schema, mgf); LogMethodCall("MgFeatureService::SelectFeatures", true, resourceID, schema, "MgFeatureQueryOptions"); return new LocalNativeFeatureReader(mr); }
/* OldUpdateFeature public void oldUpdateFeature(string filter) { string featureclassname = string.empty; mgresourceidentifier featureresid = new mgresourceidentifier(mlayer.getfeaturesourceid()); mgbytereader reader1 = msiteutilities.resourceservice.getresourceheader(featureresid); string s = reader1.tostring(); //join update mgstringcollection r = msiteutilities.featureservice.getclasses(featureresid, mlayer.featureclassname.split(':')[0]); if (r.getcount() > 1) { mgclassdefinition classdefinition = msiteutilities.featureservice.getclassdefinition(featureresid, mlayer.featureclassname.split(':')[0], mlayer.featureclassname.split(':')[1]); dictionary<string, list<mgpropertydefinition>> propcollection = new dictionary<string, list<mgpropertydefinition>>(); foreach(var item in classdefinition.getproperties()) { string[] strs = item.qualifiedname.split('.'); if(!propcollection.containskey(strs[0])) { propcollection.add(strs[0], new list<mgpropertydefinition>()); } propcollection[strs[0]].add(item); } string joinedschema = r.getitem(1); string[] arr = joinedschema.split(']'); string schemaname = arr[2]; string prefix = arr[1].remove(0, 1); string joinname = arr[0].remove(0, 1); featureclassname = r.getitem(0); dictionary<string, featproperty> parentproperties = new dictionary<string, featproperty>(); dictionary<string, featproperty> childproperties = new dictionary<string, featproperty>(); foreach (var item in propertiescollection) { if (item.key.indexof(prefix) >= 0) { item.value.name = item.value.name.substring(prefix.length); childproperties.add(item.value.name, item.value); } else { parentproperties.add(item.key, item.value); } } updatingfeature(featureresid, featureclassname, filter, parentproperties); if (propertiescollection.containskey("uid")) { mgresourceidentifier childresid = new mgresourceidentifier(featureresid.tostring()); string childfeatureclassname = schemaname.split(':')[1]; string childupdatingfilter = string.format("uid={0}", propertiescollection["uid"].value); childresid.setname(childfeatureclassname); updatingfeature(childresid, schemaname, childupdatingfilter, childproperties); } return; } else { updatingfeature(featureresid, featureclassname, filter, propertiescollection); } } */ private void UpdatingFeature(MgResourceIdentifier featureResId, string FeatureClassName, string Filter, Dictionary<string, FeatProperty> propCollection) { string _filter = "FeatId LIKE '%%'"; MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter(_filter); MgFeatureReader featureReader = mSiteUtilities.FeatureService.SelectFeatures(featureResId, FeatureClassName.Split(':')[1], null); featureReader = mSiteUtilities.FeatureService.SelectFeatures(featureResId, FeatureClassName.Split(':')[1], queryOptions); featureReader.ReadNext(); //--------------------------------- //-----lets start update //--------------------------------- MgFeatureCommandCollection updCommands = new MgFeatureCommandCollection(); MgPropertyCollection properties = new MgPropertyCollection(); foreach (var item in propCollection) { try { MgProperty prop = item.Value.GenerateProperty(); if (prop != null) { prop.Name = item.Key; properties.Add(prop); } } catch (InvalidOperationException) { } } if (FeatureClassName == string.Empty) FeatureClassName = mLayer.FeatureClassName; if (properties.Count > 0) { MgUpdateFeatures updateCommand = new MgUpdateFeatures(FeatureClassName, properties, Filter); updCommands.Add(updateCommand); MgPropertyCollection res = mSiteUtilities.FeatureService.UpdateFeatures(featureResId, updCommands, false); mSiteUtilities.Map.Save(mSiteUtilities.ResourceService); //--------------------------------- //-----end of update //--------------------------------- //==================================================================== } featureReader.Close(); }
public IActionResult SelectFeature(SelectInputModel input) { MgSiteConnection conn = CreateConnection(input); MgMap map = new MgMap(conn); map.Open(input.MapName); MgLayerCollection layers = map.GetLayers(); int lidx = layers.IndexOf("Parcels"); if (lidx < 0) { throw new Exception("Layer not found on map: Parcels"); } MgLayerBase layer = layers.GetItem(lidx); MgClassDefinition clsDef = layer.GetClassDefinition(); MgPropertyDefinitionCollection props = clsDef.GetProperties(); MgPropertyDefinition idProp = props.GetItem(0); string idPropName = idProp.Name; MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(idPropName + " = " + input.id); MgFeatureReader reader = layer.SelectFeatures(query); MgSelection selection = new MgSelection(map, ""); MgResourceService resSvc = (MgResourceService)conn.CreateService(MgServiceType.ResourceService); string result = ""; try { selection.Open(resSvc, input.MapName); selection.FromXml(""); //Clear existing selection.AddFeatures(layer, reader, 0); result = selection.ToXml(); selection.Save(resSvc); } finally { reader.Close(); } return Content(result, MgMimeType.Xml); }
private void btnCreate_Click(object sender, EventArgs e) { btnCreate.Enabled = false; try { var layerName = txtBufferLayer.Text.Trim(); if (string.IsNullOrEmpty(layerName)) { MessageBox.Show(Strings.MsgEnterNameForLayer); return; } if (lstLayers.SelectedItems.Count == 0) { MessageBox.Show(Strings.MsgIncludeLayersToBuffer); return; } var map = _viewer.GetMap(); var layers = map.GetLayers(); var provider = _viewer.GetProvider(); //From here, it's the same logic as buffer.aspx in .net MapGuide AJAX viewer MgResourceIdentifier fsId = new MgResourceIdentifier("Session:" + _sessionId + "//" + txtBufferLayer.Text + "_Buffer.FeatureSource"); //NOXLATE MgResourceIdentifier ldfId = new MgResourceIdentifier("Session:" + _sessionId + "//" + txtBufferLayer.Text + "_Buffer.LayerDefinition"); //NOXLATE MgLayerBase layer = Util.FindLayer(layers, txtBufferLayer.Text); string[] layerNames = GetLayerNames(); double distance = Convert.ToDouble(numBufferDistance.Value); MeasurementUnit bUnits = (MeasurementUnit)cmbUnits.SelectedItem; switch (bUnits) { case MeasurementUnit.Feet: distance *= 0.30480; break; case MeasurementUnit.Kilometers: distance *= 1000; break; case MeasurementUnit.Miles: distance *= 1609.35; break; } String srsDefMap = Util.GetMapSrs(map); MgCoordinateSystem srsMap = provider.GetMapCoordinateSystem(); string mapSrsUnits = ""; bool arbitraryMapSrs = (srsMap.GetType() == MgCoordinateSystemType.Arbitrary); if (arbitraryMapSrs) { mapSrsUnits = srsMap.GetUnits(); } String xtrans = String.Format("{0:x2}", ((int)(255 * Convert.ToInt32(numFillTransparency.Value) / 100))); //NOXLATE var lineColor = Util.ToHtmlColor(pnlBorderColor.BackColor); var foreColor = Util.ToHtmlColor(pnlFillColor.BackColor); var backColor = Util.ToHtmlColor(pnlFillBackColor.BackColor); String layerTempl = string.Format(Properties.Resources.AreaLayerDef, fsId.ToString(), "BufferSchema:Buffer", //NOXLATE "GEOM", //NOXLATE cmbFillPattern.SelectedItem, xtrans + foreColor, ((0 != 1 /*transparent*/) ? "ff" : "00") + backColor, //NOXLATE cmbBorderPattern.SelectedItem, numLineThickness.Value.ToString(NumberFormatInfo.InvariantInfo), lineColor ); byte[] bytes = Encoding.UTF8.GetBytes(layerTempl); MgByteSource src = new MgByteSource(bytes, bytes.Length); MgByteReader layerDefContent = src.GetReader(); _resSvc.SetResource(ldfId, layerDefContent, null); bool newBuffer = false; if (layer == null) { newBuffer = true; //Targetting a new layer. create a data source for it // MgClassDefinition classDef = new MgClassDefinition(); classDef.SetName("Buffer"); //NOXLATE classDef.SetDescription("Feature class for buffer layer"); //NOXLATE classDef.SetDefaultGeometryPropertyName("GEOM"); //NOXLATE //Set KEY property MgDataPropertyDefinition prop = new MgDataPropertyDefinition("KEY"); //NOXLATE prop.SetDataType(MgPropertyType.Int32); prop.SetAutoGeneration(true); prop.SetReadOnly(true); classDef.GetIdentityProperties().Add(prop); classDef.GetProperties().Add(prop); //Set ID property. Hold this segment ID prop = new MgDataPropertyDefinition("ID"); //NOXLATE prop.SetDataType(MgPropertyType.Int32); classDef.GetProperties().Add(prop); //Set geometry property MgGeometricPropertyDefinition geomProp = new MgGeometricPropertyDefinition("GEOM"); //NOXLATE //prop.SetGeometryTypes(MgFeatureGeometricType.mfgtSurface); //TODO use the constant when exposed geomProp.SetGeometryTypes(4); classDef.GetProperties().Add(geomProp); //Create the schema MgFeatureSchema schema = new MgFeatureSchema("BufferSchema", "Temporary buffer schema"); //NOXLATE schema.GetClasses().Add(classDef); //finally, creation of the feature source MgFileFeatureSourceParams sdfParams = new MgFileFeatureSourceParams("OSGeo.SDF", "LatLong", map.GetMapSRS(), schema); //NOXLATE _featSvc.CreateFeatureSource(fsId, sdfParams); //Add layer to map layer = provider.CreateLayer(ldfId); layer.SetName(txtBufferLayer.Text); layer.SetLegendLabel(txtBufferLayer.Text); layer.SetDisplayInLegend(true); layer.SetSelectable(true); layers.Insert(0, layer); } else { //data source already exist. clear its content // Util.ClearDataSource(_featSvc, fsId, "BufferSchema:Buffer"); //NOXLATE } var sel = _viewer.GetSelection(); var selLayers = sel.GetLayers(); MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); MgGeometryCollection bufferGeometries = new MgGeometryCollection(); MgGeometry geomBuffer; MgFeatureCommandCollection commands = new MgFeatureCommandCollection(); int featId = 0; MgBatchPropertyCollection propCollection = new MgBatchPropertyCollection(); int excludedLayers = 0; MgCoordinateSystem srsDs = null; MgGeometryCollection inputGeometries = new MgGeometryCollection(); int bufferFeatures = 0; for (int li = 0; li < selLayers.GetCount(); li++) { MgLayerBase selLayer = selLayers.GetItem(li); bool inputLayer = false; String selLayerName = selLayer.GetName(); for (int il = 0; il < layerNames.Length; il++) { if (layerNames[il].Equals(selLayerName)) { inputLayer = true; break; } } if (inputLayer == false) { continue; } // get the data source SRS // MgResourceIdentifier featSourceId = new MgResourceIdentifier(selLayer.GetFeatureSourceId()); MgSpatialContextReader ctxs = _featSvc.GetSpatialContexts(featSourceId, false); String srsDefDs = string.Empty; if (ctxs != null && ctxs.ReadNext()) { srsDefDs = ctxs.GetCoordinateSystemWkt(); } if (srsDefDs == null || srsDefDs.Length == 0) { excludedLayers++; continue; } var srsFactory = new MgCoordinateSystemFactory(); srsDs = srsFactory.Create(srsDefDs); bool arbitraryDsSrs = (srsDs.GetType() == MgCoordinateSystemType.Arbitrary); String dsSrsUnits = string.Empty; if (arbitraryDsSrs) { dsSrsUnits = srsDs.GetUnits(); } // exclude layer if: // the map is non-arbitrary and the layer is arbitrary or vice-versa // or // layer and map are both arbitrary but have different units // if ((arbitraryDsSrs != arbitraryMapSrs) || (arbitraryDsSrs && (dsSrsUnits != mapSrsUnits))) { excludedLayers++; continue; } // calculate distance in the data source SRS units // double dist = srsDs.ConvertMetersToCoordinateSystemUnits(distance); // calculate great circle unless data source srs is arbitrary MgCoordinateSystemMeasure measure; if (!arbitraryDsSrs) { measure = srsDs.GetMeasure(); } else { measure = null; } // create a SRS transformer if necessary MgCoordinateSystemTransform srsXform; if (!srsDefDs.Equals(srsDefMap)) { srsXform = srsFactory.GetTransform(srsDs, srsMap); } else { srsXform = null; } String featureClassName = selLayer.GetFeatureClassName(); String filter = sel.GenerateFilter(selLayer, featureClassName); if (filter == null || filter.Length == 0) { continue; } MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(filter); MgResourceIdentifier featureSource = new MgResourceIdentifier(selLayer.GetFeatureSourceId()); MgFeatureReader features = _featSvc.SelectFeatures(featureSource, featureClassName, query); if (features.ReadNext()) { MgClassDefinition classDef = features.GetClassDefinition(); String geomPropName = classDef.GetDefaultGeometryPropertyName(); do { MgByteReader geomReader = features.GetGeometry(geomPropName); MgGeometry geom = agfRW.Read(geomReader); if (!chkMergeBuffers.Checked) { geomBuffer = geom.Buffer(dist, measure); if (geomBuffer != null) { if (srsXform != null) { geomBuffer = (MgGeometry)geomBuffer.Transform(srsXform); } Util.AddFeatureToCollection(propCollection, agfRW, featId++, geomBuffer); bufferFeatures++; } } else { if (srsXform != null) { geom = (MgGeometry)geom.Transform(srsXform); } inputGeometries.Add(geom); } }while (features.ReadNext()); features.Close(); } } if (chkMergeBuffers.Checked) { if (inputGeometries.GetCount() > 0) { double dist = srsMap.ConvertMetersToCoordinateSystemUnits(distance); MgCoordinateSystemMeasure measure; if (!arbitraryMapSrs) { measure = srsMap.GetMeasure(); } else { measure = null; } MgGeometryFactory geomFactory = new MgGeometryFactory(); geomBuffer = geomFactory.CreateMultiGeometry(inputGeometries).Buffer(dist, measure); if (geomBuffer != null) { Util.AddFeatureToCollection(propCollection, agfRW, featId, geomBuffer); bufferFeatures = 1; } } } if (propCollection.GetCount() > 0) { commands.Add(new MgInsertFeatures("BufferSchema:Buffer", propCollection)); //NOXLATE //Insert the features in the temporary data source // Util.ReleaseReader(_featSvc.UpdateFeatures(fsId, commands, false), commands); } // Save the new map state // layer.ForceRefresh(); _viewer.RefreshMap(); //build report message if (newBuffer) { MessageBox.Show(string.Format(Strings.MsgBufferLayerCreated, txtBufferLayer.Text)); } else { MessageBox.Show(string.Format(Strings.MsgBufferLayerUpdated, txtBufferLayer.Text)); } } finally { btnCreate.Enabled = true; } }
private void btnCreate_Click(object sender, EventArgs e) { btnCreate.Enabled = false; try { var layerName = txtBufferLayer.Text.Trim(); if (string.IsNullOrEmpty(layerName)) { MessageBox.Show(Strings.MsgEnterNameForLayer); return; } if (lstLayers.SelectedItems.Count == 0) { MessageBox.Show(Strings.MsgIncludeLayersToBuffer); return; } var map = _viewer.GetMap(); var layers = map.GetLayers(); var provider = _viewer.GetProvider(); //From here, it's the same logic as buffer.aspx in .net MapGuide AJAX viewer MgResourceIdentifier fsId = new MgResourceIdentifier("Session:" + _sessionId + "//" + txtBufferLayer.Text + "_Buffer.FeatureSource"); //NOXLATE MgResourceIdentifier ldfId = new MgResourceIdentifier("Session:" + _sessionId + "//" + txtBufferLayer.Text + "_Buffer.LayerDefinition"); //NOXLATE MgLayerBase layer = Util.FindLayer(layers, txtBufferLayer.Text); string[] layerNames = GetLayerNames(); double distance = Convert.ToDouble(numBufferDistance.Value); MeasurementUnit bUnits = (MeasurementUnit)cmbUnits.SelectedItem; switch (bUnits) { case MeasurementUnit.Feet: distance *= 0.30480; break; case MeasurementUnit.Kilometers: distance *= 1000; break; case MeasurementUnit.Miles: distance *= 1609.35; break; } String srsDefMap = Util.GetMapSrs(map); MgCoordinateSystem srsMap = provider.GetMapCoordinateSystem(); string mapSrsUnits = ""; bool arbitraryMapSrs = (srsMap.GetType() == MgCoordinateSystemType.Arbitrary); if (arbitraryMapSrs) mapSrsUnits = srsMap.GetUnits(); String xtrans = String.Format("{0:x2}", ((int)(255 * Convert.ToInt32(numFillTransparency.Value) / 100))); //NOXLATE var lineColor = Util.ToHtmlColor(pnlBorderColor.BackColor); var foreColor = Util.ToHtmlColor(pnlFillColor.BackColor); var backColor = Util.ToHtmlColor(pnlFillBackColor.BackColor); String layerTempl = string.Format(Properties.Resources.AreaLayerDef, fsId.ToString(), "BufferSchema:Buffer", //NOXLATE "GEOM", //NOXLATE cmbFillPattern.SelectedItem, xtrans + foreColor, ((0 != 1/*transparent*/) ? "ff" : "00") + backColor, //NOXLATE cmbBorderPattern.SelectedItem, numLineThickness.Value.ToString(NumberFormatInfo.InvariantInfo), lineColor ); byte[] bytes = Encoding.UTF8.GetBytes(layerTempl); MgByteSource src = new MgByteSource(bytes, bytes.Length); MgByteReader layerDefContent = src.GetReader(); _resSvc.SetResource(ldfId, layerDefContent, null); bool newBuffer = false; if (layer == null) { newBuffer = true; //Targetting a new layer. create a data source for it // MgClassDefinition classDef = new MgClassDefinition(); classDef.SetName("Buffer"); //NOXLATE classDef.SetDescription("Feature class for buffer layer"); //NOXLATE classDef.SetDefaultGeometryPropertyName("GEOM"); //NOXLATE //Set KEY property MgDataPropertyDefinition prop = new MgDataPropertyDefinition("KEY"); //NOXLATE prop.SetDataType(MgPropertyType.Int32); prop.SetAutoGeneration(true); prop.SetReadOnly(true); classDef.GetIdentityProperties().Add(prop); classDef.GetProperties().Add(prop); //Set ID property. Hold this segment ID prop = new MgDataPropertyDefinition("ID"); //NOXLATE prop.SetDataType(MgPropertyType.Int32); classDef.GetProperties().Add(prop); //Set geometry property MgGeometricPropertyDefinition geomProp = new MgGeometricPropertyDefinition("GEOM"); //NOXLATE //prop.SetGeometryTypes(MgFeatureGeometricType.mfgtSurface); //TODO use the constant when exposed geomProp.SetGeometryTypes(4); classDef.GetProperties().Add(geomProp); //Create the schema MgFeatureSchema schema = new MgFeatureSchema("BufferSchema", "Temporary buffer schema"); //NOXLATE schema.GetClasses().Add(classDef); //finally, creation of the feature source MgFileFeatureSourceParams sdfParams = new MgFileFeatureSourceParams("OSGeo.SDF", "LatLong", map.GetMapSRS(), schema); //NOXLATE _featSvc.CreateFeatureSource(fsId, sdfParams); //Add layer to map layer = provider.CreateLayer(ldfId); layer.SetName(txtBufferLayer.Text); layer.SetLegendLabel(txtBufferLayer.Text); layer.SetDisplayInLegend(true); layer.SetSelectable(true); layers.Insert(0, layer); } else { //data source already exist. clear its content // Util.ClearDataSource(_featSvc, fsId, "BufferSchema:Buffer"); //NOXLATE } var sel = _viewer.GetSelection(); var selLayers = sel.GetLayers(); MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); MgGeometryCollection bufferGeometries = new MgGeometryCollection(); MgGeometry geomBuffer; MgFeatureCommandCollection commands = new MgFeatureCommandCollection(); int featId = 0; MgBatchPropertyCollection propCollection = new MgBatchPropertyCollection(); int excludedLayers = 0; MgCoordinateSystem srsDs = null; MgGeometryCollection inputGeometries = new MgGeometryCollection(); int bufferFeatures = 0; for (int li = 0; li < selLayers.GetCount(); li++) { MgLayerBase selLayer = selLayers.GetItem(li); bool inputLayer = false; String selLayerName = selLayer.GetName(); for (int il = 0; il < layerNames.Length; il++) { if (layerNames[il].Equals(selLayerName)) { inputLayer = true; break; } } if (inputLayer == false) { continue; } // get the data source SRS // MgResourceIdentifier featSourceId = new MgResourceIdentifier(selLayer.GetFeatureSourceId()); MgSpatialContextReader ctxs = _featSvc.GetSpatialContexts(featSourceId, false); String srsDefDs = string.Empty; if (ctxs != null && ctxs.ReadNext()) srsDefDs = ctxs.GetCoordinateSystemWkt(); if (srsDefDs == null || srsDefDs.Length == 0) { excludedLayers++; continue; } var srsFactory = new MgCoordinateSystemFactory(); srsDs = srsFactory.Create(srsDefDs); bool arbitraryDsSrs = (srsDs.GetType() == MgCoordinateSystemType.Arbitrary); String dsSrsUnits = string.Empty; if (arbitraryDsSrs) dsSrsUnits = srsDs.GetUnits(); // exclude layer if: // the map is non-arbitrary and the layer is arbitrary or vice-versa // or // layer and map are both arbitrary but have different units // if ((arbitraryDsSrs != arbitraryMapSrs) || (arbitraryDsSrs && (dsSrsUnits != mapSrsUnits))) { excludedLayers++; continue; } // calculate distance in the data source SRS units // double dist = srsDs.ConvertMetersToCoordinateSystemUnits(distance); // calculate great circle unless data source srs is arbitrary MgCoordinateSystemMeasure measure; if (!arbitraryDsSrs) measure = srsDs.GetMeasure(); else measure = null; // create a SRS transformer if necessary MgCoordinateSystemTransform srsXform; if (!srsDefDs.Equals(srsDefMap)) srsXform = srsFactory.GetTransform(srsDs, srsMap); else srsXform = null; String featureClassName = selLayer.GetFeatureClassName(); String filter = sel.GenerateFilter(selLayer, featureClassName); if (filter == null || filter.Length == 0) continue; MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(filter); MgResourceIdentifier featureSource = new MgResourceIdentifier(selLayer.GetFeatureSourceId()); MgFeatureReader features = _featSvc.SelectFeatures(featureSource, featureClassName, query); if (features.ReadNext()) { MgClassDefinition classDef = features.GetClassDefinition(); String geomPropName = classDef.GetDefaultGeometryPropertyName(); do { MgByteReader geomReader = features.GetGeometry(geomPropName); MgGeometry geom = agfRW.Read(geomReader); if (!chkMergeBuffers.Checked) { geomBuffer = geom.Buffer(dist, measure); if (geomBuffer != null) { if (srsXform != null) geomBuffer = (MgGeometry)geomBuffer.Transform(srsXform); Util.AddFeatureToCollection(propCollection, agfRW, featId++, geomBuffer); bufferFeatures++; } } else { if (srsXform != null) geom = (MgGeometry)geom.Transform(srsXform); inputGeometries.Add(geom); } } while (features.ReadNext()); features.Close(); } } if (chkMergeBuffers.Checked) { if (inputGeometries.GetCount() > 0) { double dist = srsMap.ConvertMetersToCoordinateSystemUnits(distance); MgCoordinateSystemMeasure measure; if (!arbitraryMapSrs) measure = srsMap.GetMeasure(); else measure = null; MgGeometryFactory geomFactory = new MgGeometryFactory(); geomBuffer = geomFactory.CreateMultiGeometry(inputGeometries).Buffer(dist, measure); if (geomBuffer != null) { Util.AddFeatureToCollection(propCollection, agfRW, featId, geomBuffer); bufferFeatures = 1; } } } if (propCollection.GetCount() > 0) { commands.Add(new MgInsertFeatures("BufferSchema:Buffer", propCollection)); //NOXLATE //Insert the features in the temporary data source // Util.ReleaseReader(_featSvc.UpdateFeatures(fsId, commands, false), commands); } // Save the new map state // layer.ForceRefresh(); _viewer.RefreshMap(); //build report message if (newBuffer) MessageBox.Show(string.Format(Strings.MsgBufferLayerCreated, txtBufferLayer.Text)); else MessageBox.Show(string.Format(Strings.MsgBufferLayerUpdated, txtBufferLayer.Text)); } finally { btnCreate.Enabled = true; } }
//--------------------------------------------------------------------------------------- // // ���ܣ������ѯ��� // // ���ߣ� // // ���ڣ� 2007.5.23 // // ����ʷ���� // //--------------------------------------------------------------------------------------- public void OutputSelectionInHTML(MgSelection selection, MgFeatureService featureService) { MgReadOnlyLayerCollection layers = selection.GetLayers(); String outString = null; if (layers != null) { for (int i = 0; i < layers.GetCount(); i++) { MgLayer layer = layers.GetItem(i); if ((layer != null) && (layer.GetName() == "Parcels")) { String layerClassName = layer.GetFeatureClassName(); selectString = selection.GenerateFilter(layer, layerClassName); String layerFeatureIdString = layer.GetFeatureSourceId(); MgResourceIdentifier layerResId = new MgResourceIdentifier(layerFeatureIdString); MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter(selectString); MgFeatureReader featReader = featureService.SelectFeatures(layerResId, layerClassName, queryOptions); outString = outString + "<table border=\"1\">\n"; double acre = 0; while (featReader.ReadNext()) { outString = outString + "<tr>\n"; outString = outString + "<td>"; outString = outString + featReader.GetString("RNAME"); outString = outString + "</td>\n"; outString = outString + "<td>"; outString = outString + featReader.GetString("RPROPAD"); outString = outString + "</td>\n"; outString = outString + "<td>"; String acreString = featReader.GetString("RACRE"); acre = acre + (acreString == "" ? 0 : Convert.ToDouble(acreString)); outString = outString + acreString; outString = outString + "</tr>\n"; } outString = outString + "</table>\n"; featReader.Close(); } } } selectionResult = outString; }
private void SetPropertyMinMaxCount(MgLayerBase layer, MgDataPropertyDefinition prop) { var provider = _viewer.GetProvider(); var featureService = (MgFeatureService)provider.CreateService(MgServiceType.FeatureService); MgResourceIdentifier resId = new MgResourceIdentifier(layer.GetFeatureSourceId()); String minValue = null; String maxValue = null; int count = 0; MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.AddFeatureProperty(prop.Name); MgFeatureReader featureReader = featureService.SelectFeatures(resId, layer.GetFeatureClassName(), queryOptions); Dictionary<string, string> bucket = new Dictionary<string, string>(); while (featureReader.ReadNext()) { String value = Util.GetFeaturePropertyValue(featureReader, prop.Name); bucket[value] = value; int propertyType = featureReader.GetPropertyType(prop.Name); if (count == 0) { maxValue = value; minValue = value; } switch (propertyType) { case MgPropertyType.String: if (value.Length > 0) { if (value.CompareTo(maxValue) > 0) maxValue = value; if (value.CompareTo(minValue) < 0) minValue = value; } break; case MgPropertyType.Byte: case MgPropertyType.Int16: case MgPropertyType.Int32: case MgPropertyType.Int64: if (value.Length > 0) { if (Int64.Parse(value) > Int64.Parse(maxValue)) maxValue = value; if (Int64.Parse(value) < Int64.Parse(minValue)) minValue = value; } break; case MgPropertyType.Single: case MgPropertyType.Double: if (value != null) { if (Double.Parse(value) > Double.Parse(maxValue)) maxValue = value; if (Double.Parse(value) < Double.Parse(minValue)) minValue = value; } count++; break; case MgPropertyType.Boolean: case MgPropertyType.DateTime: case MgPropertyType.Null: case MgPropertyType.Blob: case MgPropertyType.Clob: case MgPropertyType.Feature: case MgPropertyType.Geometry: break; } count++; } featureReader.Close(); txtMin.Text = minValue; txtMax.Text = maxValue; if (THEME_INDIVIDUAL == cmbDistribution.SelectedValue.ToString()) count = bucket.Count; numRules.Value = featureCount = count; }
MgGeometry MultiGeometryFromSelection(MgFeatureService featureSrvc, MgMap map, String selText) { MgSelection sel = new MgSelection(map); sel.FromXml(selText); MgReadOnlyLayerCollection selLayers = sel.GetLayers(); if (selLayers == null) return null; MgGeometryCollection geomColl = new MgGeometryCollection(); MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); bool polyOnly = true; for (int i = 0; i < selLayers.GetCount(); i++) { MgLayer layer = (MgLayer)selLayers.GetItem(i); // TODO: How to get selectionSize? //int selectionSize = 20; string filter = sel.GenerateFilter(layer, layer.GetFeatureClassName()); if (filter == "") continue; MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(filter); MgResourceIdentifier featureSource = new MgResourceIdentifier(layer.GetFeatureSourceId()); MgFeatureReader features = featureSrvc.SelectFeatures(featureSource, layer.GetFeatureClassName(), query); if (features != null) { MgClassDefinition classDef = features.GetClassDefinition(); String geomPropName = classDef.GetDefaultGeometryPropertyName(); int j = 0; //bool isPoly = true; while (features.ReadNext()) { MgByteReader geomReader = features.GetGeometry(geomPropName); MgGeometry geom = agfRW.Read(geomReader); if (j++ == 0) { int type = geom.GetGeometryType(); if (type == MgGeometryType.MultiPolygon || type == MgGeometryType.CurvePolygon || type == MgGeometryType.MultiCurvePolygon) { //isPoly = false; polyOnly = false; } else if (type != MgGeometryType.Polygon) { break; } } geomColl.Add(geom); } features.Close(); features.Dispose(); } } if (geomColl.GetCount() == 0) { return null; } MgGeometryFactory gf = new MgGeometryFactory(); if (polyOnly) { MgPolygonCollection polyColl = new MgPolygonCollection(); for (int j = 0; j < geomColl.GetCount(); j++) { polyColl.Add((MgPolygon)geomColl.GetItem(j)); } return gf.CreateMultiPolygon(polyColl); } else { return gf.CreateMultiGeometry(geomColl); } }
public ParcelProperty GetFirstSelectedFeature() { MgResourceService resService = (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService); MgFeatureService featService = (MgFeatureService)siteConnection.CreateService(MgServiceType.FeatureService); MgMap map = new MgMap(); map.Open(resService, "Sheboygan"); MgSelection mapSelection = new MgSelection(map); mapSelection.Open(resService, "Sheboygan"); MgReadOnlyLayerCollection layers = mapSelection.GetLayers(); if (layers == null) return null; ParcelProperty prop = new ParcelProperty(); for (int i = 0; i < layers.GetCount(); i++) { MgLayer layer = layers.GetItem(i); if ((layer != null) && (layer.GetName() == "Parcels")) { String layerClassName = layer.GetFeatureClassName(); String selectString = mapSelection.GenerateFilter(layer, layerClassName); String layerFeatureIdString = layer.GetFeatureSourceId(); MgResourceIdentifier layerResId = new MgResourceIdentifier(layerFeatureIdString); MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter(selectString); MgFeatureReader featReader = featService.SelectFeatures(layerResId, layerClassName, queryOptions); if (featReader.ReadNext()) { prop.ID = featReader.GetInt32("Autogenerated_SDF_ID"); prop.Acreage = featReader.GetString("RACRE"); prop.BillingAddr = featReader.GetString("RBILAD"); prop.Description1 = featReader.GetString("RLDESCR1"); prop.Description2 = featReader.GetString("RLDESCR2"); prop.Description3 = featReader.GetString("RLDESCR3"); prop.Description4 = featReader.GetString("RLDESCR4"); prop.LotDimension = featReader.GetString("RLOT"); prop.LotSize = featReader.GetInt32("RSQFT"); prop.Owner = featReader.GetString("RNAME"); prop.Zoning = featReader.GetString("RTYPE"); featReader.Close(); return prop; } featReader.Close(); } } return null; }
MgGeometry MultiGeometryFromSelection(MgFeatureService featureSrvc, MgMap map, String selText) { MgSelection sel = new MgSelection(map); sel.FromXml(selText); MgReadOnlyLayerCollection selLayers = sel.GetLayers(); if (selLayers == null) { return(null); } MgGeometryCollection geomColl = new MgGeometryCollection(); MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); bool polyOnly = true; for (int i = 0; i < selLayers.GetCount(); i++) { MgLayer layer = (MgLayer)selLayers.GetItem(i); // TODO: How to get selectionSize? //int selectionSize = 20; string filter = sel.GenerateFilter(layer, layer.GetFeatureClassName()); if (filter == "") { continue; } MgFeatureQueryOptions query = new MgFeatureQueryOptions(); query.SetFilter(filter); MgResourceIdentifier featureSource = new MgResourceIdentifier(layer.GetFeatureSourceId()); MgFeatureReader features = featureSrvc.SelectFeatures(featureSource, layer.GetFeatureClassName(), query); if (features != null) { MgClassDefinition classDef = features.GetClassDefinition(); String geomPropName = classDef.GetDefaultGeometryPropertyName(); int j = 0; //bool isPoly = true; while (features.ReadNext()) { MgByteReader geomReader = features.GetGeometry(geomPropName); MgGeometry geom = agfRW.Read(geomReader); if (j++ == 0) { int type = geom.GetGeometryType(); if (type == MgGeometryType.MultiPolygon || type == MgGeometryType.CurvePolygon || type == MgGeometryType.MultiCurvePolygon) { //isPoly = false; polyOnly = false; } else if (type != MgGeometryType.Polygon) { break; } } geomColl.Add(geom); } features.Close(); features.Dispose(); } } if (geomColl.GetCount() == 0) { return(null); } MgGeometryFactory gf = new MgGeometryFactory(); if (polyOnly) { MgPolygonCollection polyColl = new MgPolygonCollection(); for (int j = 0; j < geomColl.GetCount(); j++) { polyColl.Add((MgPolygon)geomColl.GetItem(j)); } return(gf.CreateMultiPolygon(polyColl)); } else { return(gf.CreateMultiGeometry(geomColl)); } }
private void btnFindFeaturesInBuffer_Click(object sender, EventArgs e) { MgSelectionBase selection = _viewer.GetSelection(); MgReadOnlyLayerCollection selectedLayers = selection.GetLayers(); if (selectedLayers == null) { MessageBox.Show("Select a parcel"); return; } MgLayerBase parcels = null; for (int i = 0; i < selectedLayers.GetCount(); i++) { MgLayerBase layer = selectedLayers.GetItem(i); if (layer.Name == "Parcels") { parcels = layer; break; } } if (parcels == null) { MessageBox.Show("Select a parcel"); return; } int bufferRingSize = 500; // measured in metres // Set up some objects for coordinate conversion MgMapBase map = _viewer.GetMap(); MgLayerCollection mapLayers = map.GetLayers(); MgMapViewerProvider provider = _viewer.GetProvider(); MgResourceService resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService); //Casting to MgdFeatureService because we want to use convenience APIs MgFeatureService featureService = (MgdFeatureService)provider.CreateService(MgServiceType.FeatureService); string sessionId = Guid.NewGuid().ToString(); String mapWktSrs = map.GetMapSRS(); MgAgfReaderWriter agfReaderWriter = new MgAgfReaderWriter(); MgWktReaderWriter wktReaderWriter = new MgWktReaderWriter(); MgCoordinateSystemFactory coordinateSystemFactory = new MgCoordinateSystemFactory(); MgCoordinateSystem srs = coordinateSystemFactory.Create(mapWktSrs); MgMeasure srsMeasure = srs.GetMeasure(); // Check for a buffer layer. If it exists, delete // the current features. // If it does not exist, create a feature source and // a layer to hold the buffer. BufferHelper helper = new BufferHelper(); MgdLayer bufferLayer = null; int layerIndex = map.GetLayers().IndexOf("Buffer"); if (layerIndex < 0) { // The layer does not exist and must be created. MgResourceIdentifier bufferFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//Buffer.FeatureSource"); helper.CreateBufferFeatureSource(featureService, mapWktSrs, bufferFeatureResId); bufferLayer = helper.CreateBufferLayer(resourceService, bufferFeatureResId, sessionId); map.GetLayers().Insert(0, bufferLayer); } else { bufferLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex); bufferLayer.DeleteFeatures("ID like '%'"); } // Check for a parcel marker layer. If it exists, delete // the current features. // If it does not exist, create a feature source and // a layer to hold the parcel markers. MgdLayer parcelMarkerLayer = null; layerIndex = map.GetLayers().IndexOf("ParcelMarker"); if (layerIndex < 0) { MgResourceIdentifier parcelFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//ParcelMarker.FeatureSource"); helper.CreateParcelMarkerFeatureSource(featureService, mapWktSrs, parcelFeatureResId); parcelMarkerLayer = helper.CreateParcelMarkerLayer(resourceService, parcelFeatureResId, sessionId); map.GetLayers().Insert(0, parcelMarkerLayer); } else { parcelMarkerLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex); parcelMarkerLayer.DeleteFeatures("ID like '%'"); } // Check each layer in the selection. for (int i = 0; i < selectedLayers.GetCount(); i++) { // Only check selected features in the Parcels layer. MgdLayer layer = (MgdLayer)selectedLayers.GetItem(i); if (layer.GetName() == "Parcels") { string geomName = layer.GetFeatureGeometryName(); System.Diagnostics.Trace.TraceInformation("Marking all parcels inside the buffer that are of type 'MFG'"); MgFeatureReader featureReader = selection.GetSelectedFeatures(layer, layer.GetFeatureClassName(), false); // Process each item in the MgFeatureReader. Get the // geometries from all the selected features and // merge them into a single geometry. MgGeometryCollection inputGeometries = new MgGeometryCollection(); while (featureReader.ReadNext()) { MgByteReader featureGeometryData = featureReader.GetGeometry(geomName); MgGeometry featureGeometry = agfReaderWriter.Read(featureGeometryData); inputGeometries.Add(featureGeometry); } MgGeometryFactory geometryFactory = new MgGeometryFactory(); MgGeometry mergedGeometries = geometryFactory.CreateMultiGeometry(inputGeometries); // Create a buffer from the merged geometries double bufferDist = srs.ConvertMetersToCoordinateSystemUnits(bufferRingSize); MgGeometry bufferGeometry = mergedGeometries.Buffer(bufferDist, srsMeasure); // Create a filter to select parcels within the buffer. Combine // a basic filter and a spatial filter to select all parcels // within the buffer that are of type "MFG". MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter("RTYPE = 'MFG'"); queryOptions.SetSpatialFilter(geomName, bufferGeometry, MgFeatureSpatialOperations.Inside); featureReader = layer.SelectFeatures(queryOptions); // Get the features from the feature source, // determine the centroid of each selected feature, and // add a point to the ParcelMarker layer to mark the // centroid. // Collect all the points into an MgFeatureCommandCollection, // so they can all be added in one operation. MgFeatureCommandCollection parcelMarkerCommands = new MgFeatureCommandCollection(); int inserted = 0; while (featureReader.ReadNext()) { MgByteReader byteReader = featureReader.GetGeometry(geomName); MgGeometry geometry = agfReaderWriter.Read(byteReader); MgPoint point = geometry.GetCentroid(); // Create an insert command for this parcel. MgPropertyCollection properties = new MgPropertyCollection(); properties.Add(new MgGeometryProperty("ParcelLocation", agfReaderWriter.Write(point))); //parcelMarkerCommands.Add(new MgInsertFeatures("ParcelMarkerClass", properties)); MgFeatureReader fr = parcelMarkerLayer.InsertFeatures(properties); fr.Close(); inserted++; } featureReader.Close(); if (inserted == 0) { MessageBox.Show("No parcels within the buffer area match."); return; } // Create a feature in the buffer feature source to show the area covered by the buffer. MgPropertyCollection props = new MgPropertyCollection(); props.Add(new MgGeometryProperty("BufferGeometry", agfReaderWriter.Write(bufferGeometry))); bufferLayer.InsertFeatures(props); // Ensure that the buffer layer is visible and in the legend. bufferLayer.SetVisible(true); bufferLayer.ForceRefresh(); bufferLayer.SetDisplayInLegend(true); parcelMarkerLayer.SetVisible(true); parcelMarkerLayer.ForceRefresh(); MessageBox.Show("Done"); _viewer.RefreshMap(); IMapLegend legend = Shell.Instance.Legend; if (legend != null) legend.RefreshLegend(); } } }
private void FillValues(string Filter) { MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter(Filter); MgFeatureReader reader = mLayer.SelectFeatures(queryOptions); reader.ReadNext(); List<string> ToDelete = new List<string>(); foreach (var item in PropertiesCollection) { try { int propertyType = reader.GetPropertyType(item.Key); item.Value.PropertyType = propertyType; if (item.Key.ToUpper() == "UID" || item.Key.ToUpper() == "ID" || item.Key == "FeatId") { item.Value.IsReadOnly = true; } if (reader.IsNull(item.Key)) { if (propertyType == MgPropertyType.String) { item.Value.Value = string.Empty; } continue; } switch (propertyType) { case MgPropertyType.Boolean: item.Value.LoadValue(reader.GetBoolean(item.Key)); break; case MgPropertyType.Byte: item.Value.LoadValue(reader.GetByte(item.Key)); break; case MgPropertyType.Double: item.Value.LoadValue(reader.GetDouble(item.Key)); break; case MgPropertyType.Int16: item.Value.LoadValue(reader.GetInt16(item.Key)); break; case MgPropertyType.Int32: item.Value.LoadValue(reader.GetInt32(item.Key)); break; case MgPropertyType.Int64: item.Value.LoadValue(reader.GetInt64(item.Key)); break; case MgPropertyType.Single: item.Value.LoadValue(reader.GetSingle(item.Key)); break; case MgPropertyType.DateTime: string strDT = ""; MgDateTime dt = reader.GetDateTime(item.Key); if (dt != null) strDT = string.Format("{0}/{1}/{2}", dt.Day, dt.Month, dt.Year); item.Value.LoadValue(strDT); break; case MgPropertyType.String: string s = reader.GetString(item.Key); item.Value.LoadValue(reader.GetString(item.Key)); if (item.Value.Value.ToString().IndexOf("<a ") >= 0) { ToDelete.Add(item.Key); } break; default: break; } } catch (MgObjectNotFoundException ex) { ToDelete.Add(item.Key); } } foreach (var Key in ToDelete) { PropertiesCollection.Remove(Key); } GetAviableValues(reader.ToXml().ToString()); }
public void FillValues(string filter) { MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter(filter); MgFeatureReader reader = this.Layer.SelectFeatures(queryOptions); reader.ReadNext(); this.FillValues(reader); }
//--------------------------------------------------------------------------------------- // // ���ܣ�����Ҫ�ض��� // // ���ߣ� // // ���ڣ� 2007.5.23 // // ����ʷ���� // //--------------------------------------------------------------------------------------- public bool UpdateFeature(ParcelProperty newFeatureValue) { MgResourceService resService = (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService); MgFeatureService featService = (MgFeatureService)siteConnection.CreateService(MgServiceType.FeatureService); MgFeatureQueryOptions query = new MgFeatureQueryOptions(); string filterString = "Autogenerated_SDF_ID = " + newFeatureValue.ID; query.SetFilter(filterString); MgResourceIdentifier resId = new MgResourceIdentifier("Library://MgTutorial/Data/Parcels.FeatureSource"); MgFeatureReader featureReader = featService.SelectFeatures(resId, "Parcels", query); if (featureReader.ReadNext()) { featureReader.Close(); MgPropertyCollection properties = buildPropertyCol(newFeatureValue); MgFeatureCommandCollection commands = new MgFeatureCommandCollection(); commands.Add(new MgUpdateFeatures("SHP_Schema:Parcels", properties, filterString)); featService.UpdateFeatures(resId, commands, false); return true; } featureReader.Close(); return false; }
private void SetPropertyMinMaxCount(MgLayerBase layer, MgDataPropertyDefinition prop) { var provider = _viewer.GetProvider(); var featureService = (MgFeatureService)provider.CreateService(MgServiceType.FeatureService); MgResourceIdentifier resId = new MgResourceIdentifier(layer.GetFeatureSourceId()); String minValue = null; String maxValue = null; int count = 0; MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.AddFeatureProperty(prop.Name); MgFeatureReader featureReader = featureService.SelectFeatures(resId, layer.GetFeatureClassName(), queryOptions); Dictionary <string, string> bucket = new Dictionary <string, string>(); while (featureReader.ReadNext()) { String value = Util.GetFeaturePropertyValue(featureReader, prop.Name); bucket[value] = value; int propertyType = featureReader.GetPropertyType(prop.Name); if (count == 0) { maxValue = value; minValue = value; } switch (propertyType) { case MgPropertyType.String: if (value.Length > 0) { if (value.CompareTo(maxValue) > 0) { maxValue = value; } if (value.CompareTo(minValue) < 0) { minValue = value; } } break; case MgPropertyType.Byte: case MgPropertyType.Int16: case MgPropertyType.Int32: case MgPropertyType.Int64: if (value.Length > 0) { if (Int64.Parse(value) > Int64.Parse(maxValue)) { maxValue = value; } if (Int64.Parse(value) < Int64.Parse(minValue)) { minValue = value; } } break; case MgPropertyType.Single: case MgPropertyType.Double: if (value != null) { if (Double.Parse(value) > Double.Parse(maxValue)) { maxValue = value; } if (Double.Parse(value) < Double.Parse(minValue)) { minValue = value; } } count++; break; case MgPropertyType.Boolean: case MgPropertyType.DateTime: case MgPropertyType.Null: case MgPropertyType.Blob: case MgPropertyType.Clob: case MgPropertyType.Feature: case MgPropertyType.Geometry: break; } count++; } featureReader.Close(); txtMin.Text = minValue; txtMax.Text = maxValue; if (THEME_INDIVIDUAL == cmbDistribution.SelectedValue.ToString()) { count = bucket.Count; } numRules.Value = featureCount = count; }
private bool MaintenanceForFeatureExists(MgResourceIdentifier featureSourceId, MgResourceIdentifier maintenanceResId) { bool result = false; if (_resourceService.ResourceExists(maintenanceResId)) { MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(String.Format("FeatureSource='{0}' AND UID = {1}", featureSourceId.ToString(), GetParameter(this.args, "MARKUPFEATURE"))); MgFeatureReader reader = _featureService.SelectFeatures(maintenanceResId, "Maintenance:Maintenance", opt); if (reader.ReadNext()) { result = true; } } return result; }
public static Feature GetSingleFeature(HtzMgHelper helper, string filter, string layerName, string uidKey) { Feature result = null; if (helper.Map.GetLayers().Contains(layerName)) { MgLayer layer = (MgLayer)helper.Map.GetLayers().GetItem(layerName); if (string.IsNullOrEmpty(filter)) { return result; } MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(filter); MgFeatureReader reader = helper.FeatureService.SelectFeatures(new MgResourceIdentifier(layer.FeatureSourceId), layer.FeatureClassName, opt); if (reader.ReadNext()) { result = new Feature(helper, layerName, "", uidKey); result.FillValues(reader); result.FillLookUpValues(); } } return result; }
private void GetOrderValues() { string schemaName = this.Layer.FeatureClassName.Split(new char[] { ':' })[0]; string filter = string.Format("FEAT_CLASS_NAME = '{0}'", this.Layer.FeatureClassName.Split(new char[] { ':' })[1]); MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(filter); if (this._helper.FeatureService.GetClasses(new MgResourceIdentifier(this.Layer.FeatureSourceId), schemaName).Contains(schemaName + ":FIELDS_ORDER")) { MgFeatureReader reader = this._helper.FeatureService.SelectFeatures(new MgResourceIdentifier(this.Layer.FeatureSourceId), "FIELDS_ORDER", opt); while (reader.ReadNext()) { string propertyName = reader.GetString("PROPERTY_NAME"); int orderId = reader.GetInt32("ORDER_ID"); if (this.Properties.ContainsKey(propertyName)) { this.Properties[propertyName].OrderId = orderId; } } } }
private void btnFindFeaturesInBuffer_Click(object sender, EventArgs e) { MgSelectionBase selection = _viewer.GetSelection(); MgReadOnlyLayerCollection selectedLayers = selection.GetLayers(); if (selectedLayers == null) { MessageBox.Show("Select a parcel"); return; } MgLayerBase parcels = null; for (int i = 0; i < selectedLayers.GetCount(); i++) { MgLayerBase layer = selectedLayers.GetItem(i); if (layer.Name == "Parcels") { parcels = layer; break; } } if (parcels == null) { MessageBox.Show("Select a parcel"); return; } int bufferRingSize = 500; // measured in metres // Set up some objects for coordinate conversion MgMapBase map = _viewer.GetMap(); MgLayerCollection mapLayers = map.GetLayers(); MgMapViewerProvider provider = _viewer.GetProvider(); MgResourceService resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService); //Casting to MgdFeatureService because we want to use convenience APIs MgFeatureService featureService = (MgdFeatureService)provider.CreateService(MgServiceType.FeatureService); string sessionId = Guid.NewGuid().ToString(); String mapWktSrs = map.GetMapSRS(); MgAgfReaderWriter agfReaderWriter = new MgAgfReaderWriter(); MgWktReaderWriter wktReaderWriter = new MgWktReaderWriter(); MgCoordinateSystemFactory coordinateSystemFactory = new MgCoordinateSystemFactory(); MgCoordinateSystem srs = coordinateSystemFactory.Create(mapWktSrs); MgMeasure srsMeasure = srs.GetMeasure(); // Check for a buffer layer. If it exists, delete // the current features. // If it does not exist, create a feature source and // a layer to hold the buffer. BufferHelper helper = new BufferHelper(); MgdLayer bufferLayer = null; int layerIndex = map.GetLayers().IndexOf("Buffer"); if (layerIndex < 0) { // The layer does not exist and must be created. MgResourceIdentifier bufferFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//Buffer.FeatureSource"); helper.CreateBufferFeatureSource(featureService, mapWktSrs, bufferFeatureResId); bufferLayer = helper.CreateBufferLayer(resourceService, bufferFeatureResId, sessionId); map.GetLayers().Insert(0, bufferLayer); } else { bufferLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex); bufferLayer.DeleteFeatures("ID like '%'"); } // Check for a parcel marker layer. If it exists, delete // the current features. // If it does not exist, create a feature source and // a layer to hold the parcel markers. MgdLayer parcelMarkerLayer = null; layerIndex = map.GetLayers().IndexOf("ParcelMarker"); if (layerIndex < 0) { MgResourceIdentifier parcelFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//ParcelMarker.FeatureSource"); helper.CreateParcelMarkerFeatureSource(featureService, mapWktSrs, parcelFeatureResId); parcelMarkerLayer = helper.CreateParcelMarkerLayer(resourceService, parcelFeatureResId, sessionId); map.GetLayers().Insert(0, parcelMarkerLayer); } else { parcelMarkerLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex); parcelMarkerLayer.DeleteFeatures("ID like '%'"); } // Check each layer in the selection. for (int i = 0; i < selectedLayers.GetCount(); i++) { // Only check selected features in the Parcels layer. MgdLayer layer = (MgdLayer)selectedLayers.GetItem(i); if (layer.GetName() == "Parcels") { string geomName = layer.GetFeatureGeometryName(); System.Diagnostics.Trace.TraceInformation("Marking all parcels inside the buffer that are of type 'MFG'"); MgFeatureReader featureReader = selection.GetSelectedFeatures(layer, layer.GetFeatureClassName(), false); // Process each item in the MgFeatureReader. Get the // geometries from all the selected features and // merge them into a single geometry. MgGeometryCollection inputGeometries = new MgGeometryCollection(); while (featureReader.ReadNext()) { MgByteReader featureGeometryData = featureReader.GetGeometry(geomName); MgGeometry featureGeometry = agfReaderWriter.Read(featureGeometryData); inputGeometries.Add(featureGeometry); } MgGeometryFactory geometryFactory = new MgGeometryFactory(); MgGeometry mergedGeometries = geometryFactory.CreateMultiGeometry(inputGeometries); // Create a buffer from the merged geometries double bufferDist = srs.ConvertMetersToCoordinateSystemUnits(bufferRingSize); MgGeometry bufferGeometry = mergedGeometries.Buffer(bufferDist, srsMeasure); // Create a filter to select parcels within the buffer. Combine // a basic filter and a spatial filter to select all parcels // within the buffer that are of type "MFG". MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions(); queryOptions.SetFilter("RTYPE = 'MFG'"); queryOptions.SetSpatialFilter(geomName, bufferGeometry, MgFeatureSpatialOperations.Inside); featureReader = layer.SelectFeatures(queryOptions); // Get the features from the feature source, // determine the centroid of each selected feature, and // add a point to the ParcelMarker layer to mark the // centroid. // Collect all the points into an MgFeatureCommandCollection, // so they can all be added in one operation. MgFeatureCommandCollection parcelMarkerCommands = new MgFeatureCommandCollection(); int inserted = 0; while (featureReader.ReadNext()) { MgByteReader byteReader = featureReader.GetGeometry(geomName); MgGeometry geometry = agfReaderWriter.Read(byteReader); MgPoint point = geometry.GetCentroid(); // Create an insert command for this parcel. MgPropertyCollection properties = new MgPropertyCollection(); properties.Add(new MgGeometryProperty("ParcelLocation", agfReaderWriter.Write(point))); //parcelMarkerCommands.Add(new MgInsertFeatures("ParcelMarkerClass", properties)); MgFeatureReader fr = parcelMarkerLayer.InsertFeatures(properties); fr.Close(); inserted++; } featureReader.Close(); if (inserted == 0) { MessageBox.Show("No parcels within the buffer area match."); return; } // Create a feature in the buffer feature source to show the area covered by the buffer. MgPropertyCollection props = new MgPropertyCollection(); props.Add(new MgGeometryProperty("BufferGeometry", agfReaderWriter.Write(bufferGeometry))); bufferLayer.InsertFeatures(props); // Ensure that the buffer layer is visible and in the legend. bufferLayer.SetVisible(true); bufferLayer.ForceRefresh(); bufferLayer.SetDisplayInLegend(true); parcelMarkerLayer.SetVisible(true); parcelMarkerLayer.ForceRefresh(); MessageBox.Show("Done"); _viewer.RefreshMap(); IMapLegend legend = Shell.Instance.Legend; if (legend != null) { legend.RefreshLegend(); } } } }
public void UpdateFeature(string filter) { MgResourceIdentifier featureResId = new MgResourceIdentifier(this.Layer.GetFeatureSourceId()); MgClassDefinition classDefinition = this._helper.FeatureService.GetClassDefinition(featureResId, this.Layer.FeatureClassName.Split(new char[] { ':' })[0], this.Layer.FeatureClassName.Split(new char[] { ':' })[1]); Dictionary<string, Dictionary<string, FeatureProperty>> propCollection = new Dictionary<string, Dictionary<string, FeatureProperty>>(); string attributeClassProperty = string.Empty; string attributeClass = string.Empty; string attributeResourceId = string.Empty; string featureClassPropertyValue = string.Empty; try { XmlNodeList extensions = ResourceHelper.GetResourceXml(this._helper, featureResId).GetElementsByTagName("Extension"); XmlNode attrRelateNode = extensions[0].SelectSingleNode("AttributeRelate"); if ((attrRelateNode != null) && (extensions.Count > 0)) { string featureClassProperty = attrRelateNode.SelectSingleNode("RelateProperty/FeatureClassProperty").InnerText; attributeClassProperty = attrRelateNode.SelectSingleNode("RelateProperty/AttributeClassProperty").InnerText; attributeClass = attrRelateNode.SelectSingleNode("AttributeClass").InnerText; attributeResourceId = attrRelateNode.SelectSingleNode("ResourceId").InnerText; MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(filter); MgFeatureReader reader = this._helper.FeatureService.SelectFeatures(featureResId, this.Layer.FeatureClassName, opt); reader.ReadNext(); featureClassPropertyValue = this._helper.GetFeaturePropertyValue(reader, featureClassProperty).ToString(); reader.Close(); reader.Dispose(); } } catch (Exception) { } foreach (MgPropertyDefinition item in classDefinition.GetProperties()) { if (this.Properties.ContainsKey(item.Name)) { string[] strs = item.QualifiedName.Split(new char[] { '.' }); if (!propCollection.ContainsKey(strs[0])) { propCollection.Add(strs[0], new Dictionary<string, FeatureProperty>()); } propCollection[strs[0]].Add(item.QualifiedName.Split(new char[] { '.' })[1], this.Properties[item.Name]); } } foreach (KeyValuePair<string, Dictionary<string, FeatureProperty>> item in propCollection) { string f = filter; MgResourceIdentifier resId = featureResId; if ((item.Key == attributeClass) && !string.IsNullOrEmpty(featureClassPropertyValue)) { f = string.Format("{0}={1}", attributeClassProperty, featureClassPropertyValue); resId = new MgResourceIdentifier(attributeResourceId); } this.UpdatingFeature(resId, item.Key, f, item.Value); } }
private void btnExecute_Click(object sender, EventArgs e) { var query = new MgFeatureQueryOptions(); var provider = _viewer.GetProvider(); var layer = (MgLayerBase)cmbLayer.SelectedItem; var prop = (MgDataPropertyDefinition)cmbProperty.SelectedItem; var op = (QueryOperator)cmbOperator.SelectedItem; if (chkPropFilterEnabled.Checked) query.SetFilter(FilterToString(prop, op, txtValue.Text)); if (chkSpatialFilter.Checked) query.SetSpatialFilter(layer.GetFeatureGeometryName(), _filterGeometry, MgFeatureSpatialOperations.Intersects); var reader = layer.SelectFeatures(query); new MgQueryResultsDialog(_viewer, layer, reader, Convert.ToInt32(numResults.Value)).Show(); }
public IFeatureReader QueryFeatureSource(string resourceID, string schema, string query, string[] columns, NameValueCollection computedProperties) { var fes = GetFeatureService(); MgFeatureQueryOptions mgf = new MgFeatureQueryOptions(); if (query != null) mgf.SetFilter(query); if (columns != null && columns.Length != 0) foreach (string s in columns) mgf.AddFeatureProperty(s); if (computedProperties != null && computedProperties.Count > 0) foreach (string s in computedProperties.Keys) mgf.AddComputedProperty(s, computedProperties[s]); var fsId = new MgResourceIdentifier(resourceID); MgFeatureReader mr = fes.SelectFeatures(fsId, schema, mgf); LogMethodCall("MgFeatureService::SelectFeatures", true, resourceID, schema, "MgFeatureQueryOptions"); return new LocalNativeFeatureReader(mr); }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string sessionId = GetRequestParameters(Request)["SESSION"]; string mapName = GetRequestParameters(Request)["MAPNAME"]; string locale = GetRequestParameters(Request)["LOCALE"]; if (string.IsNullOrEmpty(sessionId)) { Response.Clear(); Response.End(); return; } if (string.IsNullOrEmpty(mapName)) { Response.Clear(); Response.End(); return; } MgResourceService resourceSrvc = GetMgResurceService(sessionId); MgFeatureService featureSrvc = GetMgFeatureService(sessionId); MgMap map = new MgMap(); map.Open(resourceSrvc, mapName); string layernames = GetRequestParameters(Request)["LAYERNAMES"]; string GEOMETRY = GetRequestParameters(Request)["GEOMETRY"]; string selVar = GetRequestParameters(Request)["SELECTIONVARIANT"]; string type = GetRequestParameters(Request)["tp"]; string inputSel = GetRequestParameters(Request)["SELECTION"]; bool hasInputGeom = false; if (!string.IsNullOrEmpty(GEOMETRY)) { hasInputGeom = true; } //selection ima prednost pred podano geometrijo ... MgWktReaderWriter wktrw = new MgWktReaderWriter(); if (!string.IsNullOrEmpty(inputSel)) { MgGeometry inputGeom = MultiGeometryFromSelection(featureSrvc, map, inputSel); GEOMETRY = wktrw.Write(inputGeom); } MgAgfReaderWriter agfRW = new MgAgfReaderWriter(); int nLayer = 0; // pobrišem in zgradim na novo samo tiste, ki imajo zadetke ... int nSloj = 0; string filter = ""; StringBuilder sbOut = new StringBuilder(); sbOut.Append("<table width=\"100%\" class=\"results\">"); sbOut.Append("<tr><td class='header'></td><td class='header'>" + "Layer" + "</td><td class='header' align=\"center\">" + "Select" + "</td><td class='header' align=\"center\">" + "Report" + "</td></tr>"); MgSelection selAll = new MgSelection(map); foreach (MgLayer layer in map.GetLayers()) { if (type != "2") { if (!layer.IsVisible()) { goto nextlay; } } if (layer.LegendLabel == "") { goto nextlay; } try { nLayer++; filter = String.Format("{0} {1} GeomFromText('{2}')", layer.GetFeatureGeometryName(), selVar, GEOMETRY); //preveriti še filter na Layerju. Ker ne gre drugače, je potrebno pogledati v XML MgResourceIdentifier layerDefResId = layer.GetLayerDefinition(); MgByteReader byteReader = resourceSrvc.GetResourceContent(layerDefResId); System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); String xmlLayerDef = byteReader.ToString(); doc.LoadXml(xmlLayerDef); KALI.MGE.Objects.KALILayerDefinition.LayerDefinition ld = KALI.MGE.Objects.KALILayerDefinition.LayerDefinition.Parse(xmlLayerDef); if (!string.IsNullOrEmpty(ld.VectorLayerDefinition.Filter)) { filter += " AND (" + ld.VectorLayerDefinition.Filter + ")"; } //query the features MgFeatureQueryOptions opts = new MgFeatureQueryOptions(); opts.SetFilter(filter); String featureClassName = layer.GetFeatureClassName(); MgResourceIdentifier srcId = new MgResourceIdentifier(layer.GetFeatureSourceId()); MgFeatureReader features = featureSrvc.SelectFeatures(srcId, featureClassName, opts); bool hasResult = features.ReadNext(); if (hasResult) { nSloj++; int n = 0; MgClassDefinition classDef = features.GetClassDefinition(); MgPropertyDefinitionCollection classDefProps = classDef.GetIdentityProperties(); ArrayList idPropNames = new ArrayList(classDefProps.GetCount()); for (int j = 0; j < classDefProps.GetCount(); j++) { MgPropertyDefinition idProp = classDefProps.GetItem(j); idPropNames.Add(idProp.GetName()); } MgSelection sel = new MgSelection(map); do { // Generate XML to selection this feature MgPropertyCollection idProps = new MgPropertyCollection(); foreach (string id in idPropNames) { int idPropType = features.GetPropertyType(id); switch (idPropType) { case MgPropertyType.Int32: idProps.Add(new MgInt32Property(id, features.GetInt32(id))); break; case MgPropertyType.String: idProps.Add(new MgStringProperty(id, features.GetString(id))); break; case MgPropertyType.Int64: idProps.Add(new MgInt64Property(id, features.GetInt64(id))); break; case MgPropertyType.Double: idProps.Add(new MgDoubleProperty(id, features.GetDouble(id))); break; case MgPropertyType.Single: idProps.Add(new MgSingleProperty(id, features.GetSingle(id))); break; case MgPropertyType.DateTime: idProps.Add(new MgDateTimeProperty(id, features.GetDateTime(id))); break; default: //throw new SearchError(String.Format(MgLocalizer.GetString("SEARCHTYYPENOTSUP", locale), new Object[] { idPropType.ToString() }), searchError); break; } } sel.AddFeatureIds(layer, featureClassName, idProps); selAll.AddFeatureIds(layer, featureClassName, idProps); n++; //if (n > 1000) break; } while (features.ReadNext()); features.Close(); features.Dispose(); string selText = EscapeForHtml(sel.ToXml()); string seljs = "<div class=\"allLay\" onclick=\"parent.SetSelectionXML('" + selText + "');\"><img width=\"16\" height=\"16\" style=\"border:0\" src=\"images/mActionZoomToSelected.png\"/></div>"; string seljs3 = "<div class=\"allLay\" onclick=\"parent.MultiGridShow('" + selText + "');\"><img width=\"16\" height=\"16\" style=\"border:0\" src=\"images/mActionOpenTable.png\"/></div>"; string linfo = "<b>" + layer.LegendLabel + "</b><br />" + n.ToString() + " " + "Hits"; sbOut.Append("<tr><td class=\"results\">" + nSloj.ToString() + "</td><td class=\"results\">" + linfo + "</td><td align=\"center\" class=\"results\">" + seljs + "</td><td align=\"center\" class=\"results\">" + seljs3 + "</td></tr>"); } } catch (Exception) { continue; } nextlay: continue; } sbOut.Append("</table>"); string selAllText = EscapeForHtml(selAll.ToXml()); string seljsAll = "<div class=\"allLay\" onclick=\"parent.SetSelectionXML('" + selAllText + "');\"><img width=\"16\" height=\"16\" style=\"border:0\" src=\"images/mActionZoomToSelected.png\"/>" + "Select All" + "</div>"; string seljsAll3 = "<div class=\"allLay\" onclick=\"parent.MultiGridShow('" + selAllText + "');\"><img width=\"16\" height=\"16\" style=\"border:0\" src=\"images/mActionOpenTable.png\"/>" + "Report All" + "</div>"; sbOut.Append(string.Format("<br /><table width=\"100%\" class=\"results\"><tr><td class=\"results\">{0}</td><td class=\"results\">{1}</td></tr></table>", seljsAll, seljsAll3)); featureSrvc.Dispose(); resourceSrvc.Dispose(); if (nSloj > 0) { litPrebodi.Text = sbOut.ToString(); } else { litPrebodiTitle.Visible = false; litPrebodi.Text = "<b>" + "None layer lies below the selected item/area!" + "</b>"; } MgGeometry inGeom = wktrw.Read(GEOMETRY); double rw = map.ViewScale / Math.Sqrt(inGeom.Area); //koordinate if (hasInputGeom & rw > 400) { string output = ""; output = pointTransformAndWriteZ(GEOMETRY, map); litKoordinate.Text = output; litKoordinateTitle.Text = "Coordinates of selected points:"; } } }
public void CreateNew(int uid, string infrastructureType) { if (!string.IsNullOrEmpty(infrastructureType) && (infrastructureType != "בחר מרשימה")) { SetInfrastructureType(this._parentLayer.FeatureSourceId, infrastructureType); MgGeometryProperty geometry = null; MgResourceIdentifier resId = new MgResourceIdentifier(this._parentLayer.FeatureSourceId); MgFeatureQueryOptions opt = new MgFeatureQueryOptions(); opt.SetFilter(string.Format("{0}={1}", this._uidKey, uid)); MgFeatureReader reader = this._helper.FeatureService.SelectFeatures(resId, this._parentLayer.FeatureClassName, opt); MgClassDefinition classDefinition = this._helper.FeatureService.GetClassDefinition(resId, this._parentLayer.FeatureClassName.Split(new char[] { ':' })[0], this._parentLayer.FeatureClassName.Split(new char[] { ':' })[1]); if (classDefinition != null) { string geomName = classDefinition.DefaultGeometryPropertyName; if (reader.ReadNext()) { MgByteReader value = reader.GetGeometry(geomName); if (value != null) { geometry = new MgGeometryProperty(geomName, value); } } } reader.Close(); reader.Dispose(); if (geometry != null) { MgDateTime today = new MgDateTime(); MgPropertyCollection properties = new MgPropertyCollection { geometry, new MgInt32Property("UID", uid), new MgStringProperty("InfrastructureType", infrastructureType), new MgStringProperty("OperationType", "לא מוגדר"), new MgStringProperty("Status", "פתוח"), new MgStringProperty("FeatureSource", this._parentLayer.FeatureSourceId), new MgDateTimeProperty("dtStart", today), new MgDateTimeProperty("dtDue", today), new MgDateTimeProperty("dtUpdate", today) }; MgInsertFeatures insert = new MgInsertFeatures("Maintenance", properties); MgFeatureCommandCollection commands = new MgFeatureCommandCollection { insert }; this._helper.FeatureService.UpdateFeatures(this._sdfResId, commands, false); } } }