亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? queryproc.cpp

?? 興趣點POI(Point of Interests)的查詢程序。可以根據條件按照最近方式搜索到POI點
?? CPP
字號:
// QueryProc.cpp: implementation of the QueryProc class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QueryPOI.h"
#include "QueryProc.h"

#pragma warning(disable:4786)
#include <set>


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

const int MINRETCHARLEN = 256;  // 返回的字符串最小長度
const int MINSEARCHDIST = 2000;	//為了加快搜索速度,定義的最小搜索半徑,單位為米
const int MAXSEARCHDIST = 15000;//為了加快搜索速度,定義的最大搜索半徑,單位為米
const int MAXSEARCHCOUNT = 15;   //返回搜索的最近要素的個數


//排序類
class less_ff
{
public:
	bool operator () (const FeatXX &e,const FeatXX &a) const
	{
		return (e.dist < a.dist);
	}
};

//信息集合類,可以按照距離查詢點的距離從近到遠排序
//以滿足查詢距離查詢點最近的若干個點或道路
class FeatXXContainer : public std::set<FeatXX,less_ff>
{
	
};

//從字段獲取字符串
void getString_Val(_variant_t val,CString& str)
{ if (val.vt ==VT_BSTR) str=(LPCTSTR)(_bstr_t)val.bstrVal; else str=_T(""); }

//找距離點p距離<=d的所有要素
//sNameField是要素的名稱字段名
//返回值按照距離從近到遠放在集合xxSet中
//可以附加SQL條件strsql,以滿足對部分要素的查詢要求
void SearchInDistance(IPointPtr p,double d,IFeatureClassPtr pFC,CString sNamdField,CString sSQL,FeatXXContainer &xxSet)
{
	if (p==NULL || pFC==NULL) return;
	if (d <0 ) d = -d;
	
	//清除結果集
	xxSet.clear();

	IEnvelopePtr pScope(CLSID_Envelope);
	ISpatialReferencePtr pSpatRef;
	IGeometryPtr pGeomGraph;
	double xx,yy;
	
	IQueryFilterPtr pQFilter;
	IFeatureCursorPtr pFeatCursor;
	IFeaturePtr pFeat;
	double dist;
	IProximityOperatorPtr pProximity;
	IFieldsPtr pFields;
	long idxName;
	_variant_t val;
	CString str;
	
	//構造一個正方形框
	p->get_X(&xx); p->get_Y(&yy);	
	pScope->put_XMin(xx-d); pScope->put_XMax(xx+d);
	pScope->put_YMin(yy-d); pScope->put_YMax(yy+d);
	
	p->get_SpatialReference(&pSpatRef);
	//pSpatRef->putref_SpatialReference(pSpatRef);
	
	pScope->QueryInterface(&pGeomGraph);
	pGeomGraph->putref_SpatialReference(pSpatRef);
	
	//查找所有在靶區之內的要素
	BSTR bsName;
	pFC->get_ShapeFieldName(&bsName);
	_bstr_t shpFdNameBSTR(bsName,TRUE); 
	
	ISpatialFilterPtr pSpatialFilt(CLSID_SpatialFilter);
	
	pSpatialFilt->putref_Geometry(pGeomGraph);
	pSpatialFilt->put_SpatialRel(esriSpatialRelEnvelopeIntersects);//esriSpatialRelRelation
	pSpatialFilt->put_GeometryField(shpFdNameBSTR);
	if (!sSQL.IsEmpty()) pSpatialFilt->put_WhereClause(sSQL.AllocSysString());
	
	pFC->get_Fields(&pFields); //名稱字段的序號
	pFields->FindField(sNamdField.AllocSysString(),&idxName);

	long llid;
	pFields->FindField(L"ID",&llid);
	
	pQFilter = pSpatialFilt;
	pFC->Search(pQFilter,VARIANT_FALSE,&pFeatCursor);
	if (pFeatCursor == NULL) return;
	
	p->QueryInterface(&pProximity);	//以查詢點為中心
	
	pFeatCursor->NextFeature(&pFeat);
	while (pFeat)
	{
		FeatXX xxItem;
		
		pFeat->get_Shape(&pGeomGraph);
		if (!SUCCEEDED(pProximity->ReturnDistance(pGeomGraph,&dist))) {
			pFeatCursor->NextFeature(&pFeat);
			continue;
		}		
		xxItem.dist = dist;
		if (idxName != -1)	//獲取要素名稱
		{
			pFeat->get_Value(idxName,&val);
			getString_Val(val,str);
			xxItem.name = (LPCTSTR)str;
		}
		if (llid != -1)	//temp
		{
			pFeat->get_Value(llid,&val);
			getString_Val(val,str);
			xxItem.name += (LPCTSTR)str;
		}
		
		xxSet.insert(xxItem);
		pFeatCursor->NextFeature(&pFeat);
	}
	
	int num = xxSet.size();
}

