Heim Backend-Entwicklung Golang So erstellen Sie eine Kartenanwendung mit der Sprache Go und Vue.js

So erstellen Sie eine Kartenanwendung mit der Sprache Go und Vue.js

Jun 17, 2023 am 11:49 AM
go语言 地图应用程序 vuejs

In der heutigen hochgradig vernetzten Welt sind Kartenanwendungen zu einem wichtigen Bestandteil verschiedener Anwendungsszenarien geworden. Die Go-Sprache und Vue.js stellen eine effiziente, leichte Back-End-Sprache bzw. ein modernes, umfassendes Front-End-Framework dar, die leistungsstarke technische Unterstützung für Kartenanwendungen bieten können. In diesem Artikel wird erläutert, wie Sie eine einfache Kartenanwendung mithilfe der Go-Sprache und Vue.js erstellen.

Schritt 1: Wählen Sie eine Karten-API aus

Zuerst müssen Sie eine verfügbare Karten-API auswählen. Google Maps, Baidu Maps, Amap usw. sind gängige Optionen. Hier haben wir uns für Mapbox entschieden, das leistungsstarke Kartenrendering- und Overlay-Zeichnungsfunktionen sowie eine gute Entwicklerdokumentation und ein SDK bietet.

Schritt 2: Backend-Konstruktion

Verwenden Sie die Go-Sprache, um das Backend zu erstellen. Hier empfehlen wir die Verwendung des Echo-Frameworks. Sein API-Design ist einfach, benutzerfreundlich und wird häufig in Produktionsumgebungen verwendet. Im Folgenden finden Sie den Code zum Einführen der erforderlichen Pakete und zum Initialisieren von Echo:

import (
    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Routes
    e.GET("/", hello)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}
Nach dem Login kopieren

Hier haben wir auf die beiden Pakete Echo und Middleware verwiesen und Echo zum Initialisieren des HTTP-Servers verwendet. Die HTTP-GET-Methode kann über e.GET("/", hello) definiert werden, wodurch die Funktion hello für die Stamm-URL aufgerufen wird. Verwenden Sie e.Logger.Fatal(e.Start(":1323")), um den HTTP-Server einfach zu starten und Port 1323 abzuhören. e.GET("/", hello)可以定义HTTP的GET方法,该方法将在根URL上调用hello函数。使用e.Logger.Fatal(e.Start(":1323"))可以轻松启动HTTP服务器,并监听1323端口。

接下来,我们需要请求Mapbox API,并将结果返回给Vue.js前端。这里我们将定义一个/api/location路由,并在其中使用echo.Context来异步请求Mapbox API。下面是API逻辑的示例代码:

type MapboxResponse struct {
    Features []struct {
        Text string `json:"text"`
        Geometry struct {
            Coordinates []float64 `json:"coordinates"`
        } `json:"geometry"`
    } `json:"features"`
}

func getLocation(c echo.Context) error {
    address := c.QueryParam("address")
    url := fmt.Sprintf("https://api.mapbox.com/geocoding/v5/mapbox.places/%s.json?access_token=%s", address, "<your_mapbox_api_key>")

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Failed to create request: "+err.Error())
    }

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Failed to get location from mapbox: "+err.Error())
    }
    defer resp.Body.Close()

    var mapboxResponse MapboxResponse
    if err := json.NewDecoder(resp.Body).Decode(&mapboxResponse); err != nil {
        return c.String(http.StatusInternalServerError, "Failed to decode mapbox response: "+err.Error())
    }

    if len(mapboxResponse.Features) > 0 {
        return c.JSON(http.StatusOK, mapboxResponse.Features[0])
    } else {
        return c.String(http.StatusNotFound, "Location not found")
    }
}
Nach dem Login kopieren

在这里,我们定义了MapboxResponse结构体,该结构体的属性与Mapbox API的响应字段一一对应。在getLocation函数中,我们首先获取查询参数address,然后构造Mapbox API的URL,通过http.NewRequest方法来发起异步请求。最后,我们将响应JSON解码为MapboxResponse结构体,并返回HTTP的JSON响应。

第三步:前端构建

使用Vue.js构建前端。使用Vue.js可以方便地处理数据绑定和组件化,从而使地图应用程序更加灵活。下面是创建Vue实例和初始化地图的代码:

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

mapboxgl.accessToken = '<your_mapbox_access_token>';
var map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v11',
  center: [-73.985753, 40.748817],
  zoom: 12
});
Nach dem Login kopieren

在这里,我们首先通过new Vue()来创建Vue实例并绑定到id为#app的DOM元素上。接着,我们使用mapboxgl.accessToken来设置Mapbox API的访问令牌,并使用new mapboxgl.Map()来初始化地图对象。在此处,我们定义了初始的地图样式、中心点坐标和缩放级别等属性。

接下来,我们需要在Vue中定义一个输入框和一个按钮,当用户点击按钮时,我们将查询地址发给后端,并将结果显示在地图上。下面是Vue组件的代码:

<template>
  <div>
    <div>
      <input type="text" v-model="address">
      <button @click="getLocation()">Search</button>
    </div>
    <div id="map"></div>
  </div>
</template>

