On 02/24/2016 06:30 PM, Damian Dixon wrote:
Hi,
I've been meaning to submit a patch for awhile to libkml driver but have
not had time to do so.
The fix is a one line change highlighted below:
Great! Thank you. I'll give it a try.
Jan
int OGRLIBKMLDataSource::OpenKml (
const char *pszFilename,
int bUpdate )
{
std::string oKmlKml;
char szBuffer[1024+1];
VSILFILE* fp = VSIFOpenL(pszFilename, "rb");
if (fp == NULL)
{
CPLError ( CE_Failure, CPLE_OpenFailed,
"Cannot open %s", pszFilename );
return FALSE;
}
int nRead;
while ((nRead = VSIFReadL(szBuffer, 1, 1024, fp)) != 0)
{
try
{
oKmlKml.append(szBuffer, nRead);
}
catch(std::bad_alloc& e)
{
VSIFCloseL(fp);
return FALSE;
}
}
OGRLIBKMLPreProcessInput(oKmlKml);
VSIFCloseL(fp);
CPLLocaleC oLocaleForcer;
/***** create a SRS *****/
OGRSpatialReference *poOgrSRS =
new OGRSpatialReference ( OGRLIBKMLSRSWKT );
/***** parse the kml into the DOM *****/
std::string oKmlErrors;
ElementPtr poKmlRoot = kmldom::Parse ( oKmlKml, &oKmlErrors );
if ( !poKmlRoot ) {
CPLError ( CE_Failure, CPLE_OpenFailed,
"ERROR Parseing kml %s :%s",
pszFilename, oKmlErrors.c_str ( ) );
delete poOgrSRS;
return FALSE;
}
/***** get the container from root *****/
if ( !( m_poKmlDSContainer = GetContainerFromRoot ( m_poKmlFactory,
poKmlRoot ) ) ) {
CPLError ( CE_Failure, CPLE_OpenFailed,
"ERROR Parseing kml %s :%s %s",
pszFilename, "This file does not fit the OGR model,",
"there is no container element at the root." );
delete poOgrSRS;
return FALSE;
}
m_isKml = TRUE;
/***** get the styles *****/
ParseStyles ( AsDocument ( m_poKmlDSContainer ), &m_poStyleTable );
/***** parse for layers *****/
int nPlacemarks = ParseLayers ( m_poKmlDSContainer, poOgrSRS );
/***** if there is placemarks in the root its a layer *****/
* if ( nPlacemarks ) {* //
<------------------------------------------------------------------------------------------This
line
AddLayer ( CPLGetBasename ( pszFilename ),
poOgrSRS, wkbUnknown,
this, poKmlRoot, m_poKmlDSContainer, pszFilename, FALSE,
bUpdate, 1 );
}
delete poOgrSRS;
return TRUE;
}
Regards
Damian
On 24 February 2016 at 17:00, Jan Vaillant <[email protected]> wrote:
On 02/24/2016 12:53 AM, Even Rouault wrote:
Le mardi 23 février 2016 14:50:35, jan vaillant a écrit :
Hi list,
I am reading a zipped kml with gdal's libkml driver. I am trying to
access
the name tag of the document:
<kml>
<Document>
<name>a_name</name>
I did a quick testing It appears that the driver will report a <name> as
the
layer name only if it inside a <Folder> tag, but not as a direct child of
<Document>
Yes, thank you. I tried the kml driver as well and it stores the
Document/name and makes it available with layer.getName().
Bye
Jan
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev