Zh-hans:Frameworks

From OpenStreetMap Wiki
Jump to navigation Jump to search

,有时也被称为框架组件模块软件开发包(SDK),包含了reusable code that helps developers integrate OpenStreetMap into their websites or software applications without reinventing the wheel. Developers have written libraries for accessing and analyzing data, rendering maps, geocoding, and routing. These libraries are compatible with the Web and a wide variety of desktop and mobile platforms.

A library is primarily included in a larger application, rather than being run as a standalone tool. However, some of the libraries listed here also provide command-line tools to facilitate development. A standalone tool may be just as convenient as a library in some environments, particularly on the command line; see Software for a full listing.

The libraries listed here are actively maintained or are considered to be mature and complete. Libraries of historical interest can be found at Category:Discontinued software.

访问原始OSM数据

主要文章:Databases and data access APIs

OpenStreetMap有用于访问原始的未处理的数据的API。These low-level libraries are primarily used by OpenStreetMap editors, tile servers, and other infrastructure. If you’re developing a website or end-user application, most likely you’ll want to use a higher-level framework, such as an interactive map library.

平台 目标语言 API XAPI Overpass 协议 注释
osm-common Android,Java Java 是 没有 是 Apache 2 Overpass,变更集服务器
osmapi Android,Java Java 是 没有 没有 LGPLv3 Complete implementation of the API 0.6,包含地图数据,轨迹,注解,变更集,用户信息等
osmapi 跨平台 Python 是 没有 没有 GPLv3
OsmApiClient 跨平台 C# .Net Standard 2.0 是 没有 没有 MIT 完全支持API v0.6的所有被列出的特性
osmaR 跨平台 R 是 没有 没有 GPLv2
Rosemary 跨平台 Ruby 是 没有 没有 MIT
Services_OpenStreetMap 跨平台 PHP 是 没有 没有 BSD 也支持访问用户信息。Went through PEAR PePr process

处理OSM数据

主要文章:Converting map data between formats
主要文章::Category:File Converters

These libraries parse or convert raw OpenStreetMap data into other file formats or import the data into databases.

Library Platforms Target languages License Notes
Atlas Cross-platform Java, Python BSD 3-Clause A tool to represent network-navigable OSM data in memory and to run data integrity checks at scale using Spark
BasicOSMParser Cross-platform Java GPLv3 A XML data parser to manipulate OSM objects in Java, also able to do CSV exports
Geow Cross-platform Scala Apache 2 Lightweight framework for processing OSM data
gOSMonaut Cross-platform Go MIT PBF file parser that delivers nested entities
Gosmparse Cross-platform Go MIT Parsing OpenStreetMap PBF files at speed
imposm.parser Cross-platform Python Apache 2 Process PBF and OSM XML files. Python <= 2.7 only, no longer updated.
LibOsm Cross-platform C++ GPLv3 Store/update OSM data in an SQLite database
LibOSM Cross-platform Java GPL
libosmscout Cross-platform C++, Java LGPL Raw data parsing and preprocessing, database functionality
osm-common Android, Java Java Apache 2 osm.xml and osc.xml parsing and processing
Osm.ml Cross-platform OCaml WTFPL Parses the basic objects of a .osm file
osm-read Node.js, Web JavaScript LGPLv3 OpenStreetMap XML and PBF data parser for Node.js and the browser
OSM2Hive Cross-platform Hive Apache 2 OSM data importer for Hive / Hadoop clusters
osm4j Cross-platform Java LGPL
osm4scala Cross-platform Scala MIT Lightweight and high performance Scala library focus in parse PBF2 OSM files as iterators.
OSMemory Cross-platform Java LGPLv3 Library for validators with o5m fast reader. It loads data to memory that allow to use osm data without PostgreSQL
libosmium Cross-platform C++ BSL-1.0 Toolkit and framework for working with OSM data
OSMJSON.Net Cross-platform C# .Net Apache 2 OSMJSON.Net is a library containing the necessary types for serializing and de-serializing of OSM JSON
OSMKit iOS, macOS Objective-C MIT Parses and stores OSM data in a spatialite database.
OSMLib Cross-platform Ruby Public domain osm to shapefile conversion
OSMonaut Cross-platform Java MIT Parser for binary OSM files that always returns complete entities
Osmosis Java, Android Java LGPLv3
Osm-parquetizer Cross-platform Java Apache 2 Converts PBF files to Parquet, making the OSM data BigData friendly (Hadoop/Spark)
osmpbf Cross-platform C++ LGPLv3 Based on iterator concept
osmpbf Cross-platform Go MIT PBF file format parser
Osmread Cross-platform Python MIT Simple library for reading XML and PBF data files
osmtogeojson Cross-platform JavaScript MIT OSM XML to GeoJSON converter
OsmTagsTranslator Windows C# .Net MIT Use SQLite queries to translate element tags (string manipulation or joining with look-up tables)
osm2geojson Cross-platform Python MIT OSM XML (and Overpass XML/JSON) to GeoJSON converter
parallelpbf Cross-platform Java GPLv3 PBF format multithreaded reader written in Java
pbf2osm Cross-platform C GPLv3 Converts pbf files back to osm based XML files
PyOsmium Cross-platform Python BSD 2-Clause Process PBF and OSM XML files. Toolkit and framework for working with OSM data.
Smrender Cross-platform C GPLv3 Modular OSM data processing
spark-osm-datasource Cross-platform Scala GPLv3 PBF format datasource for Apache Spark

