{"_id":"@apidots/osm-tools","_rev":"2-904363ce0ac12a2bdfcaa727172b480e","name":"@apidots/osm-tools","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@apidots/osm-tools","version":"1.0.0","keywords":["apidots","osm","openstreetmap","nominatim","overpass","routing","geocoding","reverse-geocoding","poi-search","maps","react-hooks","location-services"],"author":{"name":"APIDOTS PRIVATE LIMITED"},"license":"MIT","_id":"@apidots/osm-tools@1.0.0","maintainers":[{"name":"apidots","email":"mktg.apidots@gmail.com"}],"dist":{"shasum":"da95c5eb45dfd082b376e8d07e5f5f00609e2ef5","tarball":"https://registry.npmjs.org/@apidots/osm-tools/-/osm-tools-1.0.0.tgz","fileCount":22,"integrity":"sha512-iYF9dx+KDwRORrxFa5MlkcBmGOiPcqNSj8jpq38WcZdh2M1kSSqY/fG8TiFX3zfydWInfQqa1J7mxMdLlczN8A==","signatures":[{"sig":"MEUCIQDldKpl+Z4ek/xigk6mF73ShOZoxuaMIKlWif6FhHErRwIgbWqkxzZJR85x2JS/Lwb3YB96uy+OOqbJYvDajmIyhwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69120},"main":"index.js","type":"module","gitHead":"11ad1db5a156f2f22d325a075a86a994afd13681","_npmUser":{"name":"apidots","email":"mktg.apidots@gmail.com"},"_npmVersion":"10.8.1","description":"APIDOTS OSM Tools – Enterprise-grade, modular OpenStreetMap toolkit for React. Includes autocomplete, geocoding, reverse geocoding, POI search, routing, and distance calculation with React hooks.","directories":{},"_nodeVersion":"20.13.1","dependencies":{"axios":"^1.7.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/osm-tools_1.0.0_1763034346589_0.8282759923426062","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@apidots/osm-tools","version":"1.0.1","publishConfig":{"access":"public"},"description":"APIDOTS OSM Tools – Enterprise-grade, modular OpenStreetMap toolkit for React. Includes autocomplete, geocoding, reverse geocoding, POI search, routing, and distance calculation with React hooks.","main":"index.js","type":"module","keywords":["apidots","osm","openstreetmap","nominatim","overpass","routing","geocoding","reverse-geocoding","poi-search","maps","react-hooks","location-services"],"author":{"name":"APIDOTS PRIVATE LIMITED"},"license":"MIT","dependencies":{"axios":"^1.7.9"},"_id":"@apidots/osm-tools@1.0.1","gitHead":"11ad1db5a156f2f22d325a075a86a994afd13681","_nodeVersion":"20.13.1","_npmVersion":"10.8.1","dist":{"integrity":"sha512-u3s9seBJdJvmGiSAf9I0lKTsu5P9/Jpz8+Vvtdd6xvnUxWfJqmIlDJCuSFlYkN9LxQdsooyYvPbOKoNgWvj8QQ==","shasum":"7e17f534de7de00b4e77738d288ad696c72b7d7b","tarball":"https://registry.npmjs.org/@apidots/osm-tools/-/osm-tools-1.0.1.tgz","fileCount":22,"unpackedSize":68953,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDmUsVoJYIbzeCQFVpOci8AHiwd1DDtAdO8lY5eh42BMAiAJa5YM3vM+iDOR5AN7J+gp5tVFVzY9LytqgV0LcYFnZQ=="}]},"_npmUser":{"name":"apidots","email":"mktg.apidots@gmail.com"},"directories":{},"maintainers":[{"name":"apidots","email":"mktg.apidots@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/osm-tools_1.0.1_1763035584217_0.06283395848854001"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-13T11:45:46.468Z","modified":"2025-11-13T12:06:24.585Z","1.0.0":"2025-11-13T11:45:46.772Z","1.0.1":"2025-11-13T12:06:24.415Z"},"author":{"name":"APIDOTS PRIVATE LIMITED"},"license":"MIT","keywords":["apidots","osm","openstreetmap","nominatim","overpass","routing","geocoding","reverse-geocoding","poi-search","maps","react-hooks","location-services"],"description":"APIDOTS OSM Tools – Enterprise-grade, modular OpenStreetMap toolkit for React. Includes autocomplete, geocoding, reverse geocoding, POI search, routing, and distance calculation with React hooks.","maintainers":[{"name":"apidots","email":"mktg.apidots@gmail.com"}],"readme":"<p align=\"center\">\n  <h1 align=\"center\">@apidots/osm-tools</h1>\n</p>\n\n<p align=\"center\">\n  <strong>The complete OpenStreetMap toolkit for React</strong><br />\n  Autocomplete • Geocode • Reverse • POI Search • Routing • Distance\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@apidots/osm-tools\">\n    <img src=\"https://img.shields.io/npm/v/@apidots/osm-tools.svg?style=flat-square&logo=npm\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/@apidots/osm-tools\">\n    <img src=\"https://img.shields.io/npm/dm/@apidots/osm-tools.svg?style=flat-square&color=success\" />\n  </a>\n  <a href=\"http://makeapullrequest.com\">\n    <img src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square\" />\n  </a>\n</p>\n\n---\n\n## Features\n\n- **Autocomplete** – Real-time place suggestions\n- **Geocode** – Address → Coordinates\n- **Reverse Geocode** – Coordinates → Address\n- **POI Search** – Find nearby cafes, hospitals, shops\n- **Distance & Time** – Driving distance + ETA\n- **Full Route** – GeoJSON route with turn-by-turn\n- **React Hooks** – `useGeocode`, `useRoute`, etc.\n- **Custom Servers** – Use your own Nominatim/OSRM/Overpass\n- **Tree-shakable**, **ESM-ready**, minimal footprint\n- Only `axios` as dependency\n\n---\n\n## Installation\n\n```bash\nnpm install @apidots/osm-tools\n# or\nyarn add @apidots/osm-tools\n# or\npnpm add @apidots/osm-tools\n```\n\n---\n\n## Quick Examples\n\n### 1. Autocomplete Search\n```tsx\nimport { useAutocomplete } from '@apidots/osm-tools';\n\nfunction SearchBox() {\n  const [query, setQuery] = useState('');\n  const { suggestions, loading } = useAutocomplete(query);\n\n  return (\n    <div>\n      <input\n        value={query}\n        onChange={(e) => setQuery(e.target.value)}\n        placeholder=\"Search places...\"\n      />\n      {loading && <p>Loading...</p>}\n      <ul>\n        {suggestions.map((s) => (\n          <li key={s.place_id}>{s.display_name}</li>\n        ))}\n      </ul>\n    </div>\n  );\n}\n```\n\n### 2. Geocode Address\n```tsx\nimport { useGeocode } from '@apidots/osm-tools';\n\nfunction AddressToCoords() {\n  const { results } = useGeocode('Eiffel Tower, Paris');\n\n  return (\n    <ul>\n      {results.map((r, i) => (\n        <li key={i}>\n          {r.display_name}: {r.lat}, {r.lon}\n        </li>\n      ))}\n    </ul>\n  );\n}\n```\n\n### 3. Reverse Geocode\n```tsx\nimport { useReverseGeocode } from '@apidots/osm-tools';\n\nfunction CoordsToAddress() {\n  const { address, loading } = useReverseGeocode(48.8584, 2.2945);\n\n  return <p>{loading ? 'Loading...' : address}</p>;\n}\n```\n\n### 4. POI Search (Nearby Cafes)\n```tsx\nimport { usePOISearch } from '@apidots/osm-tools';\n\nfunction NearbyCafes() {\n  const { pois } = usePOISearch(40.7128, -74.0060, 'cafe', 500);\n\n  return (\n    <ul>\n      {pois.map((poi) => (\n        <li key={poi.id}>{poi.name} ({poi.type})</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n### 5. Distance & Time\n```tsx\nimport { useDistanceTime } from '@apidots/osm-tools';\n\nfunction TripSummary() {\n  const { result } = useDistanceTime(\n    28.6139, 77.2090,  // Delhi\n    19.0760, 72.8777   // Mumbai\n  );\n\n  if (!result) return null;\n\n  return (\n    <div>\n      Distance: {result.distance} km | Time: {result.duration} mins\n    </div>\n  );\n}\n```\n\n### 6. Full Route with GeoJSON (Leaflet)\n```tsx\nimport { useRoute } from '@apidots/osm-tools';\nimport { MapContainer, TileLayer, GeoJSON } from 'react-leaflet';\nimport 'leaflet/dist/leaflet.css';\n\nfunction RouteMap() {\n  const start = \"77.2090,28.6139\"; // Delhi\n  const end = \"72.8777,19.0760\";   // Mumbai\n  const { route, loading, error } = useRoute(start, end);\n\n  return (\n    <div style={{ height: '500px' }}>\n      <MapContainer center={[28.6139, 77.2090]} zoom={5} style={{ height: '100%' }}>\n        <TileLayer\n          url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n          attribution='&copy; OpenStreetMap contributors'\n        />\n        {loading && <p>Loading route...</p>}\n        {error && <p>Error: {error}</p>}\n        {route && <GeoJSON data={route.geometry} style={{ color: 'blue', weight: 4 }} />}\n      </MapContainer>\n\n      {route && (\n        <div style={{ marginTop: 10 }}>\n          <strong>Distance:</strong> {(route.distance / 1000).toFixed(1)} km\n          &nbsp;|&nbsp;\n          <strong>Time:</strong> {(route.duration / 60).toFixed(0)} mins\n        </div>\n      )}\n    </div>\n  );\n}\n\nexport default RouteMap;\n```\n\n---\n\n### Using fetchRoute (No React)\n```ts\nimport { fetchRoute } from '@apidots/osm-tools';\n\nasync function main() {\n  const route = await fetchRoute(\"77.2090,28.6139\", \"72.8777,19.0760\");\n\n  console.log(\"Distance:\", (route.distance / 1000).toFixed(1), \"km\");\n  console.log(\"Duration:\", (route.duration / 60).toFixed(0), \"minutes\");\n  console.log(\"GeoJSON:\", route.geometry);\n}\n\nmain();\n```\n\n---\n\n## Author\n\n**APIDOTS PRIVATE LIMITED**  \n🌐 Website: [https://apidots.com](https://apidots.com)  \n💻 GitHub: [https://github.com/npm-packages-dev/apidots-osm-tools](https://github.com/npm-packages-dev/apidots-osm-tools)\n\n---\n\n## License\n\n**MIT License © 2025 APIDOTS PRIVATE LIMITED**\n","readmeFilename":"README.md"}