做过GIS开发的进来!!!

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

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

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

...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谁能告诉我一下:我传入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
  • 打赏
  • 举报
回复
是矩形框相交的点还是在矩形框内的点??
  • 打赏
  • 举报
回复
自己先顶一下~~~~~~~~~

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