创建地图图像

主要文章:Rendering

Most client-side static and interactive map libraries display static map images or raster tiles generated on the server side. These server-side libraries are used by tile servers that need to generate those raster tiles:

Library Platforms Target languages License Notes
Kartograph Cross-platform Python LGPL Kartograph is a simple and lightweight framework for building interactive map applications without any other mapping service. It was created with the needs of designers and data journalists in mind.
Mapnik Windows, macOS, Linux Python, JavaScript, C++ LGPL The most popular server-side 2D map renderer. Requires PostgreSQL and various C++ libraries. Designed to be fast and is suitable for tile generation on high-end servers, but it isn't particularly easy to set up.
MapSurfer.NET Windows, Linux C# MIT Framework for map styling and publishing (rendering, caching) geospatial data to the Web.
node-mapbox-gl-native Node.js JavaScript BSD Renders Mapbox Vector Tiles using OpenGL; supports overlays, GeoJSON, and Mapbox GL styles
pgmapcss Cross-platform PostgreSQL AGPLv3 A library for PostgreSQL/PostGIS which works between an osm2pgsql-based database and Mapnik (and maybe other renderers)
Smrender Cross-platform C GPLv3 Offline paper chart rendering
TileMan Linux Lua GPLv3 Framework for serving OSM based tiles

显示静止的地图图像

主要文章:Rendering

These client-side libraries fetch individual static map images from a tile server without adding an interactive UI around the images. In websites and applications, static map images are sometimes more appropriate than full map widgets, either due to performance concerns or because the map simply doesn’t need to be interactive.

Library Platforms Target languages License Notes
Mapbox Android Services Android, Java Java MIT Connects to Mapbox’s Static API
Mapbox Python SDK Cross-platform Python MIT Connects to Mapbox’s classic Static API
MapboxStatic.swift iOS, macOS, tvOS, watchOS Swift, Objective-C BSD Connects to Mapbox’s Static API
A-Frame WebBrowser JavaScript MIT Places Maps (Bit/Vector) into a 3D environment

显示可互动的地图

主要文章:Rendering
主要文章:Deploying your own Slippy Map

Interactive maps, also known as slippy maps on the Web, are the most common way of integrating OpenStreetMap into a website or application. These client-side libraries can display OpenStreetMap-based maps directly. Most of them display raster or vector tiles generated by a tile server, while some render raw OpenStreetMap data fetched directly from an API. A number of server-side libraries make it easier to insert client-side map widgets in webpages.

