JavaScript-Drop-ins für Karten- und Geocoder-Bibliotheken

Im Frontend-Code schmerzt ein Anbieterwechsel am meisten, weil Kartenbibliothek, Geocoder-Widget und Abrechnung miteinander verflochten sind. Mit diesen Loadern und Einstellungen behalten Sie Ihren vorhandenen Bibliothekscode. Dahinter kommen Kacheln, Geokodierung, Autovervollständigung und Höhendaten von uns. Kartenaufrufe und Kacheln sind kostenlos; nur Geokodierungsaufrufe zählen zu Ihrem Kontingent.

Für die REST-Seite finden Sie die Übersicht aller siebzehn Hosts und die Migrations-Checkliste unter So funktionieren die Drop-in-Hosts.

Auf dieser Seite

Google Maps JavaScript API

Laden Sie die Kartenbibliothek von gapi.mygeocode.com statt von maps.googleapis.com. Der Namespace google.maps wird bereitgestellt, wobei Kartenkacheln, Marker, der Geocoder, Places Autocomplete und der ElevationService von uns ausgeliefert werden. Kartenaufrufe zählen nicht zu Ihrem Kontingent.

Vorher
<script async defer
  src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_KEY&libraries=places&callback=initMap">
</script>
Nachher
<script async defer
  src="https://gapi.mygeocode.com/maps/api/js?key=YOUR_MYGEOCODE_KEY&libraries=places&callback=initMap">
</script>
Dann verwenden Sie sie wie bisher
// Nothing below this line changes.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    center: { lat: 51.5074, lng: -0.1278 },
    zoom: 12
  });

  const geocoder = new google.maps.Geocoder();
  geocoder.geocode({ address: "221B Baker Street, London" }, (results, status) => {
    if (status === "OK") {
      map.setCenter(results[0].geometry.location);
      new google.maps.Marker({ map, position: results[0].geometry.location });
    }
  });

  const input = document.getElementById("search");
  const autocomplete = new google.maps.places.Autocomplete(input, { fields: ["geometry", "formatted_address"] });
  autocomplete.addListener("place_changed", () => {
    const place = autocomplete.getPlace();
    if (place.geometry) map.panTo(place.geometry.location);
  });
}

Enthalten

  • google.maps.Map mit unseren Kacheln (Kartentypen roadmap, satellite und terrain)
  • Marker, InfoWindow, Polyline, Polygon, Circle, Rectangle, LatLng, LatLngBounds und event
  • Geocoder (Geokodierung und Reverse-Geokodierung)
  • Widget places.Autocomplete und places.AutocompleteService
  • ElevationService
  • Steuerelemente, Gesten, gestaltete Karten mit demselben Style-Array-Format

Nicht enthalten

  • Street View
  • Directions, Distance Matrix und Routes
  • Places Details, Photos und Nearby Search
  • Bibliotheken Drawing, Visualization und Geometry
  • 3D- und WebGL-Overlay-Ansichten

Was als Anfrage zählt. Kartenaufrufe und Kachelanfragen sind kostenlos. Jeder Geocoder-Aufruf, jede Autocomplete-Sitzung und jeder ElevationService-Aufruf zählt als eine Anfrage.

Bing Maps V8 Web Control

Das V8 Control wird zusammen mit dem Rest von Bing Maps for Enterprise eingestellt. Laden Sie das Control von bing.mygeocode.com, und der Namespace Microsoft.Maps funktioniert weiter, mit unseren Kacheln, unserer Geokodierung und unserem Autosuggest dahinter.

Vorher
<script async defer
  src="https://www.bing.com/api/maps/mapcontrol?key=YOUR_BING_KEY&callback=loadMap">
</script>
Nachher
<script async defer
  src="https://bing.mygeocode.com/api/maps/mapcontrol?key=YOUR_MYGEOCODE_KEY&callback=loadMap">
