golang获取国家和行政区划数据的插件库gountries的使用
golang获取国家和行政区划数据的插件库gountries的使用
gountries是一个Golang库,提供了国家(ISO-3166-1)、行政区划(ISO-3166-2)、货币(ISO 4217)、地理坐标(ISO-6709)等数据,以及翻译、国家边界等信息。
安装
go get github.com/pariz/gountries
基础示例
package main
import (
"fmt"
"github.com/pariz/gountries"
)
func main() {
query := gountries.New()
/////////////////
// 查找瑞典 //
/////////////////
sweden, _ := query.FindCountryByName("sweden")
// sweden, _ := query.FindCountryByAlpha("SE")
// sweden, _ := query.FindCountryByAlpha("SWE")
fmt.Println(sweden.Name.Common) // 输出: Sweden
fmt.Println(sweden.Name.Official) // 输出: Konungariket Sverige
fmt.Println(sweden.Translations["DEU"].Common) // 输出: Schweden
fmt.Println(sweden.Translations["DEU"].Official) // 输出: Königreich Schweden
}
进阶示例
package main
import (
"fmt"
"github.com/pariz/gountries"
)
func main() {
query := gountries.New()
////////////////////////////////////////////
// 查找瑞典的邻国 //
////////////////////////////////////////////
sweden, _ := query.FindCountryByAlpha("SWE") // "SE" 也可以使用
// 获取瑞典的邻国
for _, country := range sweden.BorderingCountries() {
fmt.Println(country.Name.Common)
}
// 输出:
// Finland
// Norway
////////////////////////////////////
// 查找瑞典的所有行政区划 //
////////////////////////////////////
subdivisions := sweden.SubDivisions()
for _, subdivision := range subdivisions {
fmt.Println(subdivision.Name)
}
// 输出:
// Västerbottens län
// Uppsala län
// Södermanlands län
// Gotlands län
// Dalarnas län
// ...
//////////////////////////////////////////////////////////
// 查找所有与德国和瑞士接壤的国家 //
//////////////////////////////////////////////////////////
countryQuery := gountries.Country{
Borders: []string{
"DEU",
"CHE",
},
}
countries := query.FindCountries(countryQuery)
for _, c := range countries {
fmt.Println(c.Name.Common)
}
// 输出:
// Austria
// France
///////////////////////////////////////////////////////////////////
// 计算瑞典和德国之间的距离(以公里为单位) //
///////////////////////////////////////////////////////////////////
se, _ := query.FindCountryByAlpha("SWE")
de, _ := query.FindCountryByAlpha("DEU")
distance := gountries.MeasureDistanceHaversine(se, de)
//distance := MeasureDistancePythagoras(se, de)
fmt.Println(distance)
// 输出:
// 1430.1937864547901
distance = gountries.CalculateHaversine(
se.Coordinates.MaxLatitude, se.Coordinates.MaxLongitude,
de.Coordinates.MinLatitude, de.Coordinates.MinLongitude)
fmt.Println(distance)
// 输出:
// 2641.26145088825
}
使用打包数据
data/yaml
子目录中的数据使用go-bindata嵌入。一旦你在项目中包含这个库,就不需要访问数据目录了。要添加或更新数据,修改YAML文件然后运行:
go-bindata -pkg gountries data/yaml/*
待办事项
- 省/县查询(部分完成)
- 坐标之间的测量(已完成)
- GeoJSON信息
- 建议?
更多关于golang获取国家和行政区划数据的插件库gountries的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang获取国家和行政区划数据的插件库gountries的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用gountries库获取国家和行政区划数据
gountries是一个用于获取国家和行政区划数据的Go语言库,它提供了丰富的国家信息、行政区划数据以及相关查询功能。下面我将详细介绍如何使用这个库。
安装
首先安装gountries库:
go get github.com/pariz/gountries
基本用法
1. 初始化
package main
import (
"fmt"
"github.com/pariz/gountries"
)
func main() {
// 初始化gountries实例
countries := gountries.New()
// 使用示例...
}
2. 获取所有国家
func getAllCountries(countries *gountries.Countries) {
// 获取所有国家
allCountries, err := countries.FindAllCountries()
if err != nil {
fmt.Println("Error:", err)
return
}
// 打印国家数量
fmt.Printf("Total countries: %d\n", len(allCountries))
// 打印前5个国家
for i, country := range allCountries[:5] {
fmt.Printf("%d. %s (%s)\n", i+1, country.Name.Common, country.Alpha2)
}
}
3. 按国家代码查询
func queryByCode(countries *gountries.Countries) {
// 按ISO 3166-1 alpha-2代码查询
country, err := countries.FindCountryByAlpha("CN")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Country: %s\n", country.Name.Common)
fmt.Printf("Official Name: %s\n", country.Name.Official)
fmt.Printf("Capital: %s\n", country.Capital)
fmt.Printf("Region: %s\n", country.Region)
fmt.Printf("Subregion: %s\n", country.Subregion)
fmt.Printf("Languages: %v\n", country.Languages)
fmt.Printf("Currency: %s\n", country.Currencies[0].Name)
}
4. 按名称查询国家
func queryByName(countries *gountries.Countries) {
// 按名称查询国家
country, err := countries.FindCountryByName("Japan")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Japan's alpha-2 code: %s\n", country.Alpha2)
fmt.Printf("Japan's capital: %s\n", country.Capital)
}
5. 获取国家的行政区划
func getSubdivisions(countries *gountries.Countries) {
// 获取中国的行政区划
subdivisions, err := countries.FindSubdivisions("CN")
if err != nil {
fmt.Println("Error:", err)
return
}
// 打印部分行政区划
fmt.Printf("China has %d subdivisions\n", len(subdivisions))
for code, sub := range subdivisions {
if code == "BJ" || code == "SH" || code == "GD" {
fmt.Printf("%s: %s\n", code, sub.Name)
}
}
}
6. 按经纬度查询国家
func queryByCoordinates(countries *gountries.Countries) {
// 按经纬度查询国家
country, err := countries.FindCountryByCoordinates(35.6762, 139.6503) // 东京坐标
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Country at Tokyo coordinates: %s\n", country.Name.Common)
}
高级用法
1. 获取国家边界信息
func getBorders(countries *gountries.Countries) {
// 获取德国的邻国
germany, err := countries.FindCountryByAlpha("DE")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Germany borders with:\n")
for _, alpha3 := range germany.Borders {
neighbor, err := countries.FindCountryByAlpha(alpha3)
if err != nil {
continue
}
fmt.Printf("- %s (%s)\n", neighbor.Name.Common, neighbor.Alpha2)
}
}
2. 获取国家电话区号
func getCallingCodes(countries *gountries.Countries) {
// 获取美国的电话区号
usa, err := countries.FindCountryByAlpha("US")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("USA calling codes: %v\n", usa.CallingCodes)
}
3. 获取国家时区
func getTimeZones(countries *gountries.Countries) {
// 获取俄罗斯的时区
russia, err := countries.FindCountryByAlpha("RU")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Russia time zones: %v\n", russia.TimeZones)
}
完整示例
package main
import (
"fmt"
"github.com/pariz/gountries"
)
func main() {
countries := gountries.New()
// 1. 获取所有国家
fmt.Println("=== All Countries ===")
getAllCountries(countries)
// 2. 按代码查询
fmt.Println("\n=== Query by Code ===")
queryByCode(countries)
// 3. 按名称查询
fmt.Println("\n=== Query by Name ===")
queryByName(countries)
// 4. 获取行政区划
fmt.Println("\n=== Subdivisions ===")
getSubdivisions(countries)
// 5. 按坐标查询
fmt.Println("\n=== Query by Coordinates ===")
queryByCoordinates(countries)
// 6. 获取边界国家
fmt.Println("\n=== Border Countries ===")
getBorders(countries)
// 7. 获取电话区号
fmt.Println("\n=== Calling Codes ===")
getCallingCodes(countries)
// 8. 获取时区
fmt.Println("\n=== Time Zones ===")
getTimeZones(countries)
}
// 前面定义的所有函数...
总结
gountries库提供了丰富的功能来查询国家和行政区划数据,包括:
- 按名称、代码、坐标查询国家
- 获取国家详细信息(首都、语言、货币等)
- 获取行政区划数据
- 查询邻国、电话区号、时区等信息
这个库非常适合需要处理国际化和本地化数据的应用程序,或者任何需要国家/地区信息的项目。