bool UAVFlightPlan::exportToKMLFile(const std::string &f, int begin_, int end_) const { bool ret_val = true; if (end_ < 0 || end_ > size()) { end_ = size(); } if (begin_ < 0 || begin_ > size()) { begin_ = 0; } const_iterator it = begin(); // Advance to the first waypoint to save int i = 0; for (; i < begin_; i++, it++); KmlFactory* factory = KmlFactory::GetFactory(); kmldom::DocumentPtr doc = factory->CreateDocument(); for (int j = 1; i < end_ && it != end(); j++,i++, it++) { ostringstream name_; name_ << "Waypoint " << j; // Create a <Point> with <coordinates> from the given Vec3. kmlbase::Vec3 v(it->getLongitude(), it->getLatitude(), it->getAltitude()); kmldom::PointPtr point = kmlconvenience::CreatePointFromVec3(v); PlacemarkPtr place = factory->CreatePlacemark(); place->set_geometry(point); doc->add_feature(place); } // Finally create the kml KmlPtr kml = factory->CreateKml(); kml->set_feature(doc); // Then the file KmlFilePtr kmlfile = KmlFile::CreateFromImport(kml); if (!kmlfile) { cerr << "error: could not create kml file" << endl; return false; } // And write it std::string kml_data; kmlfile->SerializeToString(&kml_data); if (!kmlbase::File::WriteStringToFile(kml_data, f.c_str())) { cerr << "error: write of " << f << " failed" << endl; ret_val = false; } return ret_val; }
OGRErr OGRLIBKMLLayer::DeleteFeature( GIntBig nFIDIn ) { if( !bUpdate || !m_poKmlUpdate ) return OGRERR_UNSUPPORTED_OPERATION; KmlFactory *poKmlFactory = m_poOgrDS->GetKmlFactory(); DeletePtr poDelete = poKmlFactory->CreateDelete(); m_poKmlUpdate->add_updateoperation(poDelete); PlacemarkPtr poKmlPlacemark = poKmlFactory->CreatePlacemark(); poDelete->add_feature(poKmlPlacemark); const char* pszId = CPLSPrintf("%s." CPL_FRMT_GIB, OGRLIBKMLGetSanitizedNCName(GetName()).c_str(), nFIDIn); poKmlPlacemark->set_targetid(pszId); /***** mark as updated *****/ m_poOgrDS->Updated(); return OGRERR_NONE; }