国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Arcgis10.2+pgsql14開發(fā)(非SDE版本)

這篇具有很好參考價值的文章主要介紹了Arcgis10.2+pgsql14開發(fā)(非SDE版本)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

起因:最初采用SDE和pgsql11開發(fā),后因數(shù)據(jù)庫升級到pgsql14,sde因和pgsql版本不般配,無法導入要素數(shù)據(jù)和顯示數(shù)據(jù),數(shù)據(jù)庫升級又是必然,所以只能另外找解決方案。

參考資料:Spatial Database for Postgres and ArcGis users: how to choose

附加:zigGis, GDAL。傳說中的zigGis相當牛,能直接將postgis中的GIS類型顯示到ArcGis的控件中,但是版本又比較復雜,也有可能會設計到版本不般配問題,后期我再看看這方面的知識體系。

Pgsql+postgis使用:PostgreSQL+PostGIS的使用(轉載) - 無痕客 - 博客園

PostGIS教程一:PostGIS介紹 - 知乎

實現(xiàn)步驟:

在postgis中提供很多函數(shù)將wkb轉成它的geometry類型,同樣也有將geometry轉成binary的函數(shù)。當然更興奮的是ArcGis中有針對標準wkb的轉換,這樣一來,可想而知,這個方案是行的通的。

第一步:從postgreSQL中通過postgis讀取GIS數(shù)據(jù)顯示在AxMapControl中

1. C# 連接數(shù)據(jù)庫pg

注意點:?要注意的是因為ArcEngine中對wkb的支持是byte[]之間的轉換,所以在進行數(shù)據(jù)庫取數(shù)據(jù)時用postgis的這個函數(shù)將GIS數(shù)據(jù)轉成byte[],這樣寫 asbinary(the_geom)

2. 將得到的byte[](也就是wkb數(shù)據(jù))通過ArcEngine的接口得到IGeometry,如下所示:

 IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
?factory.CreateGeometryFromWkbVariant(wkb, out geom, out countin);

3. 將 IGeometry 顯示在AxMapControl中。

第二步:將上一步從pg中顯示出來的GIS數(shù)據(jù)進行相應的修改后保存回pg中

1. 修改指定的要素后通過 geometry得到wkb

要對修改操作進行保存,就需要將指定的要素中的geometry再次轉回wkb然后通過sql語句修改pg中的指定記錄即可,思路很簡單,問題在于拼接SQL字符串上面,因為arcengine通過geometry得到的仍然是一個byte[],這個東西是沒辦法拼到sql語句中的。

2. 用到的ArcEngine接口如下:

IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
byte[] geoBytes = factory.CreateWkbVariantFromGeometry(geometry) as byte[];

3. 拼接SQL時要將上面的byte[]數(shù)組轉碼

??? 其實postgis處理存到pg中的是一長串的16進制字符串,相信大家打開數(shù)據(jù)庫能看到,要想拼接好SQL串就得這樣來一下:geomfromwkb(decode('" + geoByteStr + "', 'hex'))其中的geoByteStr是byte[]轉成16進制的字串

上面兩步已走通,是完全可以實現(xiàn)的,這樣做的話,數(shù)據(jù)表我們也能自行定義,操作GIS數(shù)據(jù),屬性等,更靈活。

完整代碼

一、讀取數(shù)據(jù)庫代碼并且顯示

private void pgsql加載非SDEToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Byte[] bytes = PgsqlHelper.executeRouteQueryOne("select st_asbinary(st_union(geom)) as route from public.gis_osm_railways_free_1 where name='京滬線'");
            IGeometry geom = null;
            int countin;
            IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
            factory.CreateGeometryFromWkbVariant(bytes, out geom, out countin);
            IMap pMap = axMapControl1.Map;
            IActiveView pActiveView = pMap as IActiveView;
            IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer;
            IPolyline pLine = (IPolyline)geom;
            geometry = geom;
            ILineElement pLineElement = new LineElementClass();
            //pLineElement.Symbol = pLineSym;
            //添加geom
            pElement = pLineElement as IElement;
            pElement.Geometry = pLine;
            pGraphicsContainer.AddElement(pElement, 0);
            axMapControl1.FullExtent = pElement.Geometry.Envelope;
            axMapControl1.Refresh();
        }

二、編輯Geometry之后再保存進入數(shù)據(jù)庫

 private void apgsql保存非sdeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
            byte[] geoBytes = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
            string sss = ToHexStrFromByte(geoBytes);
            string sql = @"insert into geomfromwkb(decode('" + geoBytes + "', 'hex'))";
            string sql1 = @"INSERT INTO public.gis_osm_railways_free_1(
	 osm_id, code, fclass, name, layer, bridge, tunnel, geom)
	VALUES ( '444', 4444, '3333', '333', 3 ,'3', '3' ,ST_GeomFromText('st_astext(geomfromwkb(decode('" + sss + "', 'hex')))',4326));";
            PgsqlHelper.ExecuteQuery(sql1);
        }
        public  string ToHexStrFromByte( byte[] byteDatas)
        {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < byteDatas.Length; i++)
            {
                builder.Append(string.Format("{0:X2}", byteDatas[i]));
            }
            return builder.ToString().Trim();
        }

