对GeoServer要素进行操作,要通过xml的文件格式,因此要先组织对应的xml文件。
插入的insert.xml格式如下图:
代码创建新增的xml文件:
#region 创建新增xml文件
/// <summary>
/// 创建新增xml文件
/// </summary>
/// <param name="points">要素点信息</param>
/// <param name="layerName">服务图层名</param>
/// <param name="sName"></param>
/// <param name="sLpkName"></param>
/// <param name="sPeriod"></param>
/// <param name="sSCode"></param>
/// <param name="sCCode"></param>
/// <param name="sXCode"></param>
/// <param name="sType"></param>
public string CreateInsertXML(string points, string layerName, string sName, string sLpkName, string sPeriod, string sSCode, string sCCode , string sXCode, string sType)
{
XmlDocument xmldoc = new XmlDocument();
XmlElement transaction = xmldoc.CreateElement("Transaction");
xmldoc.AppendChild(transaction);
transaction.SetAttribute("xmlns", "http://www.opengis.net/wfs");
transaction.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
transaction.SetAttribute("service", "WFS");
transaction.SetAttribute("version", "1.1.0");
transaction.SetAttribute("xsi:schemaLocation", "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd");
XmlElement insert = xmldoc.CreateElement("Insert");
transaction.AppendChild(insert);
XmlElement scope = xmldoc.CreateElement(workSpace, layerName, ":");
insert.AppendChild(scope);
scope.SetAttribute("xmlns:" + workSpace, workSpace);
// 兄弟节点
XmlElement geom = xmldoc.CreateElement(workSpace, "geom", ":");
scope.AppendChild(geom);
// 名称
XmlElement sNAME = xmldoc.CreateElement(workSpace, "s_name", ":");
scope.AppendChild(sNAME);
sNAME.InnerText = sName;
// 包名
XmlElement sLPKNAME = xmldoc.CreateElement(workSpace, "s_lpk_name", ":");
scope.AppendChild(sLPKNAME);
sLPKNAME.InnerText = sLpkName;
// 时间
XmlElement sPERIOD = xmldoc.CreateElement(workSpace, "s_period", ":");
scope.AppendChild(sPERIOD);
sPERIOD.InnerText = sPeriod;
// 类型
XmlElement sTYPE = xmldoc.CreateElement(workSpace, "s_type", ":");
scope.AppendChild(sTYPE);
sTYPE.InnerText = sType;
// 省
XmlElement sSCODE = xmldoc.CreateElement(workSpace, "s_s_code", ":");
scope.AppendChild(sSCODE);
sSCODE.InnerText = sSCode;
// 市
XmlElement sCCODE = xmldoc.CreateElement(workSpace, "s_c_code", ":");
scope.AppendChild(sCCODE);
sCCODE.InnerText = sCCode;
// 区
XmlElement sXCODE = xmldoc.CreateElement(workSpace, "s_x_code", ":");
scope.AppendChild(sXCODE);
sXCODE.InnerText = sXCode;
XmlElement multiPolygon = xmldoc.CreateElement("MultiPolygon");
geom.AppendChild(multiPolygon);
multiPolygon.SetAttribute("xmlns", "http://www.opengis.net/gml");
XmlElement polygonMember = xmldoc.CreateElement("polygonMember");
multiPolygon.AppendChild(polygonMember);
XmlElement polygon = xmldoc.CreateElement("Polygon");
polygonMember.AppendChild(polygon);
XmlElement exterior = xmldoc.CreateElement("exterior");
polygon.AppendChild(exterior);
XmlElement linearRing = xmldoc.CreateElement("LinearRing");
exterior.AppendChild(linearRing);
XmlElement posList = xmldoc.CreateElement("posList");
linearRing.AppendChild(posList);
posList.SetAttribute("srsDimension", "2");
posList.InnerText = points;
return CreatePost(serverUrl, xmldoc.InnerXml, "text/xml");
}
#endregion
创建完成后发送post请求即可,CreatePost实现。
实际调用:
string resultCloudXml = CreateInsertXML(pointsCloud, cloudLayerName, curLpkInfo.SAlias, curLpkInfo.SPackagename, sPeriod, curLpkCode.SScode, curLpkCode.SCcode, curLpkCode.SXcode, curLpkInfo.SType);
// 判断是否插入成功
XmlDocument xmlDocCloud = new XmlDocument();
xmlDocCloud.LoadXml(resultCloudXml);
if (xmlDocCloud.InnerText != “100”) // 当返回的innerText为100时插入成功
{
// 要素写入服务失败
return;
}
删除的delete.xml格式如下图:
代码创建删除的xml文件:
#region 创建删除xml文件
public string CreateDeleteXML(string layerName, string fid)
{
XmlDocument xmldoc = new XmlDocument();
XmlElement transaction = xmldoc.CreateElement("Transaction");
xmldoc.AppendChild(transaction);
transaction.SetAttribute("xmlns", "http://www.opengis.net/wfs");
transaction.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
transaction.SetAttribute("service", "WFS");
transaction.SetAttribute("version", "1.1.0");
transaction.SetAttribute("xsi:schemaLocation", "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd");
XmlElement delete = xmldoc.CreateElement("Delete");
transaction.AppendChild(delete);
delete.SetAttribute("xmlns:feature", workSpace);
delete.SetAttribute("typeName", workSpace + ":" + layerName);
XmlElement filter = xmldoc.CreateElement("Filter");
delete.AppendChild(filter);
filter.SetAttribute("xmlns", "http://www.opengis.net/ogc");
XmlElement featrueId = xmldoc.CreateElement("FeatureId");
filter.AppendChild(featrueId);
featrueId.SetAttribute("fid", fid);
return CreatePost(serverUrl, xmldoc.InnerXml, "text/xml");
}
#endregion
创建完成后发送post请求即可,CreatePost实现。
实际调用:
string resultXml = CreateDeleteXML(lasLayerName, r.id.ToString());
// 判断是否删除成功
XmlDocument xmlDocCloud = new XmlDocument();
xmlDocCloud.LoadXml(resultXml);
if (xmlDocCloud.InnerText != "001") // 当返回的innerText为001时删除成功
{
// 删除失败
return;
}