做过GIS开发的进来!!!

无花无酒,天涯人 linux/C/C++  2011-11-02 05:31:41
做过GI的大神给点开发经验啦~~~。

还有我现在需要在打开layer,然后给一个矩形的坐标,然后要在这个layer里面找到和这个矩形所有相交的点。这样需要用到哪几个函数呢??

求一份GDAL、PROJ、OGR、GEOS库的中文手册、或者一些应用程序。就此拜谢了~~~~~~~~~~~~~~~·

...全文
120 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
谁能告诉我一下:我传入4坐标分别是start_x,start_y,end_x,end_y,或者经纬度start_lon,start_lat,end_lon,end_lat。来创建一个矩形么?
回复
怎么没一个大牛来帮帮忙呢?
回复
gzyyan249 2011-11-07
楼主你去这里找找http://www.sharpgis.com/,你的问题我无法解决,不好意思
回复
,在源码上面没有看到类似的例子.....!
回复
huangzhe10 2011-11-04
只能是自己看源码了,呵呵
回复
这样是输出了这个.shp里面"点"的所有"坐标"。

然后我看到源码里边有一个 Union、Intersection()函数
OGRGeometry * OGRGeometry::Union ( const OGRGeometry * poOtherGeom )
virtual OGRGeometry * Intersection (const OGRGeometry *) const

调用这个函数。返回一个新的Geometry.
然后就输出。

想法是这样的。不知道思路是否正确。
回复
[Quote=引用 2 楼 gzyyan249 的回复:]

是矩形框相交的点还是在矩形框内的点??
[/Quote]


是矩形框内的和框相交的点。

下面是一段源码。你看看
#include <ogrsf_frmts.h>

int main()

{
OGRRegisterAll();

OGRDataSource *poDS;


poDS = OGRSFDriverRegistrar::Open( "point.shp", FALSE );
if( poDS == NULL )
{
//const char *openerrmsg = CPLGetLastErrorMsg();
printf( "Open failed.\n "/*why=%s\n", openerrmsg*/ );
exit( 1 );
}

OGRLayer *poLayer;

poLayer = poDS->GetLayerByName( "point" );
OGRFeature *poFeature;

poLayer->ResetReading();
while( (poFeature = poLayer->GetNextFeature()) != NULL )
{

OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
int iField;

for( iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
{
OGRFieldDefn *poFieldDefn = poFDefn->GetFieldDefn( iField );

if( poFieldDefn->GetType() == OFTInteger )
printf( "%d,", poFeature->GetFieldAsInteger( iField ) );
else if( poFieldDefn->GetType() == OFTReal )
printf( "%.3f,", poFeature->GetFieldAsDouble(iField) );
else if( poFieldDefn->GetType() == OFTString )
printf( "%s,", poFeature->GetFieldAsString(iField) );
else
printf( "%s,", poFeature->GetFieldAsString(iField) );
}

OGRGeometry *poGeometry;

poGeometry = poFeature->GetGeometryRef();
if( poGeometry != NULL
&& wkbFlatten(poGeometry->getGeometryType()) == wkbPoint )
{
OGRPoint *poPoint = (OGRPoint *) poGeometry;

printf( "%.3f,%3.f\n", poPoint->getX(), poPoint->getY() );
}
else
{
printf( "no point geometry\n" );
}

}

OGRDataSource::DestroyDataSource( poDS );
}
回复
gzyyan249 2011-11-04
还有你的layer也是点吗??
回复
gzyyan249 2011-11-04
是矩形框相交的点还是在矩形框内的点??
回复
自己先顶一下~~~~~~~~~
回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2011-11-02 05:31
社区公告
暂无公告