Library Platforms Target languages Raster Vector License Notes
BruTile Cross-platform Silverlight, C# 是 没有 LGPL
Cartagen Web JavaScript 没有 是 MIT HTML5 Canvas/JavaScript-based renderer
Carto Mobile SDK Android, iOS, Windows Java, Objective-C++, Swift, C# 是 是 BSD
CartoType iOS, Android, Windows, Mac OS, Unix, Qt C++, .NET, Java, Objective C, Swift, C# 没有 是 Proprietary Offline or online map rendering using Open GL ES or CPU rendering; can use OSM and other data sources including ESRI shapefiles; provides routing, turn by turn navigation, geocoding, address search and full-text search.
COSMCtrl Windows C++ 是 没有 Freeware MFC control
GLMap iOS, Android Objective-C, Swift, Java 是 是 Proprietary Offline or online vector map rendered on device using OpenGL ES
Fleaflet Flutter Dart 是 没有 BSD 3-Clause A Flutter map widget inspired by Leaflet
Halcyon Flash ActionScript 是 是 WTFPL Rendering library developed by Richard Fairhurst and used within Potlatch 2
JMapViewer Java SE Java 是 没有 GPLv2
JXMapViewer2 Java SE Java 是 没有 LGPLv3 Swing control
Kartograph Web JavaScript 是 没有 LGPL Kartograph is a simple and lightweight framework for building interactive map applications without any other mapping service. It was created with the needs of designers and data journalists in mind.
Kothic JS Web JavaScript 没有 是 BSD Full-featured JavaScript map rendering engine using HTML5 Canvas. It was initially developed as a JavaScript port of Kothic.
Leaflet Web JavaScript 是 没有 BSD
libchamplain Linux C, Perl, Python 是 没有 LGPLv2.1+ GNOME/GTK widget
libosmscout Cross-platform C++, Java 是 是 LGPL Offline vector map drawing (based on preprocessed data)
LocationMapViewer Android Java 是 没有 GPLv3+ Android-Intent; "geo:"-Uri; gpx and kml file/URL
map::slippy Cross-platform Tcl 是 没有 BSD-style Tcl/Tk widget
Mapbox Android SDK Android Java, Kotlin 是 是 BSD Displays Mapbox Vector Tiles in an interactive map using OpenGL ES
Mapbox Cordova Plugin iOS, Android JavaScript 是 是 MIT Cordova plugin wrapping the Mapbox iOS SDK and Mapbox Android SDK
Mapbox GL JS Web JavaScript 是 是 Proprietary (starting with v2), BSD (until v1.13) Displays Mapbox Vector Tiles in a slippy map using WebGL
MapLibre GL Web JavaScript 是 是 BSD Community led fork derived from Mapbox GL JS v1.13 prior to their switch to a non-OSS license
Mapbox iOS SDK iOS Objective-C, Swift, Interface Builder 是 是 BSD Displays Mapbox Vector Tiles in an interactive map using OpenGL ES
Mapbox macOS SDK macOS Objective-C, Swift, Interface Builder, AppleScript 是 是 BSD Displays Mapbox Vector Tiles in an interactive map using OpenGL
Mapbox Qt SDK Cross-platform C++, QML 是 是 BSD Displays Mapbox Vector Tiles in an interactive map using OpenGL and Qt
Mapbox SceneKit SDK iOS Objective-C, Swift 是 是 ISC Provides data for generating custom 3D scenes in SceneKit
Mapbox SDK for Xamarin Android, iOS C# 是 是 BSD Xamarin component wrapping the Mapbox Android SDK and Mapbox iOS SDK
Mapbox Unity SDK Cross-platform C# 是 是 Apache Provides data for generating custom 3D scenes in Unity
mapsforge Android, Java Java Unknown 是 LGPLv3 OSM based replacement for Android's MapView class for offline tile sources and overlays. Java ME and Java SE.
Marble Windows, macOS, Linux C++, Python, QML 是 是 LGPL Qt widget
Modest Maps Web JavaScript, ActionScript 是 没有 BSD
NativeScript Mapbox[1] iOS, Android XML, JavaScript 是 是 MIT NativeScript plugin wrapping the Mapbox iOS SDK and Mapbox Android SDK
Navmii Mobile SDK iOS, Android Unknown Unknown 是 Proprietary Unclear what is offered; documentation is unavailable without an account
OpenLayers Web JavaScript 是 没有 BSD-style
OpenScales Web, iOS, Android ActionScript 是 没有 LGPL Flex framework
osm-gps-map Cross-platform C, Python, JavaScript 是 没有 GPLv2 GTK mapping widget drawing a GPS track, and points of interest on a moving map
osm2x3d Web JavaScript 没有 是 LGPLv3 OSM 3D converter using native WebGL rendering (x3dom JavaScript library)
OSMBonusPack Android Java 是 没有 LGPL with exceptions Addon for osmdroid: Markers, Bubbles, Routes, Directions, KML and more...
osmdroid Android Java 是 没有 Apache 2 OSM based replacement for Android's MapView (v1 API) class. Supports online and offline tile sources and overlays for plotting icons, tracking location, drawing shapes.
OsmSharp iOS, Android, Windows Phone C# 没有 是 GPLv2 or commercial Offline vector map rendering
Polymaps Web JavaScript 是 是 BSD Webmaps with Data overlays
QMapControl Cross-platform C++ 是 没有 LGPL Qt control
QtLocation Cross-platform C++, QML 是 是 LGPLv3 or commercial Qt module for mapping, navigation, geocoding and places of interest with pluggable architecture to provide geoservices. Supersedes QtMobility.Location. OSM services for mapping, geocoding, routing and places now included by default.
Qt Mobility Geoservices Extras Cross-platform C++, QML 是 没有 LGPLv2.1
QuartzMaps iOS Objective-C 是 是 Proprietary Slippy Map and Vector Map rendering engine for iOS
React Native Mapbox GL iOS, Android JSX 是 是 BSD React Native component wrapping the Mapbox iOS SDK and Mapbox Android SDK
SKMap Bindings iOS C# Unknown 是 MIT Xamarin bindings for the Skobbler iOS SDK
Skobbler Android SDK Android Java Unknown 是 Proprietary
Skobbler iOS SDK iOS Objective-C, Swift Unknown 是 Proprietary
skobbler.js Web JavaScript 是 没有 MIT
Tangram Web JavaScript 没有 是 MIT 2D and 3D map renderer using WebGL
Tangram ES Android, iOS, Linux, macOS C++ 没有 是 MIT 2D and 3D map renderer using OpenGL ES
WhirlyGlobe-Maply iOS, Android Objective-C, Swift, Java 是 是 Apache 2 Geospatial display kit for iOS and Android based on OpenGL ES. Implements a 2D map and a 3D globe and can handle image base maps and tiled vector maps based on OSM data.
Xamarin.Android.Skobbler Android C# Unknown 是 MIT Xamarin bindings for the Skobbler Android SDK

