Отображение локального изображения в simplekml

Я пытаюсь использовать simplekml, чтобы поместить кучу фотографий с геотегами в файл KML ( ну, на самом деле файл KMZ) для просмотра в Google Earth. У меня есть места для отображения, однако, когда я пытаюсь поместить изображение в описание, поэтому, когда я нажимаю на места, появляется изображение, оно не работает. Есть просто пустое изображение. Я пытаюсь сделать это с помощью показанной команды addfile() здесь. Мой код выглядит так:

import os, simplekml

path = r'C:\Users\as\Desktop\testpics'                     
    
kml = simplekml.Kml()

for (dirpath, dirnames, filenames) in os.walk(path):
    for filename in filenames:
        fullpath = os.path.join(dirpath, filename)
        try:
            Lat, Long, Alt = GetLatLong(fullpath) #Didn't include this function, but it appears to work
        except:
            Lat, Long, Alt = (None, None, None)
        if Lat: #Only adds to kml if it has Lat value.
            x, y = (FormatLatLong(Lat), FormatLatLong(Long)) #puts into decimal coords
            point = kml.newpoint(name = filename , coords = [(y,x)])
            picpath = kml.addfile(fullpath)
            point.description = '<img src="' + picpath +'" alt="picture" width="400" height="300" align="left" />'

            

kml.savekmz("kmltest2.kmz", format = False)

Как видите, я в значительной степени вырезал и вставил инструкции по использованию addfile из инструкций на странице выше. Кажется, что в строке point.description что-то идет не так.

Картинки добавляются в архив kmz, но не отображаются в пузырьках местоположения. Я подумал, что это может быть из-за того, что я делаю это в Windows 7, а косая черта обратная, но я попытался вручную изменить files\image.jpg на files/image.jpg, и это не помогло. Созданный файл KMZ doc.kml выглядит следующим образом:

    <kml xmlns="http://www.opengis.net/kml/2.2"xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="feat_1">
    <Placemark id="feat_2">
    <name>DSC00001.JPG</name>
    <description>&lt;img src="files/DSC00001.JPG" alt="picture" width="400" height="300" align="left" /&gt;</description>
    <Point id="geom_0"><coordinates>18.9431816667,9.44355222222,0.0</coordinates>
    </Point></Document></kml>

(Я удалил все пункты, кроме одного) Большое спасибо, Алекс.


person Alex S    schedule 12.03.2013    source источник
comment
Я также пробовал Вариант 1 здесь, но не почини это.   -  person Alex S    schedule 14.03.2013


Ответы (1)


Возможно, это из-за незакрытого тега метки в файле kml, который вы написали. Поэтому закройте тег метки после закрытия тега точки.

<kml xmlns="http://www.opengis.net/kml/2.2"xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document id="feat_1">
    <Placemark id="feat_2">
    <name>DSC00001.JPG</name>
    <description>&lt;img src="files/DSC00001.JPG" alt="picture" width="400" height="300" align="left" /&gt;</description>
    <Point id="geom_0"><coordinates>18.9431816667,9.44355222222,0.0</coordinates>
    </Point></Placemark></Document></kml>

Если приведенный выше код после размещения тега метки места не работает, попробуйте использовать стиль шара вместо тега описания, попробуйте код ниже.

<kml xmlns="http://www.opengis.net/kml/2.2"
     xmlns:gx="http://www.google.com/kml/ext/2.2" 
     xmlns:kml="http://www.opengis.net/kml/2.2" 
     xmlns:atom="http://www.w3.org/2005/Atom"
>
<Document id="feat_1">
<Placemark id="feat_2">
<name>DSC00001.JPG</name>
<Style>
<BalloonStyle>
<text><![CDATA[
 <table width=100% cellpadding=0 cellspacing=0>
  <tr><td><img width=100% src='files/DSC00001.jpg' /></td></tr></table>]]>
</text>
</BalloonStyle>
</Style> 
<Point id="geom_0">
<coordinates>18.9431816667,9.44355222222</coordinates>
</Point>
</Placemark>
</Document>
</kml>
person 565    schedule 14.03.2013
comment
Отлично, большое спасибо. У меня была ‹/метка› в моем исходном файле, я просто забыл скопировать ее, когда обрезал, но ваше второе предложение сработало. Я добавил это в свой скрипт simplekml: point.style.balloonstyle.text = ‹![CDATA[ ‹table width=100% cellpadding=0 Cellspacing=0› ‹tr›‹td›‹img width=100% src=' + имя файла + ' /›‹/td›‹/tr›‹/table›]]› . Интересное замечание: расширение имени файла ДОЛЖНО быть в нижнем регистре, даже если изображение не названо таким образом - .JPG не будет работать, .jpg будет. - person Alex S; 14.03.2013
comment
Теперь, когда я об этом думаю, возможно, проблема с исходным сценарием заключалась в том, что все изображения были в формате .JPG, а не .jpg. Я мог бы пойти и протестировать его, но это означало бы отмену кучи изменений, так что я не собираюсь этого делать. - person Alex S; 14.03.2013