void LocationListModel::setPattern(const QString& pattern) { beginResetModel(); for (QList<Location*>::iterator location=locations.begin(); location!=locations.end(); ++location) { delete *location; } locations.clear(); osmscout::LocationSearchResult searchResult; std::string osmPattern=pattern.toUtf8().constData(); osmscout::GeoCoord coord; if (osmscout::GeoCoord::Parse(osmPattern, coord)) { QString name=QString::fromLocal8Bit(coord.GetDisplayText().c_str()); QString label=name; Location *location=new Location(name, label, coord); locations.append(location); } std::cout << "Searching for '" << osmPattern << "'" << std::endl; DBThread::GetInstance()->SearchForLocations(osmPattern, 50, searchResult); std::map<osmscout::FileOffset,osmscout::AdminRegionRef> adminRegionMap; for (std::list<osmscout::LocationSearchResult::Entry>::const_iterator entry=searchResult.results.begin(); entry!=searchResult.results.end(); ++entry) { Location *location=NULL; if (entry->adminRegion && entry->location && entry->address) { QString adminRegion=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); QString loc=QString::fromUtf8(entry->location->name.c_str()); QString address=QString::fromUtf8(entry->address->name.c_str()); QString name; QString label; name+=loc; name+=" "; name+=address; name+=" "; name+=adminRegion; label+="<b>"; label+=loc; label+=" "; label+=address; label+="</b>"; label+=" "; label+=adminRegion; label+="<br/>"; label+="<i>"; label+=GetObjectTypLabel(entry->address->object); label+="</i>"; std::cout << "- " << name.toLocal8Bit().data() << std::endl; location=new Location(Location::typeObject, name, label); location->addReference(entry->address->object); } else if (entry->adminRegion && entry->location) { QString adminRegion=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); QString loc=QString::fromUtf8(entry->location->name.c_str()); QString name; QString label; name+=loc; name+=" "; name+=adminRegion; label+="<b>"; label+=loc; label+="</b>"; label+=" "; label+=adminRegion; label+="<br/>"; label+="<i>"; label+=GetObjectTypLabel(entry->location->objects.front()); label+="</i>"; std::cout << "- " << name.toLocal8Bit().data() << std::endl; location=new Location(Location::typeObject, name, label); for (std::vector<osmscout::ObjectFileRef>::const_iterator object=entry->location->objects.begin(); object!=entry->location->objects.end(); ++object) { location->addReference(*object); } } else if (entry->adminRegion && entry->poi) { QString adminRegion=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); QString poi=QString::fromUtf8(entry->poi->name.c_str()); QString name; QString label; name+=poi; name+=" "; name+=adminRegion; label+="<b>"; label+=poi; label+="</b>"; label+=" "; label+=adminRegion; label+="<br/>"; label+="<i>"; label+=GetObjectTypLabel(entry->poi->object); label+="</i>"; std::cout << "- " << name.toLocal8Bit().data() << std::endl; location=new Location(Location::typeObject, name, label); location->addReference(entry->poi->object); } else if (entry->adminRegion) { QString adminRegion=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); QString name; QString label; name+=adminRegion; label+="<b>"; label+=adminRegion; label+="</b>"; label+="<br/>"; label+="<i>"; if (entry->adminRegion->aliasObject.Valid()) { label+=GetObjectTypLabel(entry->adminRegion->aliasObject); } else { label+=GetObjectTypLabel(entry->adminRegion->object); } label+="</i>"; location=new Location(Location::typeObject, name, label); std::cout << "- " << name.toLocal8Bit().data() << std::endl; if (entry->adminRegion->aliasObject.Valid()) { location->addReference(entry->adminRegion->aliasObject); } else { location->addReference(entry->adminRegion->object); } } if (location!=NULL) { locations.append(location); } } endResetModel(); }
void LocationListModel::setPattern(const QString& pattern) { beginResetModel(); for (QList<Location*>::iterator location=locations.begin(); location!=locations.end(); ++location) { delete *location; } locations.clear(); osmscout::LocationSearchResult searchResult; std::string osmPattern=pattern.toUtf8().constData(); std::cout << "Searching for '" << osmPattern << "'" << std::endl; DBThread::GetInstance()->SearchForLocations(osmPattern, 50, searchResult); std::map<osmscout::FileOffset,osmscout::AdminRegionRef> adminRegionMap; for (std::list<osmscout::LocationSearchResult::Entry>::const_iterator entry=searchResult.results.begin(); entry!=searchResult.results.end(); ++entry) { Location *location=NULL; if (entry->adminRegion && entry->location && entry->address) { QString label=QString::fromUtf8(entry->location->name.c_str()); label+=" "; label+=QString::fromUtf8(entry->address->name.c_str()); label+=" "; label+=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); std::cout << "- " << label.toLocal8Bit().data() << std::endl; location=new Location(label); location->addReference(entry->address->object); } else if (entry->adminRegion && entry->location) { QString label=QString::fromUtf8(entry->location->name.c_str()); label+=" "; label+=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); std::cout << "- " << label.toLocal8Bit().data() << std::endl; location=new Location(label); for (std::vector<osmscout::ObjectFileRef>::const_iterator object=entry->location->objects.begin(); object!=entry->location->objects.end(); ++object) { location->addReference(*object); } } else if (entry->adminRegion && entry->poi) { QString label=QString::fromUtf8(entry->poi->name.c_str()); label+=" "; label+=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); std::cout << "- " << label.toLocal8Bit().data() << std::endl; location=new Location(label); location->addReference(entry->poi->object); } else if (entry->adminRegion) { QString label=GetAdminRegionLabel(adminRegionMap, entry->adminRegion); location=new Location(label); std::cout << "- " << label.toLocal8Bit().data() << std::endl; if (entry->adminRegion->aliasObject.Valid()) { location->addReference(entry->adminRegion->aliasObject); } else { location->addReference(entry->adminRegion->object); } } if (location!=NULL) { locations.append(location); } } endResetModel(); }