func main() { flag.Parse() f, err := os.Open(*geoData) x.Check(err) gr, err := gzip.NewReader(f) x.Check(err) //var strBuf bytes.Buffer //bufReader := bufio.NewReader(gr) dec := json.NewDecoder(gr) countryToGeo := make(map[string]string) findFeatureArray(dec) for dec.More() { var f geojson.Feature err := dec.Decode(&f) fmt.Println(f.Properties["NAME_LONG"]) gg, err := geojson.Marshal(f.Geometry) ggg := strings.Replace(string(gg), "\"", "'", -1) country, ok := f.Properties["NAME_LONG"].(string) if ok { countryToGeo[country] = ggg } //fmt.Printf("\"%s\"", ggg) if err != nil { fmt.Println(err) } } gr.Close() f.Close() f, err = os.Open(*rdf) x.Check(err) gr, err = gzip.NewReader(f) x.Check(err) scanner := bufio.NewScanner(gr) out, err := os.Create("countryGeoData") x.Check(err) defer out.Close() count1, count2 := 0, 0 for scanner.Scan() { line := scanner.Text() if strings.Contains(line, "@en") { items := strings.Split(line, "\t") country := strings.Trim(strings.Split(items[2], "@")[0], "\"") fmt.Println(country) if geoD, ok := countryToGeo[country]; ok { count1++ out.WriteString(fmt.Sprintf("%s <loc> \"%s\"^^<geo:geojson> .\n", items[0], geoD)) } else { count2++ } } } fmt.Println(count1, count2) }
// MarshalText marshals to text func (v Geo) MarshalText() ([]byte, error) { // The text format is geojson res, err := geojson.Marshal(v.T) return bytes.Replace(res, []byte("\""), []byte("'"), -1), err }