<script>
export default {
  name: 'app',
  data () {
    return {
      address: '',
      map: null,
      marker: null
    }
  },
  methods: {
    getLocation () {
      fetch('/api/location?address=' + this.address)
        .then(res => res.json())
        .then(location => {
          if (this.marker) {
            this.marker.remove()
          }
          this.marker = new mapboxgl.Marker().setLngLat(location.geometry.coordinates).addTo(this.map)
          this.map.flyTo({
            center: location.geometry.coordinates,
            zoom: 15
          })
        })
        .catch(error => console.error(error))
    }
  },
  mounted () {
    this.map = new mapboxgl.Map({
      container: 'map',
      style: 'mapbox://styles/mapbox/streets-v11',
      center: [-73.985753, 40.748817],
      zoom: 12
    })
  }
}
</script>

<style>
#map {
  height: 500px;
}
</style>
Nach dem Login kopieren

在上述Vue组件中,我们定义了一个输入框和一个按钮,当用户点击按钮时,调用getLocation方法,并使用fetch来异步获取后端的Mapbox响应。如果响应成功,我们将通过地图API的MapMarker对象来在地图上显示结果,并执行flyTo方法来平滑地移动地图视图。

第四步:启动应用程序

最后,我们将后端和前端组装起来,并启动应用程序。可以使用以下步骤来执行该操作:

  1. 将上述Go代码保存到某个目录下,并执行go mod init来初始化项目。
  2. 将上述Vue代码保存到src/App.vue文件中,并将该文件与它的依赖项一起编译到dist目录中。
  3. 启动后端服务:go run .
  4. 在浏览器中打开dist/index.html
  5. Als nächstes müssen wir die Mapbox-API anfordern und die Ergebnisse an das Vue.js-Frontend zurückgeben. Hier definieren wir eine /api/location-Route und verwenden echo.Context, um die Mapbox-API asynchron anzufordern. Das Folgende ist ein Beispielcode für die API-Logik:
rrreee

Hier definieren wir die Struktur MapboxResponse, deren Eigenschaften den Antwortfeldern der Mapbox-API entsprechen. In der Funktion getLocation erhalten wir zunächst den Abfrageparameter address, erstellen dann die URL der Mapbox-API und initiieren eine asynchrone Anfrage über die Methode http.NewRequest. Abschließend dekodieren wir die JSON-Antwort in eine MapboxResponse-Struktur und geben die HTTP-JSON-Antwort zurück.

🎜Schritt 3: Front-End-Konstruktion🎜🎜Verwenden Sie Vue.js, um das Front-End zu erstellen. Datenbindung und Komponentisierung können mit Vue.js einfach gehandhabt werden, wodurch Kartenanwendungen flexibler werden. Im Folgenden finden Sie den Code zum Erstellen einer Vue-Instanz und zum Initialisieren der Karte: 🎜rrreee🎜Hier erstellen wir zunächst eine Vue-Instanz über new Vue() und binden sie als #app an die ID für das DOM-Element. Als Nächstes verwenden wir mapboxgl.accessToken, um das Mapbox-API-Zugriffstoken festzulegen, und verwenden new mapboxgl.Map(), um das Kartenobjekt zu initialisieren. Hier definieren wir Eigenschaften wie den anfänglichen Kartenstil, die Mittelpunktkoordinaten und die Zoomstufe. 🎜🎜Als nächstes müssen wir ein Eingabefeld und eine Schaltfläche in Vue definieren. Wenn der Benutzer auf die Schaltfläche klickt, senden wir die Abfrageadresse an das Backend und zeigen die Ergebnisse auf der Karte an. Das Folgende ist der Code der Vue-Komponente: 🎜rrreee🎜In der obigen Vue-Komponente definieren wir ein Eingabefeld und eine Schaltfläche. Wenn der Benutzer auf die Schaltfläche klickt, rufen Sie die Methode getLocation auf und verwenden Sie fetch, um die Mapbox-Antwort asynchron vom Backend abzurufen. Wenn die Antwort erfolgreich ist, zeigen wir die Ergebnisse auf der Karte über die Objekte <code>Map und Marker der Karten-API an und führen die Methode flyTo aus Bewegen Sie sich reibungslos in der Kartenansicht. 🎜🎜Schritt 4: Anwendung starten🎜🎜Abschließend stellen wir Backend und Frontend zusammen und starten die Anwendung. Sie können die folgenden Schritte verwenden, um diesen Vorgang auszuführen: 🎜
  1. Speichern Sie den obigen Go-Code in einem Verzeichnis und führen Sie go mod init aus, um das Projekt zu initialisieren. 🎜
  2. Speichern Sie den obigen Vue-Code in der Datei src/App.vue und kompilieren Sie die Datei zusammen mit ihren Abhängigkeiten im Verzeichnis dist. 🎜
  3. Starten Sie den Backend-Dienst: go run .🎜
  4. Öffnen Sie die Datei dist/index.html im Browser, um die Kartenanwendung auszuführen. 🎜🎜🎜Zusammenfassend lässt sich sagen, dass wir die Sprache Go und Vue.js verwendet haben, um eine einfache Kartenanwendung zu erstellen. Die Anwendung implementiert einfache und effiziente Back-End-Logik und moderne und flexible Front-End-Komponenten durch die Kombination von Tools wie Mapbox API, Echo Framework und Vue.js. Durch die Nutzung dieser Technologien können wir komplexere Kartenanwendungen einfacher erstellen und Benutzern ein besseres Erlebnis und eine bessere Funktionalität bieten. 🎜

Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine Kartenanwendung mit der Sprache Go und Vue.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Apr 02, 2025 pm 12:54 PM

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...

See all articles