只是一个很小的程序测试geos库里的touch和intersection算子,可是不知道为什么老出错,请教高手指点迷津。下面是程序: PrecisionModel *pm = new PrecisionModel();
GeometryFactory * global_factory= new GeometryFactory(pm);
CoordinateSequence *cl = new CoordinateArraySequence();
cl->add(Coordinate(100,100));
cl->add(Coordinate(100,200));
cl->add(Coordinate(200,200));
cl->add(Coordinate(200,100));
cl->add(Coordinate(100,100));
LinearRing *lr = global_factory->createLinearRing(cl);
geos::geom::Polygon *poly=NULL;
poly = global_factory->createPolygon(lr,NULL); CoordinateSequence *cr = new CoordinateArraySequence();
cr->add(geos::geom::Coordinate(150, 150));
cr->add(geos::geom::Coordinate(150, 250));
cr->add(geos::geom::Coordinate(250, 250));
cr->add(geos::geom::Coordinate(250, 150));
cr->add(geos::geom::Coordinate(150, 150)); LinearRing *li = global_factory->createLinearRing(cr);
geos::geom::Polygon *poly1=global_factory->createPolygon(li,NULL); geos::geom::Geometry *poly2;
BOOL test;
geos::geom::Geometry *g1=poly;
geos::geom::Geometry *g2=poly1;
test=g2->touches(g2); //出现非法访问错误
poly2=g1->intersection(g2); //出现buffer overrun错误
global_factory->destroyGeometry(lr);
global_factory->destroyGeometry(li);
if (cr)
{
delete cr;
cr=NULL;
}
if (cl)
{
delete cl;
cl=NULL;
}
global_factory->destroyGeometry(poly);
global_factory->destroyGeometry(poly1);
global_factory->destroyGeometry(poly2);
delete pm; 编译时没有错误,只是每次运行到touch和intersection算法时就出错。前面创建LinearRing已经测试过了,数据确实传递进去了,没有问题。创建Polygon时如果第二个参数传递非NULL时会提示非法访问,设为NULL后Polygon可以创建成功,只是算法为什么不能用呢?
考虑了很久也上网查了很多资料还是不知道问题出在哪里。有没有用过的高人能告诉我问题在哪,要不然真是要崩溃了呀。
GeometryFactory * global_factory= new GeometryFactory(pm);
CoordinateSequence *cl = new CoordinateArraySequence();
cl->add(Coordinate(100,100));
cl->add(Coordinate(100,200));
cl->add(Coordinate(200,200));
cl->add(Coordinate(200,100));
cl->add(Coordinate(100,100));
LinearRing *lr = global_factory->createLinearRing(cl);
geos::geom::Polygon *poly=NULL;
poly = global_factory->createPolygon(lr,NULL); CoordinateSequence *cr = new CoordinateArraySequence();
cr->add(geos::geom::Coordinate(150, 150));
cr->add(geos::geom::Coordinate(150, 250));
cr->add(geos::geom::Coordinate(250, 250));
cr->add(geos::geom::Coordinate(250, 150));
cr->add(geos::geom::Coordinate(150, 150)); LinearRing *li = global_factory->createLinearRing(cr);
geos::geom::Polygon *poly1=global_factory->createPolygon(li,NULL); geos::geom::Geometry *poly2;
BOOL test;
geos::geom::Geometry *g1=poly;
geos::geom::Geometry *g2=poly1;
test=g2->touches(g2); //出现非法访问错误
poly2=g1->intersection(g2); //出现buffer overrun错误
global_factory->destroyGeometry(lr);
global_factory->destroyGeometry(li);
if (cr)
{
delete cr;
cr=NULL;
}
if (cl)
{
delete cl;
cl=NULL;
}
global_factory->destroyGeometry(poly);
global_factory->destroyGeometry(poly1);
global_factory->destroyGeometry(poly2);
delete pm; 编译时没有错误,只是每次运行到touch和intersection算法时就出错。前面创建LinearRing已经测试过了,数据确实传递进去了,没有问题。创建Polygon时如果第二个参数传递非NULL时会提示非法访问,设为NULL后Polygon可以创建成功,只是算法为什么不能用呢?
考虑了很久也上网查了很多资料还是不知道问题出在哪里。有没有用过的高人能告诉我问题在哪,要不然真是要崩溃了呀。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货