Additionally, some client-side libraries can be used with OpenStreetMap tiles, even if they’re primarily intended for other uses:

Forward and reverse geocoding

主要文章:Search engines

This table includes both server-side libraries and client-side libraries:

Library Platforms Target languages Forward Reverse License Notes
Gisgraphy Cross-platform Java 是 是 LGPLv3 Geocoding/reverse geocoding, fulltextsearch, find nearby
mapsforge Android, Java Java 是 是 LGPLv3 POI indexing and search. Java ME and Java SE.
osm-common Android, Java Java 是 是 Apache 2 Nominatim
Pelias Android SDK Android Java 是 是 Apache Connects to Mapzen’s Pelias Geocoder instance
Pelias iOS SDK iOS, macOS Swift 是 是 Apache 2 Connects to Mapzen’s Pelias Geocoder instance
Services_OpenStreetMap Cross-platform PHP 是 是 BSD Includes partial support for querying Nominatim servers. Went through PEAR PePr process
osm-reverse-geocoder Cross-platform PL/pgSQL 没有 是 MIT Simple address reverse geocoding
Nominatim.API Windows,Cross-platform C# 是 是 MIT Library for utilizing geocoding (forward and reverse), in addition to address lookups, with the Nominatim HTTP API. Targets .NET Standard 2.0. Available on NuGet: Nominatim.API

