C#读取shp文件并获取图形保存到sde要素类中(不使用ESRI的类库,纯c#实现)
说明:首先要将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#实现)的更多相关文章
- GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...
- 使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像
借助VS2013和OpenCV的绘图功能,在工程DICOMReader.sln中实现了对单张.dcm图像的读取与显示,以下是详细步骤. 前期准备工作 编译器:VS2013 库:dcmtk-3.6.0( ...
- 读取properties文件并获取属性值
1.Properties与ResourceBundle 两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时操作相对简单. 2.Propertie ...
- mfc通过MapWinGIS控件读取shp文件(通过#import实现)
在MFC工程中想使用MapWinGIS组件,有多种方法可以实现, 第一种方法,#Import来实现 1.首先注册MapWinGIS ActiveX组件, 2.新建一个单文档工程:MapGis,为控件添 ...
- 将mat文件中的数据按要求保存到txt文档中(批处理)
之前有个老朋友,让帮忙将一个mat中的数据重新保存到txt中,由于数据比较多需要用到批处理,之前弄过很多次,但每次一到要用的时候总是忘记怎么写了,现在记录一下,免得后面老是需要上网搜.这里先说一个比较 ...
- FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...
- PHP操作:将数据库中的数据保存到Word、Excel中。
1.首先要把word.excel表放到文件的根目录下 2.定义了一个word类 <?php class word { function start() { ob_start(); ob_star ...
- GeoTools介绍、环境安装、读取shp文件并显示
GeoTools是一个开放源代码(LGPL)Java代码库,它提供了符合标准的方法来处理地理空间数据,例如实现地理信息系统(GIS).GeoTools库实现了开放地理空间联盟(OGC)规范. Geot ...
- arcgis for android 读取shp文件中文乱码解决方法
设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...
随机推荐
- Using mysqldump for Backups(备份还原数据库实例及参数详细说明)
官网mysqldump命令如下: Using mysqldump for Backups https://dev.mysql.com/doc/refman/5.7/en/using-mysqldump ...
- JSP编译成Servlet(二)语法树的遍历——访问者模式
语法树可以理解成是一种数据结构,假如某些语句已经被解析成一棵语法树,那么接下来就是要对此语法树进行处理,但考虑到不将处理操作与数据结构混合在一块,我们需要一种方法将其分离.其实对于语法树的处理最典型的 ...
- 【一天一道LeetCode】#72. Edit Distance
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...
- 简单的C语言猜数字小游戏
猜数字小游戏可谓是C语言最为基础的一个知识点了,我们可以在此基础上进行延伸,实现随机数的猜测,然后是加入再来一局的模式,等等.这里是抛砖引玉,希望你能做出你的经典之作. #include <st ...
- Dynamics CRM2013 1:N关系 sub-grid中的“添加现有项”和“添加新建项”功能详解
CRM2013中sub-grid的样式和2011中有了较大的变化,2013和2011界面对比如下 在2011的时候按钮是在ribbon区,1:N的父子关系实体直接点击添加新纪录就可以,但2013就不行 ...
- hadoop上C++开发两种方式的例子
百度在使用Hadoop过程中同样发现了Hadoop因为Java语言带来的低效问题,并对Hadoop进行扩展. 而在此之前,百度也尝试了 Hadoop PIPES 和 Hadoop Streamming ...
- Java之美[从菜鸟到高手演变]之设计模式四
在阅读过程中有任何问题,请及时联系:egg. 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 转载请说明出处:http://blog.csdn.net ...
- VS2008中开发手持终端程序(PDA软件)总结
VS2008中开发手持终端程序(PDA手机软件)的项目总结 1程序结构 程序中包括四个部分: 1.系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XM ...
- Android下VideoView的研究
VideoView继承自SurfaceView,实现了MediaController.MediaPlayerControl的接口.在android系统中的包名为android.widget.Video ...
- hadoop学习视频
杨尚川的视频 http://www.tudou.com/plcover/EvJCo2zl9hQ/ 酷6视频 http://v.ku6.com/show/8PkgqGcarHKndyP3rl_pUw.. ...