//構造返回的字符串信息
CString MakeReturnString(FeatXXContainer xxset)
{
	CString s,ret;
	FeatXX xx;
	int i;
	FeatXXContainer::iterator it;
	for (i=0,it=xxset.begin(); i<MAXSEARCHCOUNT && it!=xxset.end(); i++,it++)
	{
		xx = *it;
		if (i!=0) ret += "; ";
		if (xx.dist > 1000)
			s.Format ("距離%s %.1lf公里",xx.name,xx.dist/1000.);
		else s.Format ("距離%s %d米",xx.name,(int)xx.dist);
		ret += s;
	}
	return ret;
}

//查詢最近的POI
//輸入為GPS經緯度(WGS84),單位為十進制度,如(116.213,39.8026),不是請作相應的轉換
bool QueryProc::QueryNearestPOI (double l,double b,CString& ret)
{
	if (pFCPOI == NULL)
	{
		if (!OpenPOIFeatureClass()) return false;
	}

	//將輸入的經緯度投影到WGS_1984_UTM_Zone_50N
	IPointPtr p(CLSID_Point);
	p->put_X(l); p->put_Y(b);

	//將輸入的經緯度(l,b)投影到WGS_1984_UTM_Zone_50N

	//創建地理SPR,賦予p
	ISpatialReferenceFactoryPtr pSpatRefFact(CLSID_SpatialReferenceEnvironment);
	IGeographicCoordinateSystemPtr pGCS;
	pSpatRefFact->CreateGeographicCoordinateSystem(esriSRGeoCS_WGS1984,&pGCS);
	if (pGCS == NULL) return false;
	
	ISpatialReferencePtr pGeoSpatRef;
	pGeoSpatRef = pGCS;
	p->putref_SpatialReference(pGeoSpatRef);

	ISpatialReferencePtr pPrjSpatRef;
	pPrjSpatRef = createGeoSpatialReferenceWGS84_50N();

	p->Project(pPrjSpatRef);

	double dist = MINSEARCHDIST;
	CString sSQL;
	sSQL = "";	//可以附加查詢條件,這里沒有
	FeatXXContainer xxSet;
	SearchInDistance(p,dist,pFCPOI,fieldPOIName,sSQL,xxSet);

	//一次性擴大搜索距離到最大
	if (xxSet.size() <=0)
	{
		dist = MAXSEARCHDIST;
		SearchInDistance(p,dist,pFCPOI,fieldPOIName,sSQL,xxSet);
	}

	//構造返回的字符串信息
	ret = MakeReturnString (xxSet);

	return true;

}


//查詢最近的街道
bool QueryProc::QueryNearestRoad (double l,double b,CString& ret)
{	
	if (pFCRoad == NULL)
	{
		if (!OpenRoadFeatureClass()) return false;
	}
	
	//將輸入的經緯度投影到WGS_1984_UTM_Zone_50N
	IPointPtr p(CLSID_Point);
	p->put_X(l); p->put_Y(b);
	
	//將輸入的經緯度(l,b)投影到WGS_1984_UTM_Zone_50N
	
	//創建地理SPR,賦予p
	ISpatialReferenceFactoryPtr pSpatRefFact(CLSID_SpatialReferenceEnvironment);
	IGeographicCoordinateSystemPtr pGCS;
	pSpatRefFact->CreateGeographicCoordinateSystem(esriSRGeoCS_WGS1984,&pGCS);
	if (pGCS == NULL) return false;
	
	ISpatialReferencePtr pGeoSpatRef;
	pGeoSpatRef = pGCS;
	p->putref_SpatialReference(pGeoSpatRef);
	
	ISpatialReferencePtr pPrjSpatRef;
	pPrjSpatRef = createGeoSpatialReferenceWGS84_50N();
	
	p->Project(pPrjSpatRef);
	
	double dist = MINSEARCHDIST;
	CString sSQL;
	sSQL = "";	//可以附加查詢條件,這里沒有
	FeatXXContainer xxSet;
	SearchInDistance(p,dist,pFCRoad,fieldRoadName,sSQL,xxSet);
	
	//一次性擴大搜索距離到最大
	if (xxSet.size() <=0)
	{
		dist = MAXSEARCHDIST;
		SearchInDistance(p,dist,pFCRoad,fieldRoadName,sSQL,xxSet);
	}
	
	//構造返回的字符串信息
	ret = MakeReturnString (xxSet);

	return true;

}

