using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Geometry;
using ESRI.ArcGIS.Client.Tasks;
using System.Net;
using System.IO;
namespace ArcGISDemo
{
//自定义的Feature
class FeatureItem
{
public Geometry Geometry { set; get; }
public IDictionary Attributes { set; get; }
};
class Program
{
static bool AddFeature(string layerUrl, FeatureItem featureItem)
{
string url = layerUrl+"/addFeatures";
string data = "f=json"; //以json格式返回结果
ESRI.ArcGIS.Client.Graphic g = new ESRI.ArcGIS.Client.Graphic()
{
//Graphic的Attributes在ArcGIS API for WPF 中是只读的
//如果是可写的,就可以直接使用Graphic的Attributes,而不需要拼接json
//Attributes = featureItem.Attributes,
Geometry = featureItem.Geometry
};
FeatureSet fs = new FeatureSet();
fs.Features.Add(g);
//使用FeatureSet自带的ToJson函数转换,可以帮助转换Feature的Geometry对象
//ArcGIS的Geometry对象序列化为json字符串时和标准的json不太一样
string json = fs.ToJson();
int begin = json.IndexOf("[");
int end = json.IndexOf("]", begin);
string featuresJson = json.Substring(begin, end - begin + 1);
string features = string.Format("&features={0}", featuresJson);
data += features;
//使用fastJson转换Attributes
//fastJSON.JSON.Instance.Parameters.UseEscapedUnicode = false;
//string attr = fastJSON.JSON.Instance.ToJSON(featureItem.Attributes);
string attr = Newtonsoft.Json.JsonConvert.SerializeObject(featureItem.Attributes);
//int attrPos = data.IndexOf("attributes");
//将原来空的Attributes替换掉,以自己转换的json字符串实际情况为准
string para = data.Replace("\"attributes\":{}","\"attributes\":"+attr);
string res = PostData(url, para);
//处理返回的结果
if (res.Contains("error"))
return false;
Dictionary>> resDic
= Newtonsoft.Json.JsonConvert.DeserializeObject>>>(res);
if (resDic.ContainsKey("addResults"))
{
List> addRes = resDic["addResults"];
foreach (Dictionary dic in addRes)
{
if (dic.ContainsKey("success"))
{
if (dic["success"].ToString().ToLower() == "true")
return true;
else return false;
}
}
}
return false;
}
static string PostData(string url, string data)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
byte[] bs = Encoding.UTF8.GetBytes(data);
Stream reqStream = request.GetRequestStream();
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
string responseString = null;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
responseString = reader.ReadToEnd();
reader.Close();
}
return responseString;
}
static void Main(string[] args)
{
string url = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0";
MapPoint point = new MapPoint(105, 30);
FeatureItem fi = new FeatureItem();
fi.Geometry = point;
fi.Attributes = new Dictionary();
fi.Attributes.Add("description", "测试点");
bool res = AddFeature(url, fi);
if (res)
{
Console.WriteLine("添加要素成功!");
}
else
{
Console.WriteLine("添加要素失败!");
}
Console.ReadKey();
}
}
}