golang 读取shp文件

Python018

golang 读取shp文件,第1张

package main

import (

"fmt"

"github.com/jonas-p/go-shp"

"log"

"reflect"

)

func main() {

// open a shapefile for reading

  reader, err := shp.Open("E:/example.shp")

if err != nil {

log.Fatal(err)

}

defer reader.Close()

// fields from the attribute table (DBF)

  fields := reader.Fields()

//fmt.Println(reader.AttributeCount())

//for k, f := range fields {

// fmt.Println(k,f)

//}

////fmt.Println(reader.Attribute(0))

//loop through all features in the shapefile

  for reader.Next() {

n, p := reader.Shape()

point := p.(*shp.Point)

x := point.X

y := point.Y

fmt.Println(x, y)

// print feature

      fmt.Println(reflect.TypeOf(p).Elem(), p.BBox())

// print attributes

      for k, f :=range fields {

val := reader.ReadAttribute(n, k)

fmt.Printf("\t%v: %v\n", f, val)

}

fmt.Println()

}

}

   当读取91.2 MB文件时,read1耗时43ms,read2耗时99ms。

查看源码:

读取文件主要是通过 Read(p []byte) (n int, err error) :

官方文档中关于该接口方法的说明:

结论:

  ReadFile(filename string)方法之所以速度快的原因就是先计算出file文件的size,在初始化对应size大小的buff,传入ReadRead(p []byte) 来读取字节流

是程序运行太快肉眼分辨不出了,可以睡眠5秒

package main

import (

"fmt"

"time"

)

func main() {

fmt.Println("hello world !")

time.Sleep(5 * time.Second)

}