</script>
Dann verwenden Sie sie wie bisher
function loadMap() {
  const map = new Microsoft.Maps.Map("#map", { center: new Microsoft.Maps.Location(47.6396, -122.13), zoom: 12 });

  Microsoft.Maps.loadModule("Microsoft.Maps.Search", () => {
    const search = new Microsoft.Maps.Search.SearchManager(map);
    search.geocode({
      where: "1 Microsoft Way, Redmond, WA",
      callback: (result) => {
        const loc = result.results[0].location;
        map.setView({ center: loc, zoom: 15 });
        map.entities.push(new Microsoft.Maps.Pushpin(loc));
      }
    });
  });
}

Enthalten

  • Microsoft.Maps.Map, Location, LocationRect, Pushpin, Infobox, Polyline, Polygon und Layer
  • Search-Modul: SearchManager.geocode und reverseGeocode
  • Autosuggest-Modul: AutosuggestManager und die Anbindung an Eingabefelder
  • Kartentypen Road, Aerial und Grayscale mit unseren Kacheln
  • Events, Navigationsleiste und Kartenoptionen

Nicht enthalten

  • Directions-Modul
  • Traffic, Spatial Data Services und erweiterte Spatial-Math-Funktionen
  • Bird's-Eye- und Streetside-Bilder
  • Module Well Known Text, GeoJSON und GeoXml (verwenden Sie stattdessen das GeoJSON-Modul von Leaflet oder MapLibre)

Was als Anfrage zählt. Kartenaufrufe und Kacheln sind kostenlos. Jedes geocode, jedes reverseGeocode und jede Autosuggest-Sitzung zählt als eine Anfrage.

Mapbox GL JS und mapbox-gl-geocoder

Behalten Sie Ihren Kartencode und tauschen Sie die beiden URLs aus: den Stil und den Geocoder-Ursprung. MapLibre GL JS (der Open-Source-Fork) ist der empfohlene Renderer; Mapbox GL JS v1 funktioniert ebenfalls. mapbox-gl-geocoder hat eine origin-Option, daher braucht das Geocoder-Control darüber hinaus keine Codeänderungen.

Vorher
const map = new mapboxgl.Map({
  container: "map",
  style: "mapbox://styles/mapbox/streets-v12",
  accessToken: "YOUR_MAPBOX_TOKEN"
});
map.addControl(new MapboxGeocoder({
  accessToken: "YOUR_MAPBOX_TOKEN",
  mapboxgl: mapboxgl
}));
Nachher
const map = new maplibregl.Map({
  container: "map",
  style: "https://mapbox.mygeocode.com/styles/v1/mygeocode/streets?access_token=YOUR_MYGEOCODE_KEY"
});
map.addControl(new MapboxGeocoder({
  accessToken: "YOUR_MYGEOCODE_KEY",
  origin: "https://mapbox.mygeocode.com",
  mapboxgl: maplibregl
}));
Dann verwenden Sie sie wie bisher
// Direct calls keep the same shape too
const res = await fetch(
  "https://mapbox.mygeocode.com/geocoding/v5/mapbox.places/Oxford%20Street%20London.json?access_token=YOUR_MYGEOCODE_KEY",
  { headers: { "X-API-Key": "YOUR_KEY" } }
);
const { features } = await res.json();
map.flyTo({ center: features[0].center, zoom: 15 });

Enthalten

  • Vektorkachel-Stile: streets, light, dark und outdoors, in der Mapbox Style Specification
  • mapbox-gl-geocoder mit der origin-Option, einschließlich proximity, bbox, countries und types
  • Statische Bilder unter /styles/v1/mygeocode/{style}/static/{lon},{lat},{zoom}/{width}x{height}
  • Rasterkacheln unter /v4/mygeocode.streets/{z}/{x}/{y}.png für Leaflet und OpenLayers

Nicht enthalten

  • Mapbox GL JS v2 und neuer (die Lizenz verlangt Mapbox-Tokens; verwenden Sie MapLibre)
  • Directions, Isochrone, Matrix und Optimization APIs
  • Eigene Stile aus Mapbox Studio (laden Sie stattdessen Ihr Style-JSON in Ihr Konto hoch)

Was als Anfrage zählt. Kacheln und statische Bilder sind kostenlos. Jede Geocoder-Anfrage zählt als eine Anfrage; die Tastenanschläge der Autovervollständigung werden wie üblich vom Control gebündelt (Debouncing).

Leaflet-Geocoder-Plugins

