Skip to content

Commit

Permalink
添加天地图示例
Browse files Browse the repository at this point in the history
  • Loading branch information
atlasdatatech committed Jan 23, 2024
1 parent 58b6690 commit 8f4fb63
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 7 deletions.
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,18 @@ A well-polished tile downloader
- r 街道图
- s 影像无标注
- t 地形图
- y 影像含标注
- y 影像含标注


## 天地图说明
- 天地图影像,img_w
> url = "https://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
- 影像标注层,cia_w
> url = "https://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
- 天地图矢量(地形图),vec_w
> url = "https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
- 矢量标注层,cva_w
> url = "https://t0.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
> 工具已经处理了天地图429限制,请合理使用!!!
6 changes: 4 additions & 2 deletions conf.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
title = "MapCloud Tiler"
[output]
#can be mbtiles/file
format ="mbtiles"
format ="file"
#the output dir
directory ="output"
[task]
Expand All @@ -30,7 +30,9 @@
# url = "https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/{z}/{x}/{y}.vector.pbf?sku=1016gFniej06a&access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4M29iazA2Z2gycXA4N2pmbDZmangifQ.-g_vE53SD2WrJ6tFX7QHmA"
# url = "https://api.mapbox.com/v4/mapbox.mapbox-terrain-v2/{z}/{x}/{y}.vector.pbf?sku=1016gFniej06a&access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4M29iazA2Z2gycXA4N2pmbDZmangifQ.-g_vE53SD2WrJ6tFX7QHmA"
# url = "https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=KDhMfHvorAFkFe64wlZb"
url = "http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}"
# url = "http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}"
# url = "https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
url = "https://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=75f0434f240669f4a2df6359275146d2"
#lrs can set diff boundaries for diff levels
[[lrs]]
min = 0
Expand Down
101 changes: 101 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"database/sql"
"flag"
"fmt"
"os"
Expand Down Expand Up @@ -64,6 +65,105 @@ func initConf(cfgFile string) {
viper.SetDefault("task.timedelay", 0)
}

type TileData struct {
Z int
X int
Y int
Flag bool
}

// 插入瓦片数据
func insertTiles(db *sql.Tx, tiles []TileData) error {
// 准备插入语句
stmt, err := db.Prepare("INSERT INTO tiles (z, x, y,flag) VALUES (?, ?, ?, ?)")
if err != nil {
return err
}
defer stmt.Close()

// 执行插入
for _, tile := range tiles {
_, err = stmt.Exec(tile.Z, tile.X, tile.Y, tile.Flag)
if err != nil {
return err
}
}
return nil
}

func testDbTask() {

db, err := sql.Open("sqlite3", "./tiles.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()

createTableSQL := `CREATE TABLE IF NOT EXISTS tiles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
z INTEGER,
x INTEGER,
y INTEGER,
flag BOOLEAN
);`

_, err = db.Exec(createTableSQL)
if err != nil {
log.Fatal(err)
}

// 开始事务
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
defer tx.Rollback() // 如果提交事务前发生错误,则回滚事务

batchSize := 1 << 10
// 插入数据
tileBatch := make([]TileData, 0, batchSize)
total := 0
i := 0
for z := 0; z <= 12; z++ {
numTiles := 1 << uint(z) // 计算每个缩放级别的瓦片数量
total += numTiles * numTiles
log.Printf("级别%d,瓦片数量:%d\n", z, numTiles*numTiles)
log.Printf("总瓦片数量:%d\n", total)
for x := 0; x < numTiles; x++ {
for y := 0; y < numTiles; y++ {
tile := TileData{Z: z, X: x, Y: y, Flag: false}
tileBatch = append(tileBatch, tile)
// 批量插入
if len(tileBatch) >= batchSize {
err := insertTiles(tx, tileBatch) // 使用事务执行批量插入操作
if err != nil {
log.Fatal(err)
}
tileBatch = nil // 清空批次
}
i++
if i > 99999999 {
goto last
}
}

}
}
last:
// 处理剩余的批次
if len(tileBatch) > 0 {
err := insertTiles(tx, tileBatch) // 使用事务执行批量插入操作
if err != nil {
log.Fatal(err)
}
}
// 提交事务
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
}

func main() {
flag.Parse()
if hf {
Expand Down Expand Up @@ -109,6 +209,7 @@ func main() {
}
}
task := NewTask(layers, tm)
fmt.Println(task.workerCount)
task.Download()
secs := time.Since(start).Seconds()
log.Printf("\n%.3fs finished...", secs)
Expand Down
10 changes: 8 additions & 2 deletions task.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,8 @@ func (task *Task) tileFetcher(mt maptile.Tile, url string) {
}

req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
// req.Header.Set("Origin", "https://map.tianditu.gov.cn")
req.Header.Set("Referer", "https://jiangsu.tianditu.gov.cn")
req.Header.Set("Referer", "https://map.tianditu.gov.cn")
// req.Header.Set("Referer", "https://jiangsu.tianditu.gov.cn")
resp, err := client.Do(req)
if err != nil {
fmt.Println("发送请求失败:", err)
Expand Down Expand Up @@ -367,6 +367,12 @@ func (task *Task) Download() {
task.Bar.Start()
if task.outformat == "mbtiles" {
task.SetupMBTileTables()
} else {
if task.File == "" {
outdir := viper.GetString("output.directory")
task.File = filepath.Join(outdir, fmt.Sprintf("%s-z%d-%d.%s", task.Name, task.Min, task.Max, task.ID))
}
os.MkdirAll(task.File, os.ModePerm)
}
go task.savePipe()
for _, layer := range task.Layers {
Expand Down
3 changes: 1 addition & 2 deletions utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ func saveToMBTile(tile Tile, db *sql.DB) error {
}

func saveToFiles(tile Tile, task *Task) error {
rootdir := filepath.Base(task.File)
dir := filepath.Join(rootdir, fmt.Sprintf(`%d`, tile.T.Z), fmt.Sprintf(`%d`, tile.T.X))
dir := filepath.Join(task.File, fmt.Sprintf(`%d`, tile.T.Z), fmt.Sprintf(`%d`, tile.T.X))
os.MkdirAll(dir, os.ModePerm)
fileName := filepath.Join(dir, fmt.Sprintf(`%d.%s`, tile.T.Y, task.TileMap.Format))
err := os.WriteFile(fileName, tile.C, os.ModePerm)
Expand Down

0 comments on commit 8f4fb63

Please sign in to comment.