//=============================================================================
//創建缺省的SpatialReference
//即WGS_1984_UTM_Zone_50N
//=============================================================================
ISpatialReferencePtr QueryProc::createGeoSpatialReferenceWGS84_50N()
{
	ISpatialReferenceFactoryPtr pSpatRefFact(CLSID_SpatialReferenceEnvironment);
	IProjectedCoordinateSystemPtr pProjectedCoordinateSystem;
	pSpatRefFact->CreateProjectedCoordinateSystem(esriSRProjCS_WGS1984UTM_50N,&pProjectedCoordinateSystem);
	if (pProjectedCoordinateSystem == NULL) return NULL;
	
	ISpatialReferencePtr pSpatRef;
	pSpatRef = pProjectedCoordinateSystem;

	return pSpatRef;
}

//打開道路及POI要素圖層
bool QueryProc::OpenPOIFeatureClass ()
{
	//打開輸出輸入的工作空間
	IWorkspacePtr		 pInWks;
	IWorkspaceFactoryPtr pInWksFact;
	
	pInWksFact.CreateInstance(__uuidof(ShapefileWorkspaceFactory));
	pInWksFact->OpenFromFile ( inPutFilePath.AllocSysString(), 0L, &pInWks);
	
	IFeatureWorkspacePtr pInFeatWks;
	pInFeatWks = pInWks;
	if (pInFeatWks == NULL) {
		AfxMessageBox ("所選擇的路徑為非法工作空間路徑!");
		return 0; 
	}

	if (!SUCCEEDED(pInFeatWks->OpenFeatureClass(poiFileName.AllocSysString(),&pFCPOI))) 
	{
		AfxMessageBox ("打開POI要素錯誤。請關閉其他所有使用該數據的應用程序,并確保數據無誤!");
		return false;
	}

	return true;
}

