diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/factory.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 3901e183..9388b196 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -3587,7 +3587,8 @@ AuthorityFactory::createFromCoordinateReferenceSystemCodes( "ss.superseded_table_name = cov.table_name AND " "ss.superseded_auth_name = cov.auth_name AND " "ss.superseded_code = cov.code AND " - "ss.superseded_table_name = ss.replacement_table_name " + "ss.superseded_table_name = ss.replacement_table_name AND " + "ss.same_source_target_crs = 1 " "WHERE "; } else { sql = "SELECT source_crs_auth_name, source_crs_code, " @@ -3920,12 +3921,14 @@ AuthorityFactory::createFromCRSCodesWithIntermediates( "ss1.superseded_table_name = v1.table_name AND " "ss1.superseded_auth_name = v1.auth_name AND " "ss1.superseded_code = v1.code AND " - "ss1.superseded_table_name = ss1.replacement_table_name " + "ss1.superseded_table_name = ss1.replacement_table_name AND " + "ss1.same_source_target_crs = 1 " "LEFT JOIN supersession ss2 ON " "ss2.superseded_table_name = v2.table_name AND " "ss2.superseded_auth_name = v2.auth_name AND " "ss2.superseded_code = v2.code AND " - "ss2.superseded_table_name = ss2.replacement_table_name "); + "ss2.superseded_table_name = ss2.replacement_table_name AND " + "ss2.same_source_target_crs = 1 "); const std::string joinArea( (discardSuperseded ? joinSupersession : std::string()) + "JOIN area a1 ON v1.area_of_use_auth_name = a1.auth_name " @@ -4529,10 +4532,11 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates( const auto filterOutSuperseded = [&](SQLResultSet &&resultSet) { std::set<std::pair<std::string, std::string>> setTransf; - std::string findSupersededSql("SELECT superseded_table_name, " - "superseded_auth_name, superseded_code, " - "replacement_auth_name, replacement_code " - "FROM supersession WHERE "); + std::string findSupersededSql( + "SELECT superseded_table_name, " + "superseded_auth_name, superseded_code, " + "replacement_auth_name, replacement_code " + "FROM supersession WHERE same_source_target_crs = 1 AND ("); bool findSupersededFirstWhere = true; ListOfParams findSupersededParams; @@ -4583,6 +4587,7 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates( setTransf.insert( std::pair<std::string, std::string>(auth_name2, code2)); } + findSupersededSql += ')'; std::map<std::string, std::vector<std::pair<std::string, std::string>>> mapSupersession; |
