Sandbox
Wypróbuj na projekcie pobocznym
$0 / miesiąc
- 1 baza danych, 1 źródło kafelków
- Przebudowa co 24 godziny
- 50 tys. żądań kafelków / miesiąc
- 100 geofence'ów, 100 śledzonych użytkowników
Wklej URL bazy danych i dostań URL dynamicznych kafelków wektorowych, który aktualizuje się kilka sekund po zmianie wiersza. Potem zamień te same poligony w geofence, które powiedzą Ci, kiedy ktoś dotarł na miejsce.
Darmowy sandbox, bez karty. Działa z RDS, Cloud SQL, Supabase, Neon, Crunchy Bridge lub Twoim własnym serwerem.
14/8235/5419 i 14/8236/5419 przerenderowane w 0,9 s. Pozostałe 22 kafelki się nie zmieniły. Sprawdzamy połączenie, wersję PostGIS i uprawnienia, a także informujemy, jeśli URL prowadzi przez pooler, który nie przeniesie aktualizacji na żywo.
Każda tabela z kolumną geometrii jest wyświetlana z SRID, szacowaną liczbą wierszy i kolumnami. Wybierz właściwości, które mają trafić do kafelków, oraz zakres zoomu.
Dostajesz URL TileJSON i szablon z/x/y z kluczem publicznym, ograniczony do dozwolonych przez Ciebie originów. Działa wszędzie tam, gdzie działają kafelki wektorowe.
import maplibregl from "maplibre-gl";
const map = new maplibregl.Map({
container: "map",
style: {
version: 8,
sources: {
parcels: {
type: "vector",
url: "https://tiles.mapsocket.com/t/acme/parcels.json?key=pk_live_…",
},
},
layers: [{
id: "parcels",
type: "fill",
source: "parcels",
"source-layer": "parcels",
paint: { "fill-color": "#2D6E9E", "fill-opacity": 0.3 },
}],
},
}); MapSocket nasłuchuje Twojej bazy przez Postgres LISTEN/NOTIFY. Gdy wiersz się zmienia, przepisywane są tylko kafelki, które zawierały jego stary lub nowy kształt. Edycja tysiąca wierszy renderuje każdy dotknięty kafelek tylko raz.
INSERT, UPDATE lub DELETE w opublikowanej tabeli
Warstwa, id wiersza, operacja i stare granice
Serie zmian są debounce'owane i deduplikowane per kafelek
Tylko kafelki dotykające starej lub nowej geometrii, na każdym zoomie
update_complete przychodzi przez SSE; webhooki też są wysyłane
-- Generated for public.parcels; run once as the table owner
CREATE TRIGGER mapsocket_parcels
AFTER INSERT OR UPDATE OR DELETE ON public.parcels
FOR EACH ROW EXECUTE FUNCTION
mapsocket_notify_tile_update('parcels', 'id', 'geom'); const tiles = "https://tiles.mapsocket.com/t/acme/parcels/{z}/{x}/{y}.pbf?key=pk_live_…";
const events = new EventSource("https://tiles.mapsocket.com/t/acme/parcels/events?key=pk_live_…");
// Sent after tilefeed rewrites the affected tiles
events.addEventListener("update_complete", (e) => {
const { tiles_updated, affected_zooms } = JSON.parse(e.data);
map.getSource("parcels").setTiles([`${tiles}&_t=${Date.now()}`]);
}); Wyślij lokalizację i dostań listę geofence'ów, w których się znajduje, oraz to, co zmieniło się od poprzedniej. Zdarzenia wejścia, wyjścia i przebywania, wizyty w miejscach, zmiany kraju i regionu oraz przyjazdy w ramach przejazdów trafiają do Twoich webhooków, podpisane, żebyś mógł im ufać.
public.delivery_zones, wybierz kolumny id i tagu, a poligony pozostaną zgodne z tabelą. Punkty i linie można zbuforować do stref. tag i externalId albo import GeoJSON lub CSV w formacie Radar. POST /v1/trackGET /v1/contextGET /v1/search/geofencesPOST /v1/tripsKażdy track podaje też miejsce (z OpenStreetMap), kraj i region oraz sprawdza oszustwa: niemożliwe skoki i podrobione lokalizacje. Kluczami publicznymi możesz śledzić z przeglądarek i telefonów; klucze tajne służą do zarządzania geofence'ami i odczytu zdarzeń. Odczyty o niskiej dokładności są zapisywane, ale nie wywołują zdarzeń.
curl https://api.mapsocket.com/v1/track \
-H "Authorization: pk_live_…" \
-H "Content-Type: application/json" \
-d '{"userId":"driver-118","latitude":40.7411,"longitude":-73.9897,"accuracy":12}' {
"user": {
"userId": "driver-118",
"geofenceIds": ["9c1e5a40-…"],
"lastSeenAt": "2026-11-04T14:02:11Z"
},
"events": [{
"type": "user.entered_geofence",
"userId": "driver-118",
"geofence": {
"tag": "loading-bay",
"externalId": "flatiron-02",
"description": "Flatiron loading bay"
},
"confidence": 3,
"createdAt": "2026-11-04T14:02:11Z"
}]
} Każde zdarzenie jest też wysyłane do Twoich webhooków z nagłówkiem MapSocket-Signature (HMAC-SHA256). Weryfikacja podpisu
Jeśli potrzebujesz kafelków generowanych na każde żądanie z parametryzowanych funkcji SQL, lepiej sprawdzi się pg_tileserv lub Martin. MapSocket jest dla tabel, które zmieniają się w ciągu dnia, i map, które mają nadążać.
| Podejście | Jak powstają kafelki | Gdy wiersz się zmienia | Czym zarządzasz |
|---|---|---|---|
| pg_tileserv | Zapytanie SQL na każde żądanie kafelka, w locie | Widoczne przy następnym żądaniu, ale każde żądanie obciąża Twoją bazę | Serwer obok Twojej bazy |
| Martin | W locie z PostGIS albo z plików MBTiles i PMTiles | Na żywo w trybie dynamicznym, kosztem zapytań; pliki wymagają przebudowy | Serwer plus Twój własny cache przed nim |
| Tippecanoe uruchamiany z crona | Pełna przebudowa do MBTiles lub PMTiles | Czekasz na następne uruchomienie, które przebudowuje wszystko | Scheduler, storage i CDN |
| MapSocket | Gotowe MBTiles serwowane z cache | Przerenderowują się tylko dotknięte kafelki, w kilka sekund | Nic. Wklej URL. |
Przekazujesz nam connection string, więc oto dokładnie, co z nim robimy.
Roli, która może wykonywać SELECT na publikowanych tabelach. Zalecamy osobną rolę tylko do odczytu; dashboard poda Ci dokładne polecenia CREATE ROLE i GRANT. Do aktualizacji na żywo Ty (nie my) uruchamiasz na każdej tabeli małą funkcję triggera, co jednorazowo wymaga uprawnień właściciela tabeli.
Jest szyfrowany AES-256-GCM, zanim trafi do naszej bazy, a klucz jest przechowywany poza nią. Odszyfrowujemy go tylko wewnątrz workera, który buduje Twoje kafelki, i nigdy więcej nie jest pokazywany w dashboardzie ani w API, tylko host, baza i użytkownik.
Tak. Wszystkie połączenia z Twoją bazą pochodzą ze stałej puli adresów IP wyjściowych dla każdego regionu, wymienionych w dashboardzie przy każdym połączeniu. Dodaj je do security group lub pg_hba.conf i nic więcej nie musi być otwarte.
Domyślnie łączymy się z sslmode=require i odrzucamy połączenia niezaszyfrowane, chyba że wyraźnie to wyłączysz dla sieci prywatnej.
Nie. Wiersze są odczytywane i kodowane bezpośrednio do kafelków wektorowych; archiwum kafelków (MBTiles) to jedyna kopia, jaką przechowujemy. Usuń źródło, a jego kafelki zostaną usunięte razem z nim. Geofence synchronizowane z tabeli są przechowywane jako geometrie plus wybrane przez Ciebie kolumny.
Tak. Włącz je w Ustawieniach i bezpieczeństwie: zeskanuj kod QR dowolną aplikacją uwierzytelniającą (Google Authenticator, 1Password, Authy, Microsoft Authenticator), a logowanie będzie wymagać oprócz hasła także 6-cyfrowego kodu. Dostajesz dziesięć jednorazowych kodów odzyskiwania na wypadek utraty telefonu.
Płacisz za uruchomione źródła i obsłużone żądania. Twoja baza pozostaje Twoja; nigdy nie naliczamy opłat za wiersze.
Wypróbuj na projekcie pobocznym
$0 / miesiąc
Dla produktu, w którym jest mapa
$29 / miesiąc
Dla zespołów, których dane zmieniają się przez cały dzień
$149 / miesiąc
Dedykowane workery, w Twojej chmurze lub naszej
Porozmawiajmy
| Limit | Sandbox | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Źródła kafelków | 1 | 5 | 25 | Bez limitu |
| Bazy danych | 1 | 2 | 10 | Bez limitu |
| Żądania kafelków | 50k / mies. | 1M / mies. | 10M / mies. | Indywidualnie |
| Geofence | 100 | 5000 | 100 000 | Bez limitu |
| Śledzeni użytkownicy | 100 / mies. | 5k / mies. | 50k / mies. | Indywidualnie |
| Mapy georeferencjonowane | 1 | 10 | 100 | Indywidualnie |
| Aktualizacje | Przebudowa co 24 godziny | Na żywo, kilka sekund po zapisie | Na żywo, kilka sekund po zapisie | Na żywo, kilka sekund po zapisie |
| Własna domena kafelków | Nie | Nie | Tak | Tak |
Jeśli na płatnym planie przekroczysz limit kafelków, kafelki nadal będą serwowane; napiszemy do Ciebie, zanim cokolwiek się zmieni. Sandbox wstrzymuje się po osiągnięciu limitu.
Tak, z jednym zastrzeżeniem: aktualizacje na żywo korzystają z Postgres LISTEN, które nie działa przez poolery w trybie transakcyjnym. Użyj bezpośredniego connection stringa (port 5432 w Supabase, host bez poolera w Neon). Jeśli możesz użyć tylko URL-a przez pooler, wybierz tryb snapshot, a będziemy przebudowywać według harmonogramu.
Zwykle od jednej do trzech sekund od COMMIT do świeżego kafelka. Powiadomienia są grupowane w małe paczki, więc masowa edycja 10 000 wierszy renderuje każdy dotknięty kafelek raz, a nie 10 000 razy.
Wszystko, co czyta Mapbox Vector Tiles i TileJSON: MapLibre GL, Mapbox GL, OpenLayers, Leaflet z wtyczką vector-tile, deck.gl, QGIS.
Tak. MapSocket działa na tilefeed, który jest na licencji MIT. Każde źródło ma przycisk Export config, który daje Ci plik TOML dla tilefeed, a MBTiles lub archiwum PMTiles możesz pobrać w dowolnym momencie.
Unikalny userId, który w danym miesiącu wysłał co najmniej jedno wywołanie /v1/track. Wywołania /v1/context i wyszukiwanie geofence'ów się nie liczą.
Większość osób ma działający URL kafelków na żywo w ciągu pięciu minut od rejestracji.