what i need :
- Delete several lines from a .kml file
- insert / write several lines into the .kml file
sample source :
Code: Select all
Sample =
(
<?xml version="1.0" encoding="UTF-8"?>
<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>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gemolong</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gesi</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gondang</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
</Document>
)
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<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>
<Placemark><ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gemolong</SimpleData></SchemaData></ExtendedData><name>Gemolong</name><Style><LineStyle><color>FFFFFFFF</color></LineStyle><PolyStyle><color>FF14B4FF</color><colorMode>normal</colorMode><fill>1</fill></PolyStyle></Style>
</Placemark>
<Placemark><ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gesi</SimpleData></SchemaData></ExtendedData><name>Gesi</name><Style><LineStyle><color>FFFFFFFF</color></LineStyle><PolyStyle><color>FF9FE0FF</color><colorMode>normal</colorMode><fill>1</fill></PolyStyle></Style>
</Placemark>
<Placemark><ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gondang</SimpleData></SchemaData></ExtendedData><name>Gondang</name><Style><LineStyle><color>FFFFFFFF</color></LineStyle><PolyStyle><color>FF14B4FF</color><colorMode>normal</colorMode><fill>1</fill></PolyStyle></Style>
</Placemark>
</Document>
</Document>
The Problem :
- i can successfully get the expected result if i use %sample% variable as the input
- the code does nothing when i change the input to fileread
my code so far :
Code: Select all
KmlColoring()
{
sample =
(
<?xml version="1.0" encoding="UTF-8"?>
<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>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gemolong</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gesi</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#gadm36_IDN_3">
<SimpleData name="NAME_0">Indonesia</SimpleData>
<SimpleData name="NAME_1">Jawa Tengah</SimpleData>
<SimpleData name="NAME_2">Sragen</SimpleData>
<SimpleData name="NAME_3">Gondang</SimpleData>
</SchemaData></ExtendedData>
</Placemark>
</Document>
)
FileSource := "testSource.kml"
FileResult := "testResult.kml"
FileRead, FileReadVar, %FileSource% ;This does not work, result shows no change whatsoever from source file
;FileReadVar := sample ; This works as expected
PolygonColorList =
(
FF14B4FF Gemolong
FF9FE0FF Gesi
FF14B4FF Gondang
FF1400AA Jenar
FF9FE0FF Kalijambe
FF1400FF Karangmalang
FF14B4FF Kedawung
)
FileReadVar := RegexReplace(FileReadVar, "U)<Placemark>.*<ExtendedData>","<Placemark><ExtendedData>")
lines := StrSplit(PolygonColorList, "`n")
columns := []
for index, value in lines
{
columns.Insert(StrSplit(value, "`t"))
Kec := columns[A_Index][2]
Color := columns[A_Index][1]
Needle01 =
(
Us)(>%Kec%</SimpleData>`n`t</SchemaData></ExtendedData>)
)
Needle02 =
(
>%Kec%</SimpleData>`n`t</SchemaData></ExtendedData>
)
Replace =
(
>%Kec%</SimpleData></SchemaData></ExtendedData><name>%Kec%</name><Style><LineStyle><color>FFFFFFFF</color></LineStyle><PolyStyle><color>%Color%</color><colorMode>normal</colorMode><fill>1</fill></PolyStyle></Style>
)
FoundPos := RegExMatch(FileReadVar, Needle01, m)
;newStr := StrReplace(FileReadVar, Needle01, m1 . Replace . m3)
FileReadVar := RegexReplace(FileReadVar, Needle02, Replace)
}
Result := FileReadVar
msgbox % Result
file := FileOpen(FileResult, "w")
file.Write(Result)
}
Return
- set color for a certain polygon in a .kml file
- there are more than 1.000+ polygon than the above example
Full source file :
https://pastebin.com/ZR4NsMm8