最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

作為開(kāi)源軟件的受益者,在享受開(kāi)源帶來(lái)的技術(shù)便利同時(shí),我們也積極擁抱開(kāi)源,同時(shí)也回饋開(kāi)源。城市交通指數(shù)(TTI)作為公司第16個(gè)開(kāi)源項(xiàng)目,通過(guò)蓋亞計(jì)劃對(duì)外開(kāi)放了脫敏數(shù)據(jù),下載人員分布于127個(gè)高?;蚩蒲袡C(jī)構(gòu),覆蓋了70%的雙一流高校。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、佳木斯ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的佳木斯網(wǎng)站制作公司

在地圖數(shù)據(jù)處理中,能經(jīng)常看到開(kāi)源軟件的身影,常見(jiàn)的有以下幾項(xiàng):

  • GDAL (Geospatial Data Abstraction Library)

GDAL是一個(gè)在X/MIT許可協(xié)議下的空間柵格數(shù)據(jù)轉(zhuǎn)換庫(kù),OGR是GDAL項(xiàng)目的一個(gè)分支,其提供對(duì)矢量數(shù)據(jù)的支持。柵格數(shù)據(jù)和矢量數(shù)據(jù)是地圖數(shù)據(jù)中兩種較為常見(jiàn)的數(shù)據(jù)格式,通俗的理解,柵格數(shù)據(jù)用像素來(lái)表達(dá),矢量數(shù)據(jù)用坐標(biāo)點(diǎn)來(lái)表達(dá)。常見(jiàn)的柵格數(shù)據(jù)有遙感影像、掃描地圖等。常見(jiàn)的矢量數(shù)據(jù)有各種點(diǎn)、線、面數(shù)據(jù),如POI、路網(wǎng)、水系或湖泊。GDAL可以很方便的對(duì)柵格或矢量數(shù)據(jù)進(jìn)行讀寫操作。

GDAL讀取遙感影像示例代碼:

GDALDataset* pDataSet = (GDALDataset*)GDALOpen("/Users/didi/Desktop/test.img",GA_ReadOnly);
//仿射變換6參數(shù)
double geoTransform[6] = {0};
pDataSet->GetGeoTransform(geoTransform);
//影像寬
int nWidth = pDataSet->GetRasterXSize();
//影像高
int nHeight = pDataSet->GetRasterYSize();
//像素值矩陣
unsigned char* pPixelValue = (unsigned char *)malloc(sizeof(unsigned char) * nWidth * nHeight);
memset(pPixelValue,0,nWidth * nHeight);
CPLErr err = pDataSet->RasterIO(GF_Read,0,0,nWidth,nHeight,pPixelValue,nWidth,nHeight,GDT_Byte,1,NULL,0,0,0);
free(pPixelValue);
GDALClose(pDataSet);

GDAL中有一些很實(shí)用的圖像處理算法,如GDALSimpleSURF類可以實(shí)現(xiàn)特征點(diǎn)檢測(cè)以及匹配,GDALSieveFilter可以刪除4連通或8連通的像素多邊形(具有相同像素值的連通區(qū)域),如砂眼噪聲。如下圖所示

圖1 處理前

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

圖2 處理后

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

OGR讀取矢量數(shù)據(jù)示例代碼:

GDALDataset* pDS = (GDALDataset*) GDALOpenEx("/Users/didi/Desktop/test.shp", GDAL_OF_VECTOR | GDAL_OF_READONLY, NULL, NULL, NULL );
OGRLayer* pLayer = pDS->GetLayer(0);
OGRFeature *pFeature = NULL;
pLayer->ResetReading();
while((pFeature = pLayer->GetNextFeature()) != NULL ){
    //獲取幾何信息
    OGRGeometry* pGeom = pFeature->GetGeometryRef();
    //獲取字段Length的值
    double dfLength = pFeature->GetFieldAsDouble("Length");
    OGRFeature::DestroyFeature(pFeature);
}
//關(guān)閉數(shù)據(jù)集
GDALClose(pDS);
  • GEOS(Geometry Engine Open Source)
    GEOS是非常經(jīng)典的空間拓?fù)潢P(guān)系運(yùn)算庫(kù),一些算法性能不亞于商業(yè)GIS軟件。GDAL讀取到矢量數(shù)據(jù)的幾何信息后,在進(jìn)行空間運(yùn)算或拓?fù)渑袛鄷r(shí),就需要GEOS的支持了。一般情況下,在編譯GDAL源碼時(shí)直接將GEOS編譯進(jìn)去,也可以把GDAL中的幾何類轉(zhuǎn)換成GEOS的幾何類,這樣就可以直接使用GEOS庫(kù)進(jìn)行數(shù)據(jù)處理。使用GEOS可以很方便的計(jì)算兩個(gè)幾何對(duì)象的差集、交集、對(duì)稱差、緩沖區(qū)。有時(shí)候我們需要將多個(gè)相鄰的多邊形合并成一個(gè)多邊形,常規(guī)用法是使用union方法,將其合并,當(dāng)待合并的多邊形個(gè)數(shù)較多時(shí),效率就會(huì)非常的低,這里我們可以使用計(jì)算緩沖區(qū)的方法進(jìn)行處理,效率會(huì)提升很多。

