我想检索存储在。中的多边形的点 postgres db。 db的内容是:
polygonid |vertices
-----------+---------------------------------------------------------------------
2 |((1,0),(1.5,-1),(2,-1),(2,1),(1,1),(0,0),(0,2),(3,2),(3,-2),(1,-2))
4 | ((3,3),(4,4),(5,5))
顶点列的类型为Polygon。
我正在使用libpqxx库进行C ++。
假设我想检索并访问顶点列中的点, 我会用C ++执行这些语句:
result R = W.exec ("select * from polygon_tbl");
for (result::const_iterator r = R.begin();
r != R.end();
++r)
{
int x = 0;
cout << "Polygon ID: " << r[0].to(x) << endl;
//Suppose i would like to print the first point of every polygon,
//how would i access it?
cout << "First vertex: " << r[1][0] << endl; ???
//Or suppose i would like to print the first x coordinate of
//every polygon, how would i access it?
cout << "First x coordinate: " << r[1][0][0] << endl; //???? (am just guessing here..)
}
抱歉,我对libpqxx很新。我已经非常了解libpqxx 有效,但我坚持使用Polygon类型。我们实际上只需要一个简单的 在Postgres我们的多边形存储,但我不知道如何访问它们 使用libpqxx。
答案 0 :(得分:2)
与此同时,我将使用此标记字符串:
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(",()");
tokenizer tokens(str_coordinates, sep);
for (tokenizer::iterator tok_iter = tokens.begin();
tok_iter != tokens.end(); ++tok_iter)
{
std::cout << "x:<" << *tok_iter << "> ";
++tok_iter;
std::cout << "y:<" << *tok_iter << "> " << endl;
}
答案 1 :(得分:2)
你不能使用ST_X()
ST_Y()
吗?
为了访问线串中的第N个点,有ST_PointN
。
答案 2 :(得分:0)
我不熟悉libpqxx,但在大多数客户端库中,结果都以字符串形式返回。因此,第一步尝试将字段转换为字符串并打印它。然后,如果它看起来像psql显示它的方式解析它自己更容易使用。
答案 3 :(得分:0)
您可以使用正则表达式构建您的poylgon:/(\ d,\ d)/
请注意,内部数字已分组,以便您可以检索迭代匹配对象的内部数字。 Ieach迭代将xy对添加到多边形。而不是\ d你可以使用一个可以匹配浮点数的正则表达式。
但是,在检索坐标之前,无法正确验证字符串。