|
@@ -591,12 +591,20 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -591,12 +591,20 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
591
|
std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str());
|
591
|
std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str());
|
592
|
|
592
|
|
593
|
string shapeName = layer->geom();
|
593
|
string shapeName = layer->geom();
|
594
|
- // WHERE \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d
|
|
|
595
|
- //sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s),%f) limit %d ",
|
|
|
596
|
- // shapeName.c_str(), x, y,layer->srid().c_str(), dis, feature_count);
|
|
|
597
|
-
|
|
|
598
|
- sql += format(" \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d limit %d ",
|
594
|
+ if(!layer->srid().empty() && layer->srid().length()==4)
|
|
|
595
|
+ {
|
|
|
596
|
+ // WHERE \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d
|
|
|
597
|
+ sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s),%f) limit %d ",
|
|
|
598
|
+ shapeName.c_str(), x, y,layer->srid().c_str(), dis, feature_count);
|
|
|
599
|
+ }
|
|
|
600
|
+ else
|
|
|
601
|
+ {
|
|
|
602
|
+ sql += format(" \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d limit %d ",
|
599
|
shapeName.c_str(), x - dis, y - dis, x + dis, y + dis, feature_count);
|
603
|
shapeName.c_str(), x - dis, y - dis, x + dis, y + dis, feature_count);
|
|
|
604
|
+ }
|
|
|
605
|
+
|
|
|
606
|
+
|
|
|
607
|
+
|
600
|
|
608
|
|
601
|
|
609
|
|
602
|
//cout<<sql.c_str() <<endl;
|
610
|
//cout<<sql.c_str() <<endl;
|
|
@@ -612,9 +620,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -612,9 +620,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
612
|
|
620
|
|
613
|
double x0 = (x - m_dXdis) / m_dR;
|
621
|
double x0 = (x - m_dXdis) / m_dR;
|
614
|
double y0 = (m_dYdis - y) / m_dR;
|
622
|
double y0 = (m_dYdis - y) / m_dR;
|
615
|
- double dis = 1 / m_dR;
|
623
|
+ double dis = 2 / m_dR;
|
616
|
|
624
|
|
617
|
- for (int i = (int)(m_vLayers.size()) - 1; i >= 0; i--)
|
625
|
+ for (int i = 0; i < m_vLayers.size(); i++)
|
618
|
{
|
626
|
{
|
619
|
DmpVectorLayer *layer = (DmpVectorLayer *)m_vLayers[i];
|
627
|
DmpVectorLayer *layer = (DmpVectorLayer *)m_vLayers[i];
|
620
|
|
628
|
|
|
@@ -632,7 +640,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -632,7 +640,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
632
|
string layerName = layer->name();
|
640
|
string layerName = layer->name();
|
633
|
if (pPgsqlConn->ExecWaitBinary(sql))
|
641
|
if (pPgsqlConn->ExecWaitBinary(sql))
|
634
|
{
|
642
|
{
|
635
|
- if(pPgsqlConn->GetRowCount()>0 || i==0)
|
643
|
+ if(pPgsqlConn->GetRowCount()>0 || i== m_vLayers.size()-1)
|
636
|
{
|
644
|
{
|
637
|
string srid = std::__cxx11::to_string(layer->crs().srid());
|
645
|
string srid = std::__cxx11::to_string(layer->crs().srid());
|
638
|
mapserver::DmpMapServerUtil::responseGeojson(pPgsqlConn, responseData, layerName, srid);
|
646
|
mapserver::DmpMapServerUtil::responseGeojson(pPgsqlConn, responseData, layerName, srid);
|