Leaflet spricht über Plugins mit Geocodern, und die beliebten Plugins akzeptieren eine Service-URL. Richten Sie Leaflet Control Geocoder oder leaflet-geosearch auf osm.mygeocode.com aus und verwenden Sie unsere Kacheln für die Basiskarte.

Vorher
L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
  attribution: "&copy; OpenStreetMap contributors"
}).addTo(map);

L.Control.geocoder({
  geocoder: L.Control.Geocoder.nominatim()
}).addTo(map);
Nachher
L.tileLayer("https://tiles.mygeocode.com/streets/{z}/{x}/{y}.png?key=YOUR_MYGEOCODE_KEY", {
  attribution: "&copy; My Geocode"
}).addTo(map);

L.Control.geocoder({
  geocoder: L.Control.Geocoder.nominatim({
    serviceUrl: "https://osm.mygeocode.com/",
    geocodingQueryParams: { key: "YOUR_MYGEOCODE_KEY" }
  })
}).addTo(map);
Dann verwenden Sie sie wie bisher
// leaflet-geosearch works the same way
import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch";

const provider = new OpenStreetMapProvider({
  searchUrl: "https://osm.mygeocode.com/search",
  reverseUrl: "https://osm.mygeocode.com/reverse",
  params: { key: "YOUR_MYGEOCODE_KEY", addressdetails: 1 }
});
map.addControl(new GeoSearchControl({ provider, style: "bar" }));

Enthalten

  • Leaflet Control Geocoder: die Geocoder nominatim, google, bing, mapbox, here, opencage, latLng und mapquest, jeweils auf den passenden www.mygeocode.com Host ausgerichtet
  • leaflet-geosearch: OpenStreetMapProvider, GoogleProvider, BingProvider, HereProvider, LocationIQProvider, OpenCageProvider und GeoapifyProvider
  • Rasterkacheln in den Stilen streets, light und dark
  • Jedes andere Plugin, bei dem Sie die Nominatim-URL festlegen können

Nicht enthalten

  • Routing-Plugins (Leaflet Routing Machine und ähnliche)
  • Kachelstile über die drei genannten hinaus

Was als Anfrage zählt. Kacheln sind kostenlos. Jede Geokodierung und jede Reverse-Geokodierung zählt als eine Anfrage.

HERE Maps API für JavaScript

Laden Sie die mapsjs-Bundles von here.mygeocode.com und erstellen Sie die Plattform wie gewohnt. H.Map, H.service.Platform und der Suchdienst behalten ihre Signaturen, mit Vektorkacheln und Geokodierung von uns.

Vorher
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
Nachher
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-mapevents.js"></script>
Dann verwenden Sie sie wie bisher
const platform = new H.service.Platform({ apikey: "YOUR_MYGEOCODE_KEY" });
const layers = platform.createDefaultLayers();
const map = new H.Map(document.getElementById("map"), layers.vector.normal.map, {
  center: { lat: 52.5304, lng: 13.3853 }, zoom: 13
});

platform.getSearchService().geocode(
  { q: "Invalidenstraße 116, Berlin" },
  (result) => {
    const { position } = result.items[0];
    map.setCenter(position);
    map.addObject(new H.map.Marker(position));
  },
  (err) => console.error(err)
);

Enthalten

  • H.Map, H.map.Marker, H.map.Polyline, H.map.Polygon, H.map.Group
  • H.service.Platform mit createDefaultLayers (Vektor normal, Satellit, Gelände)
  • SearchService: geocode, reverseGeocode und autosuggest
  • Standard-Steuerelemente von H.ui.UI und H.mapevents.Behavior
  • H.geo.Point, H.geo.Rect und Hilfsfunktionen

Nicht enthalten

  • Dienste Routing, Isoline und Public Transit
  • Verkehrs- und Störungsebenen
  • Places Discover und Browse
  • Eigene Kartenstile aus dem HERE Style Editor (verwenden Sie unser Style-JSON-Format)

Was als Anfrage zählt. Kartenaufrufe und Kacheln sind kostenlos. Jeder Aufruf von geocode, reverseGeocode und autosuggest zählt als eine Anfrage.

MapQuest.js