//打開道路及POI要素圖層
bool QueryProc::OpenRoadFeatureClass ()
{
	//打開輸出輸入的工作空間
	IWorkspacePtr		 pInWks;
	IWorkspaceFactoryPtr pInWksFact;
	
	pInWksFact.CreateInstance(__uuidof(ShapefileWorkspaceFactory));
	pInWksFact->OpenFromFile ( inPutFilePath.AllocSysString(), 0L, &pInWks);
	
	IFeatureWorkspacePtr pInFeatWks;
	pInFeatWks = pInWks;
	if (pInFeatWks == NULL) {
		AfxMessageBox ("所選擇的路徑為非法工作空間路徑!");
		return 0; 
	}

	if (!SUCCEEDED(pInFeatWks->OpenFeatureClass(roadFileName.AllocSysString(),&pFCRoad)))
	{
		AfxMessageBox ("打開POI要素錯誤。請關閉其他所有使用該數據的應用程序,并確保數據無誤!");
		return false;
	}
	
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天视频在线观看 | 日本成人超碰在线观看| 国产精品污www在线观看| 精品福利一区二区三区免费视频| 夜夜亚洲天天久久| 一区二区三区在线免费播放| 亚洲欧美另类在线| 日韩一区二区在线观看| 欧美丰满一区二区免费视频| 国产精品影视在线| 国产精品1024| 色丁香久综合在线久综合在线观看| 国产精品沙发午睡系列990531| 久久久亚洲精品石原莉奈| 精品国产99国产精品| 国产91精品露脸国语对白| 亚洲在线成人精品| 水野朝阳av一区二区三区| 丝袜亚洲精品中文字幕一区| 久久综合99re88久久爱| 91美女在线观看| 欧美色成人综合| 26uuu另类欧美亚洲曰本| 中文字幕精品综合| 欧美一区二区三区啪啪| 99精品国产99久久久久久白柏| 日欧美一区二区| 1000部国产精品成人观看| 亚洲日本乱码在线观看| 午夜视频一区二区| 中文字幕在线不卡国产视频| 亚洲一二三专区| 狠狠色狠狠色综合| 91小视频在线观看| 欧美一区二区二区| 国产精品久久久久久久裸模| 亚洲一区二区三区四区不卡| 久草精品在线观看| 99v久久综合狠狠综合久久| 欧美精品欧美精品系列| 国产亚洲欧美日韩日本| 五月婷婷综合网| www.一区二区| 日韩免费福利电影在线观看| 欧美视频日韩视频在线观看| 成人免费看片app下载| 欧美日韩免费一区二区三区视频| 成人h动漫精品| 欧美va日韩va| 日韩理论片中文av| 欧美激情一区二区在线| 日本成人超碰在线观看| 色吧成人激情小说| 国产午夜精品久久| 亚洲国产精品传媒在线观看| 午夜精品福利视频网站| 91在线云播放| 91社区在线播放| 欧美国产日韩亚洲一区| 久久午夜国产精品| 日本亚洲天堂网| 欧美日韩综合在线免费观看| 亚洲欧美视频在线观看视频| 成人h动漫精品| 欧洲精品在线观看| 亚洲色图清纯唯美| 床上的激情91.| 91在线精品秘密一区二区| 国产午夜精品一区二区三区嫩草 | 欧美激情综合在线| 另类的小说在线视频另类成人小视频在线| 性感美女极品91精品| 一区二区三区四区不卡在线| 粉嫩13p一区二区三区| 国产色综合久久| 高清成人在线观看| 中文欧美字幕免费| av不卡在线播放| 亚洲欧美日韩国产中文在线| 色先锋久久av资源部| 91精品国产乱码久久蜜臀| 亚洲成人在线免费| 欧美一区二区不卡视频| 奇米精品一区二区三区在线观看一| 欧美精品三级日韩久久| 男女视频一区二区| 精品国产不卡一区二区三区| 国产成人午夜电影网| 欧美亚州韩日在线看免费版国语版| 日韩一区二区三区免费观看| 蜜臀av性久久久久蜜臀aⅴ| 粉嫩嫩av羞羞动漫久久久| 中文字幕av在线一区二区三区| 99久久综合国产精品| 亚洲国产综合在线| 日韩一区二区三区在线| 处破女av一区二区| 一区二区三区电影在线播| 欧美群妇大交群中文字幕| 麻豆精品在线观看| 欧美视频一区在线| 精品在线播放午夜| 亚洲图片另类小说| 日韩一区二区三区电影| 成人综合婷婷国产精品久久蜜臀 | 久久久久久久久蜜桃| 99国产精品国产精品毛片| 欧美肥胖老妇做爰| 国产经典欧美精品| 亚洲国产日韩精品| 久久精品人人做人人爽人人| 色哟哟亚洲精品| 狠狠色丁香久久婷婷综合_中 | 亚洲女性喷水在线观看一区| 欧美欧美欧美欧美首页| 成人午夜激情视频| 精品99999| 欧美三级电影在线看| √…a在线天堂一区| 日韩欧美一区二区不卡| 91同城在线观看| 国产精品原创巨作av| 日韩精品一级二级| 欧美日韩国产在线观看| 不卡一区二区三区四区| 国产精品乱码妇女bbbb| 日韩欧美一级二级三级久久久| 三级欧美在线一区| 6080亚洲精品一区二区| 99精品视频在线观看免费| 五月激情综合网| 欧美另类高清zo欧美| av中文字幕亚洲| 国产夫妻精品视频| 国产精品热久久久久夜色精品三区 | 精品av久久707| 欧美久久久久中文字幕| 97久久超碰国产精品| 国产精品一区免费在线观看| 日韩欧美色综合| 国产乱码一区二区三区| 中文字幕精品在线不卡| 久久亚洲二区三区| 日韩欧美中文字幕精品| 国产一区91精品张津瑜| 视频一区欧美精品| 亚洲成av人片一区二区三区| 91精品一区二区三区久久久久久 | 图片区小说区区亚洲影院| 成人免费在线播放视频| 国产精品乱码一区二区三区软件| 2021久久国产精品不只是精品| 国产一区二区电影| 国产麻豆精品在线观看| 亚洲日本韩国一区| 欧美一区二区美女| 日韩视频免费直播| 日韩免费一区二区| 欧美精品一区二区在线观看| www.成人网.com| 日韩不卡一区二区| 欧美激情一区三区| 欧美疯狂做受xxxx富婆| 欧美二区乱c少妇| 欧美电影免费观看高清完整版| 日韩视频免费直播| 一本久久精品一区二区| 九九视频精品免费| 精品在线观看视频| 亚洲国产精品欧美一二99| 亚洲一本大道在线| 日本亚洲电影天堂| 国产一区在线看| 日韩不卡免费视频| 国产精品卡一卡二| 亚洲成人福利片| 精品一区二区三区在线播放视频| 亚洲欧美日韩国产另类专区 | 午夜a成v人精品| 免费高清在线一区| 亚洲影视资源网| 国产精品福利影院| 久久精品国产久精国产| 韩国三级中文字幕hd久久精品| 亚洲综合久久久久| 国产精品免费免费| 欧美精品一区二区高清在线观看| 国产成人欧美日韩在线电影| aa级大片欧美| 狠狠色狠狠色综合系列| 日本欧美大码aⅴ在线播放| 国产一区二区三区在线观看免费 | 成人一级黄色片| 精品一区二区三区在线观看国产| 国产精品18久久久久久久久| 久久超碰97中文字幕| 丁香另类激情小说| 精品久久一区二区| 日韩精品一区二区三区在线观看| 国产精品人人做人人爽人人添|