圖3 待合并多邊形

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

圖4 合并結(jié)果圖

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

示例代碼:

//藍(lán)色多邊形
char* szWKT_1 = "POLYGON ((113.885 22.6815, 113.9425 22.6585, 113.91 22.7, 113.885 22.6815))";
//橙色多邊形
char* szWKT_2 = "POLYGON ((113.91 22.7, 113.9425 22.6585, 113.9675 22.689, 113.91 22.7))";
OGRGeometry* pGeom_1 = NULL;
OGRGeometry* pGeom_2 = NULL;
OGRGeometryFactory::createFromWkt(&szWKT_1, NULL, &pGeom_1);
OGRGeometryFactory::createFromWkt(&szWKT_2, NULL, &pGeom_2);
OGRMultiPolygon* pMultiPolygon = (OGRMultiPolygon*)OGRGeometryFactory::createGeometry(wkbMultiPolygon);
pMultiPolygon->addGeometryDirectly(pGeom_1);
pMultiPolygon->addGeometryDirectly(pGeom_2);
//用Buffer替代Union,緩沖距離設(shè)置為0
//pUnion為紫色多邊形
OGRGeometry* pUnion = pMultiPolygon->Buffer(0);
  • PROJ.4

Proj.4是開(kāi)源GIS中最著名的地圖投影庫(kù),許多GIS開(kāi)源軟件的投影都直接使用Proj.4的庫(kù)文件。主要功能有投影坐標(biāo)與地理坐標(biāo)的轉(zhuǎn)換,坐標(biāo)系的轉(zhuǎn)換,基準(zhǔn)變換等。WGS84坐標(biāo)系是我們最常用的坐標(biāo)系,GPS軌跡點(diǎn)就是地理坐標(biāo)系。有些時(shí)候我們需要基于投影坐標(biāo)系做一些數(shù)學(xué)運(yùn)算,即高斯正算。如長(zhǎng)度計(jì)算。這里取以3°分帶,中央經(jīng)線為117°的區(qū)域內(nèi)的一條link來(lái)說(shuō)明:

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

圖5 3度分帶圖

siwei_id:9000025617988

地理坐標(biāo):LINESTRING (116.9710037 36.6434771,116.97049 36.64324,116.97014 36.64304,116.96921 36.64244,116.96787 36.64177)

投影坐標(biāo):LINESTRING (497406.947036178 4057018.36084719,497361.000282045 4056992.06317016,497329.693821681 4056969.87826856,497246.504857284 4056903.32080414,497126.64614413 4056829.00824338),在投影坐標(biāo)下,我們可以直接使用兩點(diǎn)之間距離公式來(lái)計(jì)算這條link的長(zhǎng)度,length=339米。

  • libSpatialindex

libspatialindex是一種高效的C++空間索引庫(kù)。支持復(fù)雜查詢,如范圍查詢、點(diǎn)位置查詢、 最近鄰查詢、K鄰近查詢以及參數(shù)化查詢。創(chuàng)建內(nèi)存空間索引示例代碼:

IStorageManager* diskfile = StorageManager::createNewMemoryStorageManager();
StorageManager::IBuffer* file = StorageManager::createNewRandomEvictionsBuffer(*diskfile, 10, false);
double fillFactor = 0.7;
uint32_t indexCapacity = 10;
uint32_t leafCapacity = 10;
uint32_t dimension = 2;
RTree::RTreeVariant variant = RTree::RV_RSTAR;
 
id_type indexIdentifier;
ISpatialIndex* tree = RTree::createNewRTree(*file, fillFactor, indexCapacity, leafCapacity, dimension, variant, indexIdentifier);
x1 = enve.MinX;
y1 = enve.MinY;
x2 = enve.MaxX;
y2 = enve.MaxY;
plow[0] = x1;
plow[1] = y1;
phigh[0] = x2;
phigh[1] = y2;
//r為幾何對(duì)象的外接矩形,id為唯一的標(biāo)識(shí)符,為長(zhǎng)整型
Region r = Region(plow, phigh, 2);
tree->insertData(0, 0, r, id);
delete tree;
delete file;
delete diskfile;
  • SpatiaLite

SQLite是一款很小巧的關(guān)系數(shù)據(jù)庫(kù),經(jīng)常被集成在各種移動(dòng)應(yīng)用程序中,為了擴(kuò)充SQLite的空間數(shù)據(jù)存儲(chǔ)功能,基于SQLite的內(nèi)核,增加了空間SQL功能。 SpatiaLite使用RTree作為空間索引,對(duì)一張表創(chuàng)建空間索引后,可以進(jìn)行高效的空間查詢處理。創(chuàng)建空間索引示例代碼:select CreateSpatialIndex('table_name', 'column_name')

  • PCL(Point Cloud Library)

激光點(diǎn)云是近些年使用較多一種地圖矢量數(shù)據(jù),可以高效獲取目標(biāo)的三維坐標(biāo)。由于其高昂的配套設(shè)備價(jià)格,只有少數(shù)圖商能玩的起。對(duì)于3D點(diǎn)云處理來(lái)說(shuō),PCL完全是一個(gè)模塊化的C++模板庫(kù),基于第三方庫(kù)實(shí)現(xiàn)點(diǎn)云相關(guān)的獲取、濾波、分割、配準(zhǔn)、檢索、特征提取、識(shí)別、追蹤、曲面重建、可視化等。

  • PostGIS

PostGIS只是PostgreSQL的一個(gè)插件,但是它將PostgreSQL變成了一個(gè)強(qiáng)大的空間數(shù)據(jù)庫(kù)。PostGIS具有優(yōu)異的空間查詢性能,如果說(shuō)Spatialite、libspatialindex等空間數(shù)據(jù)存儲(chǔ)工具是一艘軍艦,那么PostGIS就是一艘航空母艦。其中pgRouting增加了路由功能,實(shí)現(xiàn)了導(dǎo)航路徑規(guī)劃中的經(jīng)典算法,如Dijkstra算法、A*算法、旅行商算法。將地圖數(shù)據(jù)整理成符合其規(guī)格的格式后,可以很快打造出一個(gè)簡(jiǎn)易的路徑規(guī)劃計(jì)算服務(wù)。在空間查詢中,PostGIS可以實(shí)現(xiàn)即查即所得的效果。圖6中,如果要獲取橙色多邊形內(nèi)的路網(wǎng)數(shù)據(jù),普通空間查詢結(jié)果為綠色查詢結(jié)果集合,如果要獲取多邊形內(nèi)的數(shù)據(jù),需要在查詢結(jié)果集中做二次空間拓?fù)渑袛唷T赑ostGIS中,由于其特有的GiST空間索引,一次空間查詢即可,大大提高查詢效率。

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

圖6 空間查詢效果圖

  • GeoServer

GeoServer 是 OpenGIS Web 服務(wù)器規(guī)范的 J2EE 實(shí)現(xiàn),利用 GeoServer 可以方便的發(fā)布地圖數(shù)據(jù),允許用戶對(duì)特征數(shù)據(jù)進(jìn)行更新、刪除、插入操作。其數(shù)據(jù)源支持PostGIS、MySQL、GeoMesa等。用戶編輯SLD文件可以自定義地圖繪制風(fēng)格,制作各種專題地圖。下圖為使用不同的SLD文件,發(fā)布WMS服務(wù)示意圖。

圖7 軌跡圖

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

圖8 軌跡熱力圖

開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用

  • OpenLayer、Mapbox

OpenLayer和MapBox應(yīng)用場(chǎng)景較為類似,為Web GIS 客戶端開(kāi)發(fā)提供的JavaScript 類庫(kù)包,用于實(shí)現(xiàn)標(biāo)準(zhǔn)格式發(fā)布的地圖數(shù)據(jù)訪問(wèn)?;贠penLayer和MapBox可以讓前端地圖顯示的更加漂亮。

  • QGIS

