设为首页 收藏本站
查看: 939|回复: 0

[经验分享] 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用

[复制链接]

尚未签到

发表于 2017-12-27 21:43:02 | 显示全部楼层 |阅读模式
[Description("坐标服务接口")]  
[ServiceContract]
  

public interface ICoord2Shapefile  
{
  

//[WebGet(UriTemplate = "{points}", ResponseFormat = WebMessageFormat.Json)]  
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json,UriTemplate="/")]
  
[Description("将坐标生成shapefile,并压缩打包")]
  
[OperationContract]
  

  
string point2zip(string points);
  

  
}
  

  
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
  
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

  
public>  
{
  
public string point2zip(string points)
  
{
  
LogHelper.Info(points);
  
string zip = "";
  
//List<Location> locs = JsonHelper.DeserializeJsonToList<Location>(points);
  

  
try
  
{
  
List<Location> locs = new List<Location>();
  
string[] pps = points.Split(';');
  
for (int i = 0; i < pps.Length; i++)
  
{
  
string[] pp = pps.Split(',');
  
double x = Convert.ToDouble(pp[0]);
  
double y = Convert.ToDouble(pp[1]);
  
Location loc = new Location() { X = x, Y = y, Name = pp[2] };
  
locs.Add(loc);
  
}
  

  
if (locs != null && locs.Count > 0)
  
{
  
LogHelper.Info(string.Format("{0} 个点",locs.Count));
  

  
string shpfile = Path.GetTempFileName();
  
shpfile = shpfile.Substring(0, shpfile.Length - 3) + "shp";
  

  
LogHelper.Info(shpfile);
  

  
//shpfile = "e:\\aa.shp";
  

  
WriteVectorFileShp(shpfile, locs);
  

  
if (File.Exists(shpfile))
  
{
  
FileInfo fileinfo = new FileInfo(shpfile);
  
DirectoryInfo dirInfo = fileinfo.Directory;
  

  
string shpName = Path.GetFileNameWithoutExtension(shpfile);
  

  
List<string> files = new List<string>();
  
files.Add(shpfile);
  
files.Add(Path.Combine(dirInfo.FullName, shpName + ".prj"));
  
files.Add(Path.Combine(dirInfo.FullName, shpName + ".dbf"));
  
files.Add(Path.Combine(dirInfo.FullName, shpName + ".shx"));
  

  
//string zipFile = "d:\\point.zip";

  
string>  
string zipFile = string.Format("d:\\update\\temp\\{0}{1}{2}{3}{4}{5}{6}.zip", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
  
//string zipFile = string.Format("d:\\{0}{1}{2}{3}{4}{5}{6}.zip", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
  
//string zipFile = "www.simplemap.com.cn/update/temp";
  
int ret = ZipHelper.ZipFiles(zipFile, files.ToArray(), "data");
  
if (ret > 0)
  
{
  
foreach (var file in files)
  
{
  
try
  
{
  
File.Delete(file);
  
}
  
catch (Exception)
  
{
  
}
  
}
  
if (File.Exists(zipFile))
  
{
  
FileInfo ff = new FileInfo(zipFile);zip = "http://localhost/temp" + ff.Name;
  
}
  
}
  
}
  
else
  
{
  
LogHelper.Info(string.Format("{0} 不存在!", shpfile));
  
}
  
}
  
}
  
catch (Exception ex)
  
{
  
LogHelper.Error(ex.Message, ex);
  
}
  

  
return zip;
  
}
  

  
static void WriteVectorFileShp(String shapefile_path, List<Location> locs)  //创建算法生产的边界矢量图
  
        {
  
// 为了支持中文路径,请添加下面这句代码
  
OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
  
// 为了使属性表字段支持中文,请添加下面这句
  
OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "");
  
// 注册所有的驱动
  
            Ogr.RegisterAll();
  

  
LogHelper.Info("注册GDAL成功");
  
//创建数据,创建ESRI的shp文件
  
string strDriverName = "ESRI Shapefile";
  
Driver oDriver = Ogr.GetDriverByName(strDriverName);
  
if (oDriver == null)
  
{
  
Debug.WriteLine("%s 驱动不可用!\n", shapefile_path);
  
return;
  
}
  

  
// 步骤1、创建数据源
  
DataSource oDS = oDriver.CreateDataSource(shapefile_path, null);
  
if (oDS == null)
  
{
  
Debug.WriteLine("创建矢量文件【%s】失败!", shapefile_path);
  
return;
  
}
  
LogHelper.Info("创建矢量文件成功");
  
//步骤2、创建空间坐标系
  
OSGeo.OSR.SpatialReference oSRS = new OSGeo.OSR.SpatialReference("");
  
oSRS.SetWellKnownGeogCS("WGS84");
  
//步骤3、创建图层,并添加坐标系,创建一个多边形图层(wkbGeometryType.wkbUnknown,存放任意几何特征)
  
Layer oLayer = oDS.CreateLayer("地名", oSRS, wkbGeometryType.wkbPoint, null);
  
if (oLayer == null)
  
{
  
Debug.WriteLine("图层创建失败!");
  
return;
  
}
  

  
// 步骤4、下面创建属性表
  
FieldDefn oFieldPlotArea = new FieldDefn("Name", FieldType.OFTString);          // 先创建一个叫PlotArea的属性
  
oFieldPlotArea.SetWidth(100);
  
// 步骤5、将创建的属性表添加到图层中
  
oLayer.CreateField(oFieldPlotArea, 1);
  
//步骤6、定义一个特征要素oFeature(特征要素包含两个方面1.属性特征2.几何特征)
  
foreach (var loc in locs)
  
{
  
FeatureDefn oDefn = oLayer.GetLayerDefn();
  
Feature oFeature = new Feature(oDefn);    //建立了一个特征要素并将指向图层oLayer的属性表
  
//步骤7、设置属性特征的值
  
oFeature.SetField(0, loc.Name);
  
OSGeo.OGR.Geometry pt = new Geometry(wkbGeometryType.wkbPoint);
  
pt.AddPoint(loc.X, loc.Y, 0);
  
oFeature.SetGeometry(pt);
  
//OSGeo.OGR.Geometry geomTriangle = OSGeo.OGR.Geometry.CreateFromWkt(wkt);//创建一个几何特征
  
//步骤8、设置几何特征
  
//oFeature.SetGeometry(geomTriangle);
  
//步骤9、将特征要素添加到图层中
  
                oLayer.CreateFeature(oFeature);
  
}
  
oDS.Dispose();
  
LogHelper.Info("数据集创建完成!");
  
//Debug.WriteLine("数据集创建完成!");
  
        }
  

  
}
  


  
public>  
{
  
public double X { get; set; }
  
public double Y { get; set; }
  
public string Name { get; set; }
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-428754-1-1.html 上篇帖子: C#进阶系列 下篇帖子: Asp.net网站后台代码不能访问-iis部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表