MapQuest.js baut auf Leaflet auf und ergänzt L.mapquest.geocoding(). Laden Sie das Bundle von mapquest.mygeocode.com und setzen Sie Ihren Schlüssel wie bisher.

Vorher
<script src="https://api.mqcdn.com/sdk/mapquest-js/v1.3.2/mapquest.js"></script>
<link type="text/css" rel="stylesheet" href="https://api.mqcdn.com/sdk/mapquest-js/v1.3.2/mapquest.css"/>
Nachher
<script src="https://mapquest.mygeocode.com/sdk/mapquest-js/v1.3.2/mapquest.js"></script>
<link type="text/css" rel="stylesheet" href="https://mapquest.mygeocode.com/sdk/mapquest-js/v1.3.2/mapquest.css"/>
Dann verwenden Sie sie wie bisher
L.mapquest.key = "YOUR_MYGEOCODE_KEY";

const map = L.mapquest.map("map", {
  center: [41.8789, -87.6359],
  layers: L.mapquest.tileLayer("map"),
  zoom: 12
});

L.mapquest.geocoding().geocode("233 S Wacker Dr, Chicago, IL", (err, response) => {
  const loc = response.results[0].locations[0].latLng;
  map.setView(loc, 15);
  L.marker(loc, { icon: L.mapquest.icons.marker() }).addTo(map);
});

Enthalten

  • L.mapquest.map und tileLayer (map, hybrid, satellite, light, dark)
  • L.mapquest.geocoding mit geocode und reverse
  • Control L.mapquest.searchAhead (Autovervollständigung)
  • Icons, Positionen der Steuerelemente und die Standard-Leaflet-API

Nicht enthalten

  • Routen- und Routenebenen (Directions)
  • Verkehrsebene
  • Static Map API

Was als Anfrage zählt. Kacheln sind kostenlos. Jede geocode-, reverse- und search-ahead-Anfrage zählt als eine Anfrage.

Kartenkacheln und Stile

Alle oben genannten Loader nutzen denselben Kacheldienst, den Sie auch direkt aus jeder Bibliothek verwenden können.

FormatURL
Raster, 256pxhttps://tiles.mygeocode.com/{style}/{z}/{x}/{y}.png
Raster, 512px für Bildschirme mit hoher Pixeldichtehttps://tiles.mygeocode.com/{style}/{z}/{x}/{y}@2x.png
Vektorkacheln (MVT)https://tiles.mygeocode.com/v/{z}/{x}/{y}.pbf
Style-JSON für MapLibre und Mapbox GLhttps://tiles.mygeocode.com/styles/{style}.json

Die Stile sind streets, light, dark, outdoors und satellite. Kachelverkehr wird nicht berechnet und braucht keinen Schlüssel. Unsere Kacheln werden aus OpenStreetMap-Daten und unseren eigenen gerendert; das Attributions-Control muss © OpenStreetMap contributors und My Geocode anzeigen, was die oben genannten Loader für Sie ergänzen.

Schlüssel im Browser

Setzen Sie keinen API-Schlüssel in clientseitigen Code. Einen Schlüssel im Seitenquelltext kann jeder lesen, und da ein Schlüssel von zwei oder drei IP-Adressen gleichzeitig funktioniert, hört er nach dem zweiten oder dritten Besucher ohnehin auf zu funktionieren.

Kartenkacheln, Stile und die oben genannten Bibliotheks-Loader brauchen überhaupt keinen Schlüssel, sodass die Karte selbst immer funktioniert. Die Aufrufe für Geokodierung, Autovervollständigung und Höhendaten, die die Bibliotheken ausführen, leiten Sie über Ihren eigenen Server: Die Loader akzeptieren einen Parameter proxy (gapi.mygeocode.com/maps/api/js?proxy=https://yoursite.com/geo) und senden diese Aufrufe dorthin; Ihr Server ergänzt den Schlüssel und leitet die Anfrage an uns weiter. Die Platzhalter YOUR_MYGEOCODE_KEY oben bleiben dann leer.

  • Ihr Proxy kann Caching und eigene Limits ergänzen, was Browser nicht können.
  • Anfragen kommen dann von der Adresse Ihres Servers, sodass ein Schlüssel beliebig viele Besucher abdeckt.