[gdal-dev] libkml driver get document name
Damian Dixon
damian.dixon at gmail.com
Wed Feb 24 09:30:30 PST 2016
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:
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 <jvail at gmx.de> 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
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20160224/91c97d00/attachment.html>
More information about the gdal-dev
mailing list