資源簡介
使用C++并利用GDAL庫實現(xiàn)對GIS中shp數(shù)據(jù)的讀取和顯示。該版本沒有放縮功能,有簡陋版放縮功能的版本,如有需要可以下載后評論可獲取。
代碼片段和文件信息
#include?“stdafx.h“
#include?“DataAdd.h“
DataAdd*DataAdd::m_pInstance?=?NULL;
IMPLEMENT_DYNAMIC(DataAdd?CWnd)
DataAdd::DataAdd()
{
OGRGeometry*poGeomtry?=?NULL;
}
DataAdd::~DataAdd()
{
}
OGRlayer*?DataAdd::ShpDataAdd(CString?FilePathName)
{
Instance();
//OGRDataSource?*poDS?=?NULL;
//poDS?=?OGRSFDriverRegistrar::Open(FilePathName?FALSE);
const?char*?filename?=?FilePathName.GetBuffer(sizeof(FilePathName));
GDALDataset*poDS?=?(GDALDataset*)GDALOpenEx(filename?GDAL_OF_VECTOR?NULL?NULL?NULL);
//Draw(poDS);
if?(poDS?==?NULL)
{
printf(“數(shù)據(jù)源打開失敗\n“);
}
/*if?(poDS->GetlayerCount()<0)
{
printf(“當(dāng)前圖層無效!\n“);
}*/
OGRlayer*polayer?=?NULL;
polayer?=?poDS->Getlayer(0);
return?polayer;
}
OGRlayer*DataAdd::FromPath(const?string&strFilePath)
{
Instance();
//新版本修改的去除了OGRDataSource類
GDALDataset*poDS?=?(GDALDataset*)GDALOpenEx(strFilePath.c_str()?GDAL_OF_VECTOR?NULL?NULL?NULL);
if?(poDS?==?NULL)
{
printf(“數(shù)據(jù)源打開失敗\n“);
return?NULL;
}
if?(poDS->GetlayerCount()?0)
{
printf(“當(dāng)前圖層無效!\n“);
return?NULL;
}
OGRlayer*?polayer?=?NULL;
polayer?=?poDS->Getlayer(0);
DestoryInstance();
return?polayer;
}
void?DataAdd::DestoryInstance()
{
if?(NULL?!=?m_pInstance)
{
delete?m_pInstance;
m_pInstance?=?NULL;
}
}
DataAdd*DataAdd::Instance()
{
if?(NULL?==?m_pInstance)
{
m_pInstance?=?new?DataAdd();
}
return?m_pInstance;
}
void?DataAdd::getView(CView?*View)
{
pView?=?View;
}
OGRGeometry*?DataAdd::getOGRGeometry()
{
return?poGeometry;
}
OGRwkbGeometryType?DataAdd::getOGRwkbGeometryType()
{
return?eGeometryType;
}
void?DataAdd::Draw(OGRlayer*?poDS)
{
CClientDC?dc(pView);
OGRlayer*?polayer?=?poDS;
OGRFeature?*pFeature?=?NULL;
OGREnvelope?*poEnvelope?=?new?OGREnvelope();
polayer->GetExtent(poEnvelope);
CRect?rect;
pView->GetClientRect(&rect);
IMapRender?*pMapRender?=?new?IMapRender();
pMapRender->GetScale(poEnvelope?rect);
polayer->ResetReading();
while?((pFeature?=?polayer->GetNextFeature())?!=?NULL)
{
poGeometry?=?pFeature->GetGeometryRef();
eGeometryType?=?poGeometry->getGeometryType();
switch?(eGeometryType)
{
//處理點
case?wkbPoint25D:
case?wkbPoint:
{
?OGRPoint*?poPoint?=?NULL;
?poPoint?=?(OGRPoint*)poGeometry;
?double?centerx?=?poPoint->getX();
?double?centery?=?poPoint->getY();
?pMapRender->WorldToClinet(centerx?centery);
?CRect?pp(centerx?-?3?centery?-?3?centerx?+?3?centery?+?3);
?CBrush?brush;
?brush.CreateSolidBrush(RGB(255?0?0));
?dc.Selectobject(brush);
?dc.Ellipse(pp);
}
break;
//處理線
case?wkbLineString:
case?wkbLineString25D:
{
?OGRLineString*?poLineString?=?NULL;
?poLineString?=?(OGRLineString*)poGeometry;
?int?nLinePoints?=?poLineString->getNumPoints();
?OGRPoi
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-07-24?08:22??GDAL\
?????目錄???????????0??2017-07-24?17:34??GDAL\ReadShp\
?????目錄???????????0??2017-07-24?15:38??GDAL\ReadShp\Debug\
?????文件??????476160??2017-07-24?17:25??GDAL\ReadShp\Debug\ReadShp.exe
?????文件??????133147??2017-07-24?15:38??GDAL\ReadShp\Debug\ReadShp.exp
?????文件?????3469744??2017-07-24?17:25??GDAL\ReadShp\Debug\ReadShp.ilk
?????文件??????220084??2017-07-24?15:38??GDAL\ReadShp\Debug\ReadShp.lib
?????文件?????8899584??2017-07-24?17:25??GDAL\ReadShp\Debug\ReadShp.pdb
?????目錄???????????0??2017-07-24?08:26??GDAL\ReadShp\ipch\
?????目錄???????????0??2017-07-24?15:30??GDAL\ReadShp\ipch\readshp-ca4c9107\
?????文件????94109696??2017-07-24?15:30??GDAL\ReadShp\ipch\readshp-ca4c9107\readshp-41d29033.ipch
?????目錄???????????0??2017-07-24?17:25??GDAL\ReadShp\ReadShp\
?????文件????93126656??2017-07-24?17:34??GDAL\ReadShp\ReadShp.sdf
?????文件?????????967??2017-07-24?08:22??GDAL\ReadShp\ReadShp.sln
?????文件???????27136??2017-07-24?17:34??GDAL\ReadShp\ReadShp.v12.suo
?????文件????????8048??2017-07-24?15:30??GDAL\ReadShp\ReadShp\DataAdd.cpp
?????文件????????1013??2017-07-24?15:39??GDAL\ReadShp\ReadShp\DataAdd.h
?????目錄???????????0??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\
?????文件?????1153963??2017-07-24?15:39??GDAL\ReadShp\ReadShp\Debug\DataAdd.obj
?????文件???????46150??2017-07-24?15:30??GDAL\ReadShp\ReadShp\Debug\MainFrm.obj
?????文件?????1204764??2017-07-24?15:38??GDAL\ReadShp\ReadShp\Debug\MapRender.obj
?????文件?????????712??2017-07-24?14:57??GDAL\ReadShp\ReadShp\Debug\ReadShp.Build.CppClean.log
?????文件????????1592??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.log
?????文件???????52993??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.obj
?????文件????49872896??2017-07-24?15:30??GDAL\ReadShp\ReadShp\Debug\ReadShp.pch
?????文件???????78188??2017-07-24?15:30??GDAL\ReadShp\ReadShp\Debug\ReadShp.res
?????目錄???????????0??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.tlog\
?????文件????????4920??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.tlog\cl.command.1.tlog
?????文件???????78460??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.tlog\CL.read.1.tlog
?????文件????????6280??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.tlog\CL.write.1.tlog
?????文件????????2096??2017-07-24?17:25??GDAL\ReadShp\ReadShp\Debug\ReadShp.tlog\li
............此處省略139個文件信息
評論
共有 條評論