QGIS是一個(gè)免費(fèi)的、開(kāi)源的、跨平臺(tái)(Linux/Windows/Mac/Android)的地理信息系統(tǒng)桌面版軟件,基于QT C++開(kāi)發(fā)。它提供強(qiáng)大的空間數(shù)據(jù)顯示、編輯和分析功能。QGIS和很多開(kāi)源項(xiàng)目一樣,使用CMake進(jìn)行編譯,由于QGIS集成了大部分的第三方軟件,基于源碼編譯出可執(zhí)行的QGIS,這是一個(gè)考驗(yàn)?zāi)托牡幕?,如同自己蓋一座大樓,每一塊磚頭都需要自己造。編譯出Debug版本的QGIS后,就能調(diào)試其源代碼,并且可以基于SDK進(jìn)行二次開(kāi)發(fā)。QGIS的設(shè)計(jì)架構(gòu),很精妙,很值得學(xué)習(xí)。

  • Mapnik

Mapnik是一款開(kāi)源的地圖渲染引擎,它能夠?yàn)镻ostGIS,Shapefile,Geojson,SQLite等在內(nèi)的多種數(shù)據(jù)源提供空間數(shù)據(jù)計(jì)算與可視化服務(wù),包括png瓦片,矢量瓦片,同時(shí)它支持自定義渲染樣式配置,具有很高的靈活性,提供了C++,python,node接口。Open Street Map主地圖層就是用Mapnik渲染得到的。

  • GRASS GIS

在地理信息系統(tǒng)行業(yè)中,如果說(shuō)ArcGIS(操作系統(tǒng)行當(dāng)中的windows)是閉源軟件中喬峰,GRASS GIS就是開(kāi)源軟件中的慕容復(fù)。GRASS可處理矢量、影像數(shù)據(jù),并且進(jìn)行時(shí)空分析、空間建模、空間分析、地圖可視化等操作。GRASS中的某些影像處理算法,無(wú)論從性能還是效果,完全可以媲美專業(yè)商業(yè)軟件。雖然GRASS提供了一些可視化操作界面,但是大部分功能需用命令方式進(jìn)行交互,對(duì)于普通用戶來(lái)說(shuō),使用時(shí)有一定困難,比較適合科研人員或高校教師。

  • JTS

Java版本的GEOS,請(qǐng)參考GEOS部分。在路網(wǎng)操作中,會(huì)遇到將首尾相連的多條道路合并成一條道路的情況,使用JTS中的LineMerger類,可以很好的完成這個(gè)操作,示例代碼:

WKTReader reader = new WKTReader();
Geometry geom_1 = reader.read("LINESTRING (116.96832000000000562 36.64882000000000062, 116.96849000000000274 36.64882000000000062)");
Geometry geom_2 = reader.read("LINESTRING (116.96849000000000274 36.64882000000000062, 116.96862000000000137 36.64882000000000062)");
Geometry geom_3 = reader.read("LINESTRING (116.96862000000000137 36.64882000000000062, 116.96877999999999531 36.64880999999999744)");
LineMerger lineMerger = new LineMerger();
//添加幾何對(duì)象不需要按照順序,只要道路首尾坐標(biāo)點(diǎn)重合即可
lineMerger.add(geom_1);
lineMerger.add(geom_2);
lineMerger.add(geom_3);
Collection mergedLineStrings = lineMerger.getMergedLineStrings();
System.out.println(mergedLineStrings.toString());
打印結(jié)果:[LINESTRING (116.96832 36.64882, 116.96849 36.64882, 116.96862 36.64882, 116.96878 36.64881)]
  • GeoTools

功能和GDAL類似,空間拓?fù)渌惴ㄊ褂肑TS來(lái)實(shí)現(xiàn)。

  • GeoMesa

GeoMesa是一個(gè)開(kāi)源的進(jìn)行時(shí)空數(shù)據(jù)處理的工具包,可以支持大數(shù)據(jù)場(chǎng)景下的地理信息分析和分布式計(jì)算。能較好的兼容大數(shù)據(jù)處理框架,如HBase、Spark,公司大數(shù)據(jù)架構(gòu)部提供了完整的GeoMesa解決方案,可參考內(nèi)網(wǎng)相關(guān)信息

作者:張深圳

  • 現(xiàn)在注冊(cè)滴滴云,有機(jī)會(huì)可得30元無(wú)門檻滴滴出行券

  • 新購(gòu)云服務(wù)1月5折 3月4.5折 6月低至4折

  • 滴滴云使者招募,推薦最高返傭50%


網(wǎng)站名稱:開(kāi)源軟件在地圖數(shù)據(jù)處理中的應(yīng)用
網(wǎng)站網(wǎng)址:http://fisionsoft.com.cn/article/jshdco.html