说明:首先要将sde要素类发布成对应的要素服务,通过对要素服务的操作,实现数据在sde要素类中的增删
//向服务器发出请求
public string getPostData(string postString, string url)
{
string result = "";
try
{
byte[] postData = Encoding.UTF8.GetBytes(postString);
WebClient webClient = new WebClient();
string method = "POST";
//POST Header
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//webClient.Headers.Add("Cache-Control", "no-cache");
//同步提交请求,并返回数据
byte[] responseData = webClient.UploadData(url, method, postData);//得到返回字符流
result = Encoding.UTF8.GetString(responseData);//解码
}
catch
{
return result;
}
return result;
}

#region 用c#直接读取shapfile的过程类
class Point//点类
{
public double X;
public double Y;
}
class Polyline//线类
{
public double[] Box = new double[];
public int NumParts;
public int NumPoints;
public ArrayList Parts; //在部分中第一个点的索引
public ArrayList Points; //所有部分的点
}
class Polygon : Polyline//面类
{ }
#endregion 用c#直接读取shapfile的过程类
//从服务器上读取shp文件流
public Stream GetShpStream(string url)
{
var client = new WebClient();
client.Encoding = Encoding.UTF8;
Uri uri = new Uri(url);
byte[] bytes = client.DownloadData(uri);
Stream pstream = new MemoryStream(bytes);
return pstream;
}
//将读取的shp流拼成符合sde要素类的图形
public static string GetGeometryFromShp(Stream stream, string czah)
{
//int wkid = 2362;//西安80
StringBuilder sb = new StringBuilder("[{");
sb.Append(@"""attributes""" + ":{\"CZAH\":\"" + czah + "\"},");//添加属性信息
sb.Append(@"""geometry""" + ":{");
ArrayList polygons = new ArrayList();//面集合
ArrayList polylines = new ArrayList();//线集合
ArrayList points = new ArrayList();//点集合
int ShapeType;//shp文件类型
double xmin, ymin, xmax, ymax;
//FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);//File.Open(filepath, FileMode.Open)
using (BinaryReader br = new BinaryReader(stream))
{
br.ReadBytes();
int FileLength = br.ReadInt32();//<0代表数据长度未知
int FileBanben = br.ReadInt32();
ShapeType = br.ReadInt32();
xmin = br.ReadDouble();
ymin = br.ReadDouble();
xmax = br.ReadDouble();
ymax = br.ReadDouble();
br.ReadBytes();
if (IsXian80(xmin, ymin, xmax, ymax))
{
if (ShapeType == )
{
polygons.Clear();
while (br.PeekChar() != -)
{
Polygon polygon = new Polygon();
polygon.Parts = new ArrayList();
polygon.Points = new ArrayList();
uint RecordNum = br.ReadUInt32();
int DataLength = br.ReadInt32();
//读取第i个记录
int m = br.ReadInt32();
for (int i = ; i < ; i++)
{
polygon.Box[i] = br.ReadDouble();
} polygon.NumParts = br.ReadInt32();
polygon.NumPoints = br.ReadInt32();
for (int j = ; j < polygon.NumParts; j++)
{
int parts = new int();
parts = br.ReadInt32();
polygon.Parts.Add(parts);
}
for (int j = ; j < polygon.NumPoints; j++)
{
Point pointtemp = new Point();
pointtemp.X = br.ReadDouble();
pointtemp.Y = br.ReadDouble();
polygon.Points.Add(pointtemp);
}
polygons.Add(polygon);
}
foreach (Polygon p in polygons)
{
sb.Append(@"""rings"":[");
for (int i = ; i < p.NumParts; i++)
{
int startpoint;
int endpoint;
if (i == p.NumParts - )
{
startpoint = (int)p.Parts[i];
endpoint = p.NumPoints;
}
else
{
startpoint = (int)p.Parts[i];
endpoint = (int)p.Parts[i + ];
}
sb.Append("[");
for (int k = , j = startpoint; j < endpoint; j++, k++)
{
Point ps = (Point)p.Points[j];
sb.Append("[" + ps.X + "," + ps.Y + "],");
}
sb.Remove(sb.Length - , );
sb.Append("],");
}
sb.Remove(sb.Length - , );
sb.Append("]");
}
}
}
else
{
return "noxian";
}
br.Close();
br.Dispose();
}
sb.Append("}");
sb.Append("}]");
return sb.ToString();
}
//添加要素到sde要素类中(url为发布的要素服务地址)
public bool addFeatureToFeatureClass(string feature, string url)
{
bool isSuccess = false;
url += "/addFeatures";
string postString = "features=" + feature + "";
postString += "&" + "f=json";
string result = getPostData(postString, url);
var result1 = JsonConvert.DeserializeObject<dynamic>(result);
var presult = result1.addResults[].success as IEnumerable<dynamic>;
string strresult = presult.ToString();
if (string.Equals(strresult, "True"))
{
isSuccess = true;
}
return isSuccess;
}

 

C#读取shp文件并获取图形保存到sde要素类中(不使用ESRI的类库,纯c#实现)的更多相关文章

  1. GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换

    GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...

  2. 使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像

    借助VS2013和OpenCV的绘图功能,在工程DICOMReader.sln中实现了对单张.dcm图像的读取与显示,以下是详细步骤. 前期准备工作 编译器:VS2013 库:dcmtk-3.6.0( ...

  3. 读取properties文件并获取属性值

    1.Properties与ResourceBundle 两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时操作相对简单. 2.Propertie ...

  4. mfc通过MapWinGIS控件读取shp文件(通过#import实现)

    在MFC工程中想使用MapWinGIS组件,有多种方法可以实现, 第一种方法,#Import来实现 1.首先注册MapWinGIS ActiveX组件, 2.新建一个单文档工程:MapGis,为控件添 ...

  5. 将mat文件中的数据按要求保存到txt文档中(批处理)

    之前有个老朋友,让帮忙将一个mat中的数据重新保存到txt中,由于数据比较多需要用到批处理,之前弄过很多次,但每次一到要用的时候总是忘记怎么写了,现在记录一下,免得后面老是需要上网搜.这里先说一个比较 ...

  6. FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...

  7. PHP操作:将数据库中的数据保存到Word、Excel中。

    1.首先要把word.excel表放到文件的根目录下 2.定义了一个word类 <?php class word { function start() { ob_start(); ob_star ...

  8. GeoTools介绍、环境安装、读取shp文件并显示

    GeoTools是一个开放源代码(LGPL)Java代码库,它提供了符合标准的方法来处理地理空间数据,例如实现地理信息系统(GIS).GeoTools库实现了开放地理空间联盟(OGC)规范. Geot ...

  9. arcgis for android 读取shp文件中文乱码解决方法

    设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...

随机推荐

  1. 【Unity Shaders】Using Textures for Effects——通过修改UV坐标来滚动textures

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  2. 15_Android中任务栈

     1.一个应用程序一般都是由多个activity组成的. 2.任务栈(task stack)(别名backstack后退栈)记录存放用户开启的activity的. 3.一个应用程序一被开启系统就给 ...

  3. OC第一天——面向对象

    1.OC: Object- C ,面向对象的语言 2.OC 和 C的区别: <1> oc是 c的超集 ,oc是在c语言的基础上做了扩展,c语言中的所有语法,在oc中都可以使用,甚至你可以在 ...

  4. 新手自定义view练习实例之(二) 波浪view

    本系列是为新手准备的自定义view练习项目(大牛请无视),相信在学习过程中,想学自定义view又无从下手,不知道做什么.本系列为新手提供了一系列自定义view的简单实例.看过理解之后,自己实现,相信会 ...

  5. 2013 HTML5中国峰会演讲:Android上的HTML5:过去,现在和将来

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 会议链接(应用和工具专场) http://2013.html5dw.com/main, 2013年8月10日 ...

  6. JavaScript进阶(三)常见工具(校验、通用)

    JS常见工具(校验.通用) // 姓名校验 var checkName = function(name) { // 收货人姓名校验(准则:姓名为2-4汉字) var regu = /^[\u4E00- ...

  7. 01_MUI之Boilerplate中:HTML5示例,动态组件,自定义字体示例,自定义字体示例,图标字体示例

     1安装HBuilder5.0.0,安装后的界面截图如下: 2 按照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明,创建上图的 ...

  8. Leetcode_24_Swap Nodes in Pairs

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302355 Given a linked list, s ...

  9. 使用JS取得焦点(focus)元素

    原文链接: Get the Focused Element with JavaScript 原文日期: 2014年3月19日 翻译日期: 2014年3月21日 翻译人员: 铁锚 对于良好的用户体验来说 ...

  10. 轻量级网络库libevent概况

    Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...