<!DOCTYPE html> <html lang="en"> <head> <script defer="" data-domain="nycbookstores.org" src="https://stats.yetaga.in/js/script.hash.outbound-links.js" ></script> <meta charset="utf-8" /> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <title> Independent Bookstores in New York City - Best Community Bookstores in NYC </title> <meta name="google-site-verification" content="hEfog9h0E3JQW91ZUZM5ayPb6DND0WbUa2_W8yTIuVw" /> <link rel="icon" type="image/png" href="/img/favicon.png" /> <link rel="apple-touch-icon" href="/img/social.jpg" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <script src="https://api.mapbox.com/mapbox-gl-js/v2.13.0/mapbox-gl.js"></script> <link href="https://api.mapbox.com/mapbox-gl-js/v2.13.0/mapbox-gl.css" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css?family=Acme|Lato&display=swap" rel="stylesheet" /> <link media="screen" rel="stylesheet" type="text/css" href="/css/site.css?1698627633277" /> <meta property="title" name="title" content="Independent Bookstores in New York City - Best Community Bookstores in NYC" /> <meta property="description" name="description" content="A guide to and map of every independent bookstore in New York City. We have a complete list of community bookstores in NYC with locations and descriptions." /> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="www.nycbookstores.org" /> <meta name="twitter:title" content="NYC Bookstores" /> <meta name="twitter:description" content="A Guide To The Many Independent Bookstores Of New York City" /> <meta name="twitter:image" content="https://www.nycbookstores.org/img/social.jpg" /> <meta property="og:url" content="https://www.nycbookstores.org/" /> <meta property="og:title" content="NYC Bookstores" /> <meta property="og:description" content="A Guide To The Many Independent Bookstores Of New York City" /> <meta property="og:image" content="https://www.nycbookstores.org/img/social.jpg" /> </head> <body> <div id="map"></div> <div id="wrapper"> <header class="bubble"> <h1>NYC Bookstores</h1> <ul class="nav"> <li> <a id="viewInfo" href="#info" onclick="event.preventDefault()" >intro</a > </li> <li> <a href="https://git.yetaga.in/alazyreader/nyc-bookstores/" target="_blank" >source</a > </li> <li> <a href="https://icosahedron.website/@lazyreader" target="_blank" >@lazyreader</a > </li> </ul> </header> <div id="info" class="bubble"> <p> New York City loves its independent bookstores. It <a href="https://www.nytimes.com/2006/10/15/nyregion/thecity/15book.html" target="_blank" >eulogizes those that have faded</a > and celebrates when new ventures are launched. And while the historic <a href="https://untappedcities.com/2015/08/26/4th-avenue-the-history-of-nycs-book-row/" target="_blank" >Book Row may have passed away in the 80s</a >, there are still many indie bookstores dotting the map, across all five boroughs. Here, I have attempted to collect all of the currently-open general-interest independent booksellers in NYC. Any store with regular-ish hours (excluding religious booksellers and appointment-only rare book sellers) is included. </p> <p> While Manhattan and Brooklyn still lead the pack, Queens has a respectable number of stores, and all five boroughs are represented, with the Bronx and Staten Island both hosting lone independent stores. Lower Manhattan has the highest density of booksellers. </p> <p> The listings here are kept up-to-date to the best of my ability; however, I make no promises about either the accuracy or reliability of the information. If you spot an error, or I've missed a shop, please let me know by <a href="mailto:delta.mu.alpha@gmail.com" target="_blank">email</a>, <a href="https://icosahedron.website/@lazyreader" target="_blank" >mastodon</a >, or <a href="https://www.twitter.com/alazyreader" target="_blank" >twitter</a >. Originally based on the "<a href="https://github.com/jlord/hack-spots" target="_blank" >Hack Spots</a >" website by <a href="https://www.twitter.com/jllord" target="_blank">@jllord</a> (although I don't believe any of the actual underlying code still survives at this point). </p> <p> There are currently <span id="storeCount">114</span> stores indexed on this page. Last updated <span id="updatedOn">October 29, 2023</span>. </p> <details> <summary>Recent Changes</summary> <ul id="changesList"> <li> October 26, 2023 - Return Three Lives to its original corner location. </li> <li> October 26, 2023 - Idlewild Books appears to have transitioned entirely to language classes as opposed to bookselling </li> <li> October 26, 2023 - remove Boulevard Books; correct Alabaster Bookshop Instagram link </li> <li> October 26, 2023 - Add Topos Too, currently in a "soft opening" </li> </ul> </details> </div> <div id="selected" class="bubble hidden"></div> <div class="bubble"> <div id="Stores"> <table> <tbody> <tr id="0" class="spotRow"> <td class="name">1804 Books</td> <td>320 W 37th St, New York</td> </tr> <tr id="1" class="spotRow"> <td class="name">192 Books</td> <td>192 10th Ave, New York</td> </tr> <tr id="2" class="spotRow"> <td class="name">Adanne</td> <td>115 Ralph Ave, Brooklyn</td> </tr> <tr id="3" class="spotRow"> <td class="name">Aeon Bookstore</td> <td>151 East Broadway, New York</td> </tr> <tr id="4" class="spotRow"> <td class="name">Alabaster Bookshop</td> <td>122 4th Ave, New York</td> </tr> <tr id="5" class="spotRow"> <td class="name">Albertine Books</td> <td>972 Fifth Ave, New York</td> </tr> <tr id="6" class="spotRow"> <td class="name">Archestratus</td> <td>164 Huron St, Brooklyn</td> </tr> <tr id="7" class="spotRow"> <td class="name">Argosy Books</td> <td>116 East 59th St, New York</td> </tr> <tr id="8" class="spotRow"> <td class="name">Astoria Bookshop</td> <td>36-19 30th St, Astoria</td> </tr> <tr id="9" class="spotRow"> <td class="name">Berl's Brooklyn Poetry Shop</td> <td>126A Front St, Brooklyn</td> </tr> <tr id="10" class="spotRow"> <td class="name">Better Read Than Dead</td> <td>867 Broadway, Brooklyn</td> </tr> <tr id="11" class="spotRow"> <td class="name">Better Read Than Dead & Burly Coffee</td> <td>90 Kosciuszko St, Brooklyn</td> </tr> <tr id="12" class="spotRow"> <td class="name">Black Spring Books</td> <td>672 Driggs Ave, Brooklyn</td> </tr> <tr id="13" class="spotRow"> <td class="name">Bluestockings Cooperative</td> <td>116 Suffolk Street, New York</td> </tr> <tr id="14" class="spotRow"> <td class="name">Bonnie Slotnick Cookbooks</td> <td>28 East 2nd St, New York</td> </tr> <tr id="15" class="spotRow"> <td class="name">Book Club Bar</td> <td>197 E 3rd St, New York</td> </tr> <tr id="16" class="spotRow"> <td class="name">Book Culture</td> <td>536 W 112th St, New York</td> </tr> <tr id="17" class="spotRow"> <td class="name">Book Culture LIC</td> <td>26-09 Jackson Ave, Queens</td> </tr> <tr id="18" class="spotRow"> <td class="name">Book Culture on Broadway</td> <td>2915 Broadway, New York</td> </tr> <tr id="19" class="spotRow"> <td class="name">Book Thug Nation</td> <td>100 North 3rd St, Brooklyn</td> </tr> <tr id="20" class="spotRow"> <td class="name">Bookmarc</td> <td>400 Bleecker St, New York</td> </tr> <tr id="21" class="spotRow"> <td class="name">BookMark Shoppe</td> <td>8415 3rd Avenue, Brooklyn</td> </tr> <tr id="22" class="spotRow"> <td class="name">Bookoff</td> <td>49 W 45nd St, New York</td> </tr> <tr id="23" class="spotRow"> <td class="name">Bookoff Brooklyn</td> <td>934 3rd Ave, Brooklyn</td> </tr> <tr id="24" class="spotRow"> <td class="name">Books Are Magic (Montague St.)</td> <td>122 Montague St, Brooklyn</td> </tr> <tr id="25" class="spotRow"> <td class="name">Books Are Magic (Smith St.)</td> <td>225 Smith St, Brooklyn</td> </tr> <tr id="26" class="spotRow"> <td class="name">Books Of Wonder</td> <td>42 West 17th St, New York</td> </tr> <tr id="27" class="spotRow"> <td class="name">Bravo's Book Nook</td> <td>115 MacDougal St, New York</td> </tr> <tr id="28" class="spotRow"> <td class="name">Burnt Books</td> <td>157 Huron St, Brooklyn</td> </tr> <tr id="29" class="spotRow"> <td class="name">Cafe con Libros</td> <td>724 Prospect Place, Brooklyn</td> </tr> <tr id="30" class="spotRow"> <td class="name">Catland</td> <td>985 Flushing Ave, Brooklyn</td> </tr> <tr id="31" class="spotRow"> <td class="name">Chartwell Booksellers</td> <td>55 E 52nd St, New York</td> </tr> <tr id="32" class="spotRow"> <td class="name">Codex Books</td> <td>1 Bleecker St, New York</td> </tr> <tr id="33" class="spotRow"> <td class="name">Community Bookstore</td> <td>143 7th Ave, Brooklyn</td> </tr> <tr id="34" class="spotRow"> <td class="name">Cups and Books</td> <td>2024 Bedford Ave, Brooklyn</td> </tr> <tr id="35" class="spotRow"> <td class="name">Dashwood Books</td> <td>33 Bond St, New York</td> </tr> <tr id="36" class="spotRow"> <td class="name">Dear Friend Books</td> <td>343A Tompkins Ave, Brooklyn</td> </tr> <tr id="37" class="spotRow"> <td class="name">Desert Island Comics</td> <td>540 Metropolitan Ave, Brooklyn</td> </tr> <tr id="38" class="spotRow"> <td class="name">East Village Books</td> <td>99 St. Mark's Place, New York</td> </tr> <tr id="39" class="spotRow"> <td class="name">ETG Book Cafe</td> <td>208 Bay St, Staten Island</td> </tr> <tr id="40" class="spotRow"> <td class="name">Freebird Books</td> <td>123 Columbia St, Brooklyn</td> </tr> <tr id="41" class="spotRow"> <td class="name">Greenlight Bookstore</td> <td>686 Fulton St, Brooklyn</td> </tr> <tr id="42" class="spotRow"> <td class="name">Here's A Book Store</td> <td>1964 Coney Island Ave, Brooklyn</td> </tr> <tr id="43" class="spotRow"> <td class="name">Hey Kids! Comics</td> <td>157 Huron St, Brooklyn</td> </tr> <tr id="44" class="spotRow"> <td class="name">Housing Works Bookstore Café</td> <td>126 Crosby St, New York</td> </tr> <tr id="45" class="spotRow"> <td class="name">Human Relations Books</td> <td>1067 Flushing Ave, Brooklyn</td> </tr> <tr id="46" class="spotRow"> <td class="name">James Cummins Bookseller</td> <td>699 Madison Ave, 7th Floor, New York</td> </tr> <tr id="47" class="spotRow"> <td class="name">Joanne Hendricks Cookbooks</td> <td>488 Greenwich St, New York</td> </tr> <tr id="48" class="spotRow"> <td class="name">Karma Bookstore</td> <td>136 East Third St, New York</td> </tr> <tr id="49" class="spotRow"> <td class="name">Kew & Willow Books</td> <td>81-63 Lefferts Boulevard, New York</td> </tr> <tr id="50" class="spotRow"> <td class="name">Kinokunya</td> <td>1073 Avenue of the Americas, New York</td> </tr> <tr id="51" class="spotRow"> <td class="name">Kitchen Arts & Letters</td> <td>1435 Lexington Ave, New York</td> </tr> <tr id="52" class="spotRow"> <td class="name">Leaves Bookstore</td> <td>140 Nassau Ave, Brooklyn</td> </tr> <tr id="53" class="spotRow"> <td class="name">Left Bank Books</td> <td>41 Perry St, New York</td> </tr> <tr id="54" class="spotRow"> <td class="name">Lofty Pigeon Books</td> <td>743 Church Ave, Brooklyn</td> </tr> <tr id="55" class="spotRow"> <td class="name">Logos Bookstore</td> <td>1575 York Ave, New York</td> </tr> <tr id="56" class="spotRow"> <td class="name">Mast Books</td> <td>72 Avenue A, New York</td> </tr> <tr id="57" class="spotRow"> <td class="name">McNally Jackson Books</td> <td>134 Prince St, New York</td> </tr> <tr id="58" class="spotRow"> <td class="name">McNally Jackson Books City Point</td> <td>445 Albee Square W, Unit G112, Brooklyn</td> </tr> <tr id="59" class="spotRow"> <td class="name">McNally Jackson Books Seaport</td> <td>4 Fulton St, New York</td> </tr> <tr id="60" class="spotRow"> <td class="name">McNally Jackson Books Williamsburg</td> <td>76 North 4th St, Brooklyn</td> </tr> <tr id="61" class="spotRow"> <td class="name">McNally Jackson Rockefeller Center</td> <td>1 Rockefeller Plaza, New York</td> </tr> <tr id="62" class="spotRow"> <td class="name">Melville House Publishers</td> <td>46 John St, Brooklyn</td> </tr> <tr id="63" class="spotRow"> <td class="name">Mercer Street Books & Records</td> <td>206 Mercer St, New York</td> </tr> <tr id="64" class="spotRow"> <td class="name">Mil Mundos Books</td> <td>323 Linden St, Brooklyn</td> </tr> <tr id="65" class="spotRow"> <td class="name">Molasses Books</td> <td>770 Hart St, Brooklyn</td> </tr> <tr id="66" class="spotRow"> <td class="name">Namaste Bookshop</td> <td>2 W 14th St, New York</td> </tr> <tr id="67" class="spotRow"> <td class="name">P&T Knitwear</td> <td>180 Orchard St, New York</td> </tr> <tr id="68" class="spotRow"> <td class="name">Passageway Books</td> <td>150 9th Ave, New York</td> </tr> <tr id="69" class="spotRow"> <td class="name">Pillow-Cat Books</td> <td>328 East 9th St, New York</td> </tr> <tr id="70" class="spotRow"> <td class="name">Posman Books Chelsea Market</td> <td>75 9th Avenue, New York</td> </tr> <tr id="71" class="spotRow"> <td class="name">POWERHOUSE @ IC</td> <td>220 36th St, Building #2, Brooklyn</td> </tr> <tr id="72" class="spotRow"> <td class="name">POWERHOUSE Arena</td> <td>28 Adams St, Brooklyn</td> </tr> <tr id="73" class="spotRow"> <td class="name">POWERHOUSE on 8th</td> <td>1111 8th Ave, Brooklyn</td> </tr> <tr id="74" class="spotRow"> <td class="name">Printed Matter</td> <td>231 11th Ave, New York</td> </tr> <tr id="75" class="spotRow"> <td class="name">Printed Matter St. Marks</td> <td>38 St. Marks Pl, New York</td> </tr> <tr id="76" class="spotRow"> <td class="name">Quest Bookshop</td> <td>240 E 53rd St, New York</td> </tr> <tr id="77" class="spotRow"> <td class="name">Quimby's Bookstore</td> <td>536 Metropolitan Ave, Brooklyn</td> </tr> <tr id="78" class="spotRow"> <td class="name">Recirculation</td> <td>876 Riverside Dr, New York</td> </tr> <tr id="79" class="spotRow"> <td class="name">Respect For Life Books-N-Things</td> <td>537 Nostrand Ave, Brooklyn</td> </tr> <tr id="80" class="spotRow"> <td class="name">Revolution Books</td> <td>437 Malcolm X Blvd, New York</td> </tr> <tr id="81" class="spotRow"> <td class="name">Rizzoli Bookstore</td> <td>1133 Broadway, New York</td> </tr> <tr id="82" class="spotRow"> <td class="name">Shakespeare & Company</td> <td>939 Lexington Ave, New York</td> </tr> <tr id="83" class="spotRow"> <td class="name"> Shakespeare & Company (Upper West Side) </td> <td>2020 Broadway, New York</td> </tr> <tr id="84" class="spotRow"> <td class="name">Sister's Uptown Bookstore</td> <td>1942 Amsterdam Ave, New York</td> </tr> <tr id="85" class="spotRow"> <td class="name">Spoonbill & Sugartown, Booksellers</td> <td>218 Bedford Ave, Brooklyn</td> </tr> <tr id="86" class="spotRow"> <td class="name">Standards Manual</td> <td>212 Franklin Street, Brooklyn</td> </tr> <tr id="87" class="spotRow"> <td class="name">Strand Bookstore</td> <td>828 Broadway, New York</td> </tr> <tr id="88" class="spotRow"> <td class="name">Sweet Pickle Books</td> <td>47 Orchard St, New York</td> </tr> <tr id="89" class="spotRow"> <td class="name">Taylor & Co. Books</td> <td>1021 Cortelyou Rd, Brooklyn</td> </tr> <tr id="90" class="spotRow"> <td class="name">Terrace Books</td> <td>242 Prospect Park West, Brooklyn</td> </tr> <tr id="91" class="spotRow"> <td class="name">The Austin Book Shop</td> <td>104-29 Jamaica Ave, Richmond Hill</td> </tr> <tr id="92" class="spotRow"> <td class="name">The Book Cellar</td> <td>1465 York Ave, New York</td> </tr> <tr id="93" class="spotRow"> <td class="name">The Center for Fiction</td> <td>15 Lafayette Ave, Brooklyn</td> </tr> <tr id="94" class="spotRow"> <td class="name">The Corner Bookstore</td> <td>1313 Madison Ave, New York</td> </tr> <tr id="95" class="spotRow"> <td class="name">The Drama Book Shop</td> <td>266 W 39th St, New York</td> </tr> <tr id="96" class="spotRow"> <td class="name">The Lit. Bar</td> <td>131 Alexander Ave, Bronx</td> </tr> <tr id="97" class="spotRow"> <td class="name">The Mysterious Bookshop</td> <td>58 Warren St, New York</td> </tr> <tr id="98" class="spotRow"> <td class="name">The Ripped Bodice</td> <td>218 5th Ave, Brooklyn</td> </tr> <tr id="99" class="spotRow"> <td class="name">The Strand At Columbus Ave</td> <td>450 Columbus Ave, New York</td> </tr> <tr id="100" class="spotRow"> <td class="name">The Word Is Change</td> <td>368 Tompkins Ave, Brooklyn</td> </tr> <tr id="101" class="spotRow"> <td class="name">Three Lives & Company</td> <td>154 W 10th St, New York</td> </tr> <tr id="102" class="spotRow"> <td class="name">Topos Bookstore Cafe</td> <td>788 Woodward Ave, Brooklyn</td> </tr> <tr id="103" class="spotRow"> <td class="name">Topos Too</td> <td>59-22 Myrtle Ave, Queens</td> </tr> <tr id="104" class="spotRow"> <td class="name">Troubled Sleep Books</td> <td>129 6th Ave, Brooklyn</td> </tr> <tr id="105" class="spotRow"> <td class="name">Turn The Page... Again</td> <td>39-15a Bell Blvd, Flushing</td> </tr> <tr id="106" class="spotRow"> <td class="name">Unnameable Books</td> <td>600 Vanderbilt Ave, Brooklyn</td> </tr> <tr id="107" class="spotRow"> <td class="name">Ursus Books</td> <td>50 East 78th St, Suite 1C, New York</td> </tr> <tr id="108" class="spotRow"> <td class="name">Village Works</td> <td>12 St. Marks Pl, New York</td> </tr> <tr id="109" class="spotRow"> <td class="name">Westsider Rare & Used Books</td> <td>2246 Broadway, New York</td> </tr> <tr id="110" class="spotRow"> <td class="name">Westsider Records</td> <td>233 West 72nd St, New York</td> </tr> <tr id="111" class="spotRow"> <td class="name">Word Bookstore</td> <td>126 Franklin St, Brooklyn</td> </tr> <tr id="112" class="spotRow"> <td class="name">Word Up Books</td> <td>2113 Amsterdam Ave, New York</td> </tr> <tr id="113" class="spotRow"> <td class="name">Yu and Me Books</td> <td>115 Delancey St Stall #11, New York</td> </tr> </tbody> </table> </div> </div> </div> <!-- end wrapper --> <script> mapboxgl.accessToken = "pk.eyJ1IjoiYWxhenlyZWFkZXIiLCJhIjoiY2lucDZhb2JxMHp6MHRxa2pvaTFoOWpuZyJ9.DILGYYxxt7A-A_lHHwp6tQ"; var map = new mapboxgl.Map({ container: "map", style: "mapbox://styles/mapbox/basic-v9", center: [-73.957292, 40.729071], // arbitrary center point zoom: 9, minZoom: 9, maxZoom: 17, dragRotate: false, }); var popup = new mapboxgl.Popup({ closeOnClick: false, closeButton: false, }); function TableViewTemplate(rows) { table = "<table>"; rows.forEach((row) => { table = table + TableRowTemplate(row); }); return table + "</table>"; } function TableRowTemplate({ rowNumber, name, address, city }) { return `<tr id="${rowNumber}" class="spotRow"> <td class="name">${name}</td><td>${address}, ${city}</td> </tr>`; } function SelectedStoreTemplate({ name, address, city, postcode, website, events, cafe, description, }) { const isAppleIsh = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform); return ` <h2>${name}</h2> <p class="address">${address}</p> <p></p> <p class="address"> ${city}, NY ${postcode} </p> <p> <a href="https://maps.google.com/maps?q=${encodeURIComponent( name )}+${address},${city},NY" target="_blank" >Google Maps</a > ${ isAppleIsh ? ` <a href="http://maps.apple.com/?q=${encodeURIComponent( name )}&address=${address},${city},NY" target="_blank" >Apple Maps</a >` : "" } </p> ${ website ? `<p><a href="${website}" target="_blank">${cleanWebsite( website )}</a></p>` : "" } ${description ? `<p class="description">${description}</p>` : ""}`; } function hideElementById(id) { const element = document.getElementById(id); if (element !== undefined) { element.classList.add("hidden"); } } function showElementById(id) { const element = document.getElementById(id); if (element !== undefined) { element.classList.remove("hidden"); } } function setContent(id, html) { const element = document.getElementById(id); if (element !== undefined) { element.innerHTML = html; } } document.addEventListener("DOMContentLoaded", function () { fetch("./stores.json") .then((resp) => { return resp.json(); }) .then((data) => { data.sort(function (a, b) { var aname = a.name.toLowerCase(); var bname = b.name.toLowerCase(); return aname === bname ? 0 : +(aname > bname) || -1; }); data.forEach((value, key) => { value.rowNumber = key; value.slug = slugify(value.name); }); setContent("storeCount", data.length); window.data = data; loadMap(data); }) .catch((err) => { // we'll live with the static cache! console.log(err); }); }); window.addEventListener( "hashchange", function (e) { updateViewBySlug(e.newURL.split("#")[1]); }, false ); function updateHash(slug) { history.pushState(null, null, "#" + slug); } function slugify(str) { return str .toLowerCase() .replace(/é/g, "e") .replace(/&/g, " and ") .replace(/ /g, "-") .replace(/[']+/g, "") .replace(/[^\w-]+/g, "-") .replace(/-+/g, "-") .replace(/^-|-$/g, ""); } function cleanWebsite(str) { return str .toLowerCase() .replace(/^https?:\/\//g, "") .replace(/^www./g, "") .replace(/\/$/g, ""); } function getStoreBySlug(slug) { var ret = false; window.data.forEach((value, key) => { if (value.slug === slug) { ret = value; return false; } }); return ret; } function updateViewBySlug(slug) { if (slug === "info" || slug === undefined) { showInfo(false); } else { var store = getStoreBySlug(slug); if (store) { updateSelectedStore(store, false); } } } function isStacked() { return screen.width < 1120; } function boundingBox(point) { // add some buffer to a point to give the user some leeway return [ [point.x - 5, point.y - 5], [point.x + 5, point.y + 5], ]; } function updateSelectedStore(store, pushState = false) { map.flyTo({ center: [store.long, store.lat], offset: [isStacked() ? 0 : -250, 0], zoom: 13, }); popup.setLngLat([store.long, store.lat]).setHTML(store.name).addTo(map); hideElementById("info"); setContent("selected", SelectedStoreTemplate(store)); showElementById("selected"); if (pushState) { updateHash(store.slug); } } function showInfo(pushState = true) { hideElementById("selected"); popup.remove(); showElementById("info"); if (pushState) { updateHash("info"); } } function loadMap(data) { var points = []; data.forEach((value, key) => { points.push({ type: "Feature", geometry: { type: "Point", coordinates: [value.long, value.lat], }, properties: value, }); }); map.on("load", function () { map.addLayer({ id: "stores", type: "circle", source: { type: "geojson", data: { type: "FeatureCollection", features: points, }, }, paint: { "circle-radius": 5, "circle-color": "#B9FCFC", "circle-stroke-width": 2, "circle-stroke-color": "#000000", }, }); map.addControl(new mapboxgl.NavigationControl(), "top-left"); updateViewBySlug(window.location.hash.split("#")[1]); }); map.on("click", function (e) { if (!map.getLayer("stores")) { return; } popup.remove(); // Use queryRenderedFeatures to get features at a click event's point var features = map.queryRenderedFeatures(boundingBox(e.point), { layers: ["stores"], }); // fly to the location of the click event if (features.length) { var store = features[0]; // Get coordinates from the symbol and center the map on those coordinates updateSelectedStore(store.properties, true); } }); // indicate that the symbols are clickable by changing the cursor style to 'pointer'. map.on("mousemove", function (e) { if (!map.getLayer("stores")) { return; } var features = map.queryRenderedFeatures(boundingBox(e.point), { layers: ["stores"], }); map.getCanvas().style.cursor = features.length ? "pointer" : ""; }); setContent("Stores", TableViewTemplate(data)); document.querySelectorAll("#Stores tbody tr").forEach((element) => { element.addEventListener("click", () => { updateSelectedStore(data[element.id], true); document .getElementById(isStacked() ? "map" : "selected") .scrollIntoView({ behavior: "smooth" }); }); }); document.getElementById("viewInfo").addEventListener("click", showInfo); } </script> </body> </html>