C# 未通过rest api geoserver正确设置shapefile边界框

C# 未通过rest api geoserver正确设置shapefile边界框,c#,geoserver,C#,Geoserver,您好,根据这个我写的方法添加存储和ShapeFile到Geoserver,这工作正常,但当得到预览层说bbox是不正确的 非法bbox,minX:0.0大于maxX:-1.0 添加shapefile后,当我从geoserver web界面手动更改时,它可以正常工作,但我希望以编程方式进行更改 这是我的密码 public bool UploadShapeFile() { var uploads = Path.Combine(_host.WebRootPath, "Upl

您好,根据这个我写的方法添加存储和ShapeFile到Geoserver,这工作正常,但当得到预览层说bbox是不正确的

非法bbox,minX:0.0大于maxX:-1.0

添加shapefile后,当我从geoserver web界面手动更改时,它可以正常工作,但我希望以编程方式进行更改 这是我的密码

 public bool UploadShapeFile()
    {

        var uploads = Path.Combine(_host.WebRootPath, "Upload");
        var filePath = Path.Combine(uploads, "states_25.zip");
        string result = Path.GetFileNameWithoutExtension(filePath);
        String fileUri = filePath;
        Console.Write(fileUri);

        byte[] localShapeFile = readLocalShapeFile(fileUri);

        String sUrl = "http://192.168.1.2:8080/geoserver/rest/workspaces" +
            "/sf/datastores/sf3/file.shp";

        WebRequest request = WebRequest.Create(sUrl);

        request.ContentType = "application/zip";
        request.Method = "PUT";
        request.Credentials = new NetworkCredential("admin", "geoserver");

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(localShapeFile, 0, localShapeFile.Length);
        requestStream.Close();

        WebResponse response = request.GetResponse();
        CreatePostGISTableAndFeatureType();
        return true;
    }

    public bool CreatePostGISTableAndFeatureType()
    {
        string featXml = GetXml();
        string fUrl =   "http://192.168.1.2:8080/geoserver/rest/workspaces" +
            "/sf/datastores/sf3/featuretypes";

        WebRequest request = WebRequest.Create(fUrl);
        request.Method = "POST";
        request.ContentType = "application/xml";
        request.Credentials = new NetworkCredential("admin", "geoserver");

        byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(featXml);

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(buffer, 0, buffer.Length);
        requestStream.Close();
        try
        {
            WebResponse response = request.GetResponse();
        }
        catch (Exception ee)
        {

        }


        return false;
    }
    private string GetXml()
    {
        string fXml = "<featureType>" +
                        "<name>sepp</name>" +
                        "<nativeName>sepp</nativeName>" +
                        "<title>sepp</title>" +
                        "<srs>EPSG:4326</srs>" +
                        "<attributes>" +
                            "<attribute>" +
                                "<name>the_geom</name>" +
                                "<binding>com.vividsolutions.jts.geom.Point</binding>" +
                            "</attribute>" +
                            "<attribute>" +
                                "<name>description</name>" +
                                "<binding>java.lang.String</binding>" +
                            "</attribute>" +
                            "<attribute>" +
                                "<name>timestamp</name>" +
                                "<binding>java.util.Date</binding>" +
                            "</attribute>" +
                        "</attributes>" +
                    "</featureType>";
        return fXml;
    }

    private byte[] readLocalShapeFile(string filePath)
    {
        byte[] buffer;
        FileStream fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        try
        {
            int length = (int)fStream.Length;
            buffer = new byte[length];
            int count;
            int sum = 0;

            while ((count = fStream.Read(buffer, sum, length - sum)) > 0)
                sum += count;
        }
        finally
        {
            fStream.Close();
        }

        return buffer;
    }
public bool上传shapefile()
{
var uploads=Path.Combine(_host.WebRootPath,“Upload”);
var filePath=Path.Combine(上传,“states_25.zip”);
string result=Path.GetFileNameWithoutExtension(filePath);
字符串fileUri=filePath;
Write(fileUri);
字节[]localShapeFile=readLocalShapeFile(fileUri);
字符串sUrl=”http://192.168.1.2:8080/geoserver/rest/workspaces" +
“/sf/datastores/sf3/file.shp”;
WebRequest=WebRequest.Create(sUrl);
request.ContentType=“应用程序/zip”;
request.Method=“PUT”;
request.Credentials=newnetworkcredential(“admin”、“geoserver”);
Stream requestStream=request.GetRequestStream();
Write(localShapeFile,0,localShapeFile.Length);
requestStream.Close();
WebResponse=request.GetResponse();
CreatePostGISTableAndFeatureType();
返回true;
}
public bool CreatePostGISTableAndFeatureType()
{
字符串featXml=GetXml();
字符串卷曲=”http://192.168.1.2:8080/geoserver/rest/workspaces" +
“/sf/datastores/sf3/featuretypes”;
WebRequest=WebRequest.Create(fUrl);
request.Method=“POST”;
request.ContentType=“应用程序/xml”;
request.Credentials=newnetworkcredential(“admin”、“geoserver”);
byte[]buffer=Encoding.GetEncoding(“UTF-8”).GetBytes(featXml);
Stream requestStream=request.GetRequestStream();
Write(buffer,0,buffer.Length);
requestStream.Close();
尝试
{
WebResponse=request.GetResponse();
}
捕获(异常ee)
{
}
返回false;
}
私有字符串GetXml()
{
字符串fXml=“”+
“sepp”+
“sepp”+
“sepp”+
“EPSG:4326”+
"" +
"" +
“地球”+
“com.visualsolutions.jts.geom.Point”+
"" +
"" +
“说明”+
“java.lang.String”+
"" +
"" +
“时间戳”+
“java.util.Date”+
"" +
"" +
"";
返回fXml;
}
私有字节[]readLocalShapeFile(字符串文件路径)
{
字节[]缓冲区;
FileStream fStream=newfilestream(filePath,FileMode.Open,FileAccess.Read);
尝试
{
int length=(int)fStream.length;
缓冲区=新字节[长度];
整数计数;
整数和=0;
而((count=fStream.Read(buffer,sum,length-sum))>0)
总和+=计数;
}
最后
{
fStream.Close();
}
返回缓冲区;
}

非常感谢您的关注

您需要在将放入服务器的XML文件中指定数据集的边界框,或者在请求中包含重新计算选项

有关详细信息,请参阅:

重新计算数组字符串

指定是否重新计算要素类型的任何边界框。必要时会自动重新计算要素类型的某些特性。特别是,当投影或投影策略发生更改时,将重新计算本机边界框;当重新计算本机边界框或在请求中显式提供新的本机边界框时,将重新计算lat/lon边界框。(当本地和lat/lon边界框显式包含在请求中时,它们不会自动重新计算。)此外,客户端可以显式请求一组固定字段进行计算,方法是在重新计算参数中包含以逗号分隔的字段名称列表。空参数“recalculate=”在对大型数据集进行操作时非常有用,因为“recalculate=”可以避免计算任何字段,而不考虑对投影、投影策略等的任何更改。nativebbox参数“recalculate=nativebbox”用于重新计算本机边界框,同时避免重新计算横向/纵向边界框。重新计算参数可在一起使用-“重新计算=nativebbox,latlonbbox”可在批量导入后用于重新计算本机边界框和lat/lon边界框