資料

讀取pgsql數(shù)據(jù)庫

namespace WHUGIS.Classes
{
    class DAO
    {

        private static string connectionString = "User ID=postgres;Password=admin;Server=localhost;Port=5432;Database=GIS_engine;";
        public DAO()
        {

        }
        public static Byte[] executeRouteQuery(string sqlstr)
        {
            NpgsqlConnection sqlConn = new NpgsqlConnection(connectionString);
            try
            {
                sqlConn.Open();
                NpgsqlCommand objCommand = new NpgsqlCommand(sqlstr, sqlConn);
                Byte[] routeWKB = (byte[])objCommand.ExecuteScalar();
                return routeWKB;
            }
            catch(Exception ee)
            {
                MessageBox.Show(ee.Message);
                return null;
            }
            finally
            {
                sqlConn.Close();
            }
            
        }

    }
}

ArcgisEngine Igeometry和WKB轉換文章來源地址http://www.zghlxwxcb.cn/news/detail-469285.html

using System;
using System.Collections.Generic;
using System.Text;
using GisSharpBlog.NetTopologySuite.IO;
using ESRI.ArcGIS.Geometry;

namespace Utils
{
    /// <summary>
    /// This class is used to convert a GeoAPI Geometry to ESRI and vice-versa.
    /// It can also convert a ESRI Geometry to WKB/WKT and vice-versa.
    /// </summary>
    public static class Converters
    {

        public static byte[] ConvertGeometryToWKB(IGeometry geometry)
        {
            IWkb wkb = geometry as IWkb;
            ITopologicalOperator oper = geometry as ITopologicalOperator;
            oper.Simplify();

            IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
            byte[] b = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
            return b;
        }


        public static byte[] ConvertWKTToWKB(string wkt)
        {
            WKBWriter writer = new WKBWriter();
            WKTReader reader = new WKTReader();
            return writer.Write(reader.Read(wkt));
        }

        public static string ConvertWKBToWKT(byte[] wkb)
        {
            WKTWriter writer = new WKTWriter();
            WKBReader reader = new WKBReader();
            return writer.Write(reader.Read(wkb));
        }

        public static string ConvertGeometryToWKT(IGeometry geometry)
        {
            byte[] b = ConvertGeometryToWKB(geometry);
            WKBReader reader = new WKBReader();
            GeoAPI.Geometries.IGeometry g = reader.Read(b);
            WKTWriter writer = new WKTWriter();
            return writer.Write(g);
        }

        public static IGeometry ConvertWKTToGeometry(string wkt)
        {
            byte[] wkb = ConvertWKTToWKB(wkt);
            return ConvertWKBToGeometry(wkb);
        }

        public static IGeometry ConvertWKBToGeometry(byte[] wkb)
        {
            IGeometry geom;
            int countin = wkb.GetLength(0);
            IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
            factory.CreateGeometryFromWkbVariant(wkb, out geom, out countin);
            return geom;
        }


        public static IGeometry ConvertGeoAPIToESRI(GeoAPI.Geometries.IGeometry geometry)
        {
            WKBWriter writer = new WKBWriter();
            byte[] bytes = writer.Write(geometry);
            return ConvertWKBToGeometry(bytes);
        }

        public static GeoAPI.Geometries.IGeometry ConvertESRIToGeoAPI(IGeometry geometry)
        {
            byte[] wkb = ConvertGeometryToWKB(geometry);
            WKBReader reader = new WKBReader();
            return reader.Read(wkb);
        }
    }
}