导航

主要文章:Routing

This table includes both server-side libraries and client-side libraries:

Library Platforms Target languages License Notes
openrouteservice Cross-plattform, Web Java, R, Python, Javascript .. LPGL routing/directions, isochrones, geocoding, maps, time-distance matrix, accessibility etc. many traffic profiles
CartoType Windows, iOS, Android, macOS, Unix C++, .NET, Java, Objective-C, Swift, C# Proprietary offline routing for drivers, cyclists, walkers; configurable routing profiles; can export routes and instructions
GraphHopper Cross-platform Java, Objective-C, Swift Apache 2 Routing engine for car, bike and more. Can be used as web service, android library, iOS library or Java library.
libosmscout Cross-platform C++, Java LGPL offline routing (based on preprocessed data)
Mapbox Android Services Android, Java Java MIT Connects to Mapbox’s Directions API for route data
Mapbox Directions for Swift iOS, macOS, tvOS, watchOS Swift ISC Connects to Mapbox’s Directions API for route data
Mapbox GL Directions Web JavaScript MIT Plugin for Mapbox GL JS that connects to Mapbox’s Directions API for route data
Mapbox JavaScript SDK Web, Node.js JavaScript MIT Connects to Mapbox’s Directions API for route data
Mapbox Navigation SDK for Android Android Java, Kotlin MIT Embeds a turn-by-turn navigation UI with voice guidance into an Android application
Mapbox Navigation SDK for iOS iOS Swift ISC Embeds a turn-by-turn navigation UI with voice guidance into an iOS application
Mapbox Python SDK Cross-platform Python MIT Connects to version 4 of Mapbox’s Directions API for route data
Mapbox Ruby SDK Cross-platform Ruby MIT Connects to Mapbox’s Directions API for route data
Mapbox Unity SDK Cross-platform C# Apache Connects to Mapbox’s Directions API for route data
mapsforge Android, Java Java LGPLv3 Route planning and navigation. Java ME and Java SE.
Mapzen iOS SDK iOS Swift, Objective-C Apache Connects to Mapzen Turn-by-Turn (powered by Valhalla) via OnTheRoad for iOS
Navmii Mobile SDK iOS, Android Unknown Proprietary
On The Road Android Java Apache Connects to Mapzen Turn-by-Turn (powered by Valhalla)
Open Source Routing Machine Linux, macOS, FreeBSD, Node.js C++, JavaScript BSD Routing
OpenTripPlanner Web Java GPL Multimodal routing for public transit, bicycle, pedestrian, and car.
OSMNavigation Cross-platform Java GPL
OsmSharp iOS, Android, Windows Phone C# GPLv2 or commercial Offline routing
pyroutelib2 Cross-platform Python GPLv3+ Routing with custom vehicles and displaying the result
Routino Linux, macOS, Windows C AGPLv3 Flexible router with web interface and routing data analyser
Skobbler Android SDK Android Java Proprietary
Skobbler iOS SDK iOS Objective-C, Swift Proprietary

Code snippets

The following links provide source code that’s too small for a library but nevertheless useful:

See also:

其他开发者工具

主要文章:GIS software

General-purpose GIS libraries are often used in conjunction with OpenStreetMap-specific libraries to work with geographic data:

  • PROJ.4 - Geo Projection Conversion lib with multiple bindings
  • GDAL - Geo Raster image formats lib
  • OGR - Geo Vector data formats lib
  • PostGIS - The leading Geo enabled Database
  • spatialite - sqlite extension, fully fledged spatial db
  • Mapbender - Another more GIS focused web map lib
  • Geotools -Java GIS Toolkit
  • GIS-Python lab - Python GIS Toolkit
  • k3b-geoHelper - java lib to parse gpx and kml files and en/decode geo-uris. Works with Android, too
  • Pic4Carto.js - JavaScript library for open-licensed street pictures retrieval (which can be used for photo mapping, tutorial)

By language

外部链接