到了這里,關于Arcgis10.2+pgsql14開發(fā)(非SDE版本)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 郵件服務支持Exchange協(xié)議,資產歷史賬號支持設置保留數(shù)量,JumpServer堡壘機v3.10.2 LTS版本發(fā)布

    郵件服務支持Exchange協(xié)議,資產歷史賬號支持設置保留數(shù)量,JumpServer堡壘機v3.10.2 LTS版本發(fā)布

    2024年1月22日,JumpServer開源堡壘機正式發(fā)布v3.10.2 LTS版本。JumpServer開源項目組將對v3.10 LTS版本提供長期的支持和維護,并定期迭代發(fā)布小版本。歡迎廣大社區(qū)用戶升級至v3.10 LTS版本,以獲得更佳的使用體驗。 在v3.10.2 LTS版本中,JumpServer的郵件服務功能新增支持Exchange協(xié)議。目

    2024年01月24日
    瀏覽(18)
  • GitLab-ce版本升級(14.0-14.10)

    GitLab-ce版本升級(14.0-14.10)

    GitLab 存在命令注入漏洞,該漏洞源于未經(jīng)授權的用戶可能使用以下命令在服務器上執(zhí)行任意代碼 項目導入功能。以下產品版本受到影響:14.10.5 之前的 14.0、15.0.4 之前的 15.0 和 15.1.1 之前的 15.1 開始的所有版本。 因服務器處于內網(wǎng)環(huán)境,使用RPM包進行手動升級 創(chuàng)建備份文件

    2024年02月07日
    瀏覽(16)
  • 加密貨幣量化交易系統(tǒng)的設計與實現(xiàn)(0.1最初版本,為了應付畢設的版本)

    加密貨幣量化交易系統(tǒng)的設計與實現(xiàn)(0.1最初版本,為了應付畢設的版本)

    注意: 寫這個程序的目的是進行加密貨幣投資理財,但是我剛好要畢業(yè)了,需要些畢業(yè)設計,所以和導師商量了一下把原本的《基于表情識別的人工智能睡眠質量監(jiān)測助手》換成了我自己的《加密貨幣量化交易系統(tǒng)的設計與實現(xiàn)》,這個設計里的后端服務模塊(基于springbo

    2024年02月02日
    瀏覽(26)
  • 字符設備驅動開發(fā)(最初方式)

    字符設備驅動開發(fā)(最初方式)

    字符設備是Linux中最基本的一類設備驅動,我們常見的點燈、按鍵、IIC、SPI、LCD等等都是通過字符設備驅動框架來進行開發(fā)的。字符設備驅動是通過一個一個字節(jié)流的方式來進行讀寫操作設備,讀寫數(shù)據(jù)是分先后順序的。 通過空間劃分的方式來說,Linux系統(tǒng)中分為用戶空間和

    2024年02月17日
    瀏覽(24)
  • CCS10.2入門(一)

    CCS10.2入門(一)

    雖然CCS的歷史已經(jīng)算是很悠久了,但是由于CCS10.2版本比較新,所以資料相對較少,版本不一樣,雖然操作接近,但是也有一定的區(qū)別。 ??一般打開是點擊project,從這里面import。 ??點擊后,繼續(xù)點擊Browse…選擇工程所在的文件夾。 ??點擊選擇文件夾后再點擊Finishi即可

    2024年02月15日
    瀏覽(19)
  • 10.2 整流電路

    10.2 整流電路

    在分析整流電路時,為了突出重點,簡化分析過程,一般均假定負載為純電阻性;整流二極管為理想二極管,即導通時正向壓降為零,截止時反向電流為零;變壓器無損耗,內部壓降為零等。 分析整流電路,就是弄清電路的工作原理(即整流原理),求出主要參數(shù),并確定整

    2024年02月09日
    瀏覽(19)
  • 問題 B: C語言10.2

    輸入a、b、c三個整數(shù),按先大后小的順序輸出a、b和c。注意請使用指針變量的方式進行比較和輸出。 三個用空格隔開的整數(shù)a、b和c。 按先大后小的順序輸出a、b和c,用空格隔開。 請注意行尾輸出換行。

    2023年04月09日
    瀏覽(23)
  • vs2019+ArcEngine10.2安裝教程

    vs2019+ArcEngine10.2安裝教程

    因為畢設要用c#和 ArcGIS Engine二次開發(fā),就重新安裝了ArcGIS Engine,網(wǎng)絡上只有10.2的版本,不能適配vs2019, 所以就做了vs2019適配ArcGIS Engine10.2的教程。 需要環(huán)境: ArcGIS 10.2 下載地址 鏈接:https://pan.baidu.com/s/1y-mpEfubrDmEwmhhb526Yg 提取碼:9271 vs2019 下載地址: Visual Studio 較舊的下載

    2023年04月26日
    瀏覽(25)
  • cuda10.2安裝python3.7pytorch

    cuda10.2安裝python3.7pytorch

    1.conda創(chuàng)建虛擬環(huán)境 2.激活虛擬環(huán)境 3.安裝 pytorch 去 pytorch 官網(wǎng)找對應的版本: https://pytorch.org/get-started/previous-versions/ 酷酷下載······

    2024年02月01日
    瀏覽(51)
  • Windows10系統(tǒng)下YOLOv5配置(Tesla P40 24GB、CUDA10.2)
二、安裝

    Windows10系統(tǒng)下YOLOv5配置(Tesla P40 24GB、CUDA10.2) 二、安裝

    操作系統(tǒng):Windows10 顯卡: Tesla P40 ?24GB CUDA版本:10.2 YOLOv5版本:4.0 下載相應版本的CUDA按默認一路安裝到底 下載相應版本的cuDNN,解壓,將bin中、include中、lib中文件分別復制到CUDA相應安裝目錄 bin中文件 ?include中文件 ?lib中文件 Python Releases for Windows | Python.org The official home

    2024年02月07日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包