GithubHelp home page GithubHelp logo

indoorequal / indoorequal.org Goto Github PK

View Code? Open in Web Editor NEW
49.0 5.0 10.0 8.66 MB

A web based indoor viewer that display vector tiles as well as GeoJSON, OSM and IMDF files

Home Page: https://indoorequal.org

License: GNU Affero General Public License v3.0

Dockerfile 0.25% HTML 1.03% Vue 39.94% JavaScript 58.62% Shell 0.16%
openstreetmap mapbox-gl-js indoorequal osm geojson imdf

indoorequal.org's Introduction

indoor=

indoor= generate Mapbox's Vector Tiles (MVT) of OpenStreetMap indoor data. It implements parts of Simple Indoor Tagging.

Discover:

indoor= is build with openmaptiles-tools.

Development

In development, you should disable tiles caching.

Edit docker-compose.override.yml:

version: "3"
services:
  postserve:
    ports:
    - "8090:8090"
  postserve-cache:

And follow the usage instructions.

You can also run tests written with pgTAP:

./script/test

Usage

Import data from OpenStreetMap

To start the initial import of the planet:

./script/import

To use another area than the planet, open .env file and update the AREA variable with the name of your area. Use make list-geofabrik to find the available names. Then run ./script/import.

Import your own data

  1. Prepare .osm file with JOSM or other tool
  2. Convert file to .osm.pbf with osmium-tools: osmium cat map.osm --output map.osm.pbf
  3. Put the map.osm.pbf file to the ./data directory
  4. Tune params in the .env file (DIFF_MODE=false and AREA=map)
  5. Import data with ./script/import

Update data

To start a one-time update and invalidate the tile cache. With OSM data you probably want to update it regulary.

./script/update

Generate mbtiles

To generate a mbtiles file located at data/tiles.mbtiles

make generate-tiles-pg

Warning: Depending of the AREA, it can takes a lot of time to generate the mbtiles.

Serve vector tiles

To run the service in production with tiles caching:

docker-compose up -d postserve postserve-cache

The tiles will be available at http://localhost:8090/

To serve the tiles on another host than localhost:8090, for instance indoorequal.org, set OMT_HOST=https://indoorequal.org and PPORT=443 to the .env file.

License

All code in this repository is under the BSD license and the cartography decisions encoded in the schema and SQL are licensed under CC-BY.

Products or services using maps derived from indoor= schema need to visibly credit "IndoorEqual.org" and "OpenMapTiles.org" or reference "indoor=" and "OpenMapTiles" with a link to https://indoorequal.org/ and https://openmaptiles.org/. Exceptions to attribution requirement can be granted on request.

For a browsable electronic map based on indoor=, OpenMapTiles and OpenStreetMap data, the credit should appear in the corner of the map. For example:

© indoor= © OpenMapTiles © OpenStreetMap contributors

For printed and static maps a similar attribution should be made in a textual description near the image, in the same fashion as if you cite a photograph.

indoorequal.org's People

Contributors

dependabot[bot] avatar francois2metz avatar joxit avatar krichtof avatar luisapi avatar renovate[bot] avatar transifex-integration[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

indoorequal.org's Issues

Add support for one-based level scheme?

Many countries call what the Brits call "first floor" the second floor. I would love to see the level buttons adapt to local tastes.

Ideally, indoorequal.org should adapt from the level:ref= tags in the buildings — if the building that the map is centered on calls level=0 the G/F then I assume that should be the button's label.

vue-mapbox version

Is there a reason why we do not rely on npm available vue-mapbox version ?
Why not using this in package.json ?
"vue-mapbox": "0.4.1",
rather than:
"vue-mapbox": "osmontrouge/vue-mapbox#update",

Purpose of "state" ?

Hi.
I set up tilesUrl in config.json like this:

(...)
  "tilesUrl": "/data/tmsource____tmp_project.json"
(...)

So, when I open the left side bar (menu), this link try to be reached:
http://localhost:8081/data/tmsource____tmp_project.jsonstate
Am I wrong ?
Couldn't I set tilesUrl as I did ?

And so, even if I fixed this directly in the source code, what is the purpose of state ?
In my own server instance (base on tileserver-gl), what should be the response ?

Level from URL is not taken into account

When level is set in url, it is not applied in the map.

Example:
If I select level 1 in the URL, I'm left in the ground 0.

https://indoorequal.org/#map=20.35/48.8603517/2.3525703/-92/59&level=1

Registration issue, confirmation email is absent

Hi!
I cannot see this email in my mail box.

You'll need to confirm your e-mail before you can sign in. An e-mail confirmation link has been sent to you.

My original email has only two symbol in name part before @. Could it be reason for issue? I have successfully registered on my another account.

Map is not rendered

When executing "yarn dev", the map is not rendered.

Inspecting Firefox dev tools reveals the issue:

ReferenceError: _typeof is not defined ce9db94b-da1f-40bc-ba93-41623c29dfcd:5126:7
Ar blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:5126
expression blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:6930
Yn blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:6947
li blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:7232
blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:9258
blob:http://localhost:1234/ce9db94b-da1f-40bc-ba93-41623c29dfcd:15032

My Fix:
A quick fix has been by adding

"browserslist": [
    "last 2 Chrome versions"
]

to the package.json file, the error is gone.

Mapbox-gl doesn't like to be transpiled by parcel.

visual effect improvement

Rather than using map.fitbounds() going to a new place as location search result, I suggest the use of map.flyTo() rather than map.fitbounds().

Rotation on mobile

As a mobile user with a touch screen, I'd like to be able to play with the horizontal rotation.
Currently, I can't do it with one, two or three fingers.

Details of features

Hi,
I'm looking forward your indoor rendering, which is very smooth to use and intuitive. It would be great to see more details about shown feature like we do on OpenLevelUp or G**gle Maps :

  • Click on a feature on map
  • A left panel opens
  • It shows main information about clicked element : picture (if any), name, category, website... And maybe tags (by default collapsed)

Some examples

olu

gmaps

Best regards.

Map not displayed

Hi! I am mounting the application on a server. the indoorequal server is already ok. but the front end does not show the map. What can be?
Captura de pantalla de 2021-07-13 10-36-26

Add emergency POIs?

Hi,

while I'm not sure, if it's wise + allowed to map emergency equipment of buildings at OSM, I guess it's possible. Rescue plans are obligatory here in Germany for any public building, so you might share this details also online, to teach visitors where they can leave the building, or get help for rescue:

  • entrance=emergency
  • emergency=defibrillator
  • emergency=assembly_point
  • emergency=landing_site
  • emergency=dry_riser_inlet
  • emergency=fire_alarm_box
  • emergency=fire_extinguisher
  • emergency=fire_hose
  • emergency=fire_hydrant
  • emergency=life_ring
  • emergency=assembly_point

Maybe this should be a seperated layer to avoid visual overload?
There are maps like openfiremap.de or Wambacher's Emergency but usually this objects are outdoor.

style service related objects

Hi, the style is pretty nice and modern. But I noticed that currently it's not easy to recognize where a guest of the building can get things, services or support.

How about a different style for rooms like restaurant, toilets, amphitheatre, lecturer? So they are easy to recognize and it's a tip easier to know how to get there to get what you are looking for (within the building).

Outline for areas with name?

Not all special POIs are within a dedicated room, some are only dedicated areas in a building. Examples like fast-food, playground, galleries or places for events have usually a dedicated name or ref.

What do you think about to give this object a soft outline, to indicate their location, but clearly not as prominent like for rooms?
Currently they have no indication and are just "somewhere" within the floor and slightly disappear.
Screenshot 2022-07-28 at 16-48-58 indoor

For example https://indoorequal.org/#map=19.52/54.0914911/12.1444174&level=0

Délimitation du bâtiment

Hey,
Que est le tag utilisé pour que le contour d'un bâtiment s'affiche dans ton outil ?
Je pensais, en lisant la doc, que c'était level:ref cf. https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging mais je ne l'ai pas trouvé à montrouge https://www.openstreetmap.org/way/83236349

Le marché de l'olive dans le 18ème https://www.openstreetmap.org/way/84154399 n'affiche en effet pas le contour : https://osm-indoor.2metz.fr/#19.13/48.8909709/2.3615042 alors qu'il apparait bien dans openlevelup https://openlevelup.net/?l=0#20/48.89093/2.36152

autre exemple qui peut aider d'un endroit que j'ai mappé : le petit trianon https://osm-indoor.2metz.fr/#19.49/48.8155657/2.1097658

Map readability issue due to label collisions between layers

Hello! Although this project is definitely the best way to visualize OSM indoor map data, I find that for map data with odd shapes or gaps in them, the display can get quite cluttered by labels from base layers which overlap with the indoor geometry. Although those labels are underneath the indoor map, and they don't collide with labels on the indoor symbol layer, it still adds noise that makes comprehending the map more difficult. Some examples:

U Hamburg Hauptbahnhof Süd image

Obviously maplibre's label placement only takes other labels into account and not geometry, which means that any part of a room that is not covered by a symbol is at risk of having this clutter at its edges.

I'm wondering if there would be a way to make the labels of a specific layer avoid the geometry of another layer.

style transport related objects

Hi, first I really like the modern, decent vector styling 🙂

But I noticed that currently it's not easy to understand how you can move along the building, esp. between levels. Most rooms look the same, only private rooms have a different color.

I like to suggest that rooms like entrance, waiting, reception, lobby, stairs, elevator get also a different style to show that they are different from other rooms and to support navigation of viewers by this POIs esp. between different levels.
How about a different colour or a icon similar to steps?

Feature Request: Render man_made=column

When I can use a CAD plan to map indoor areas inside OpenStreetMap, I often add the man_made=column as they are good marker and often used to place vending machines, defibrilators and so on. Indoor= could render them. I've add a lot of them in train station like CDG2 or Montparnasse

Display room ref

Most rooms / areas that are important have a dedicated name, that is currently rendered fine 😄
Screenshot 2022-07-28 at 16-54-04 indoor

But of course there are (a lot) of other rooms, that might be relevant for a guest in a school, university, clinic, ... which are just offices or class rooms. Planing your way requires to find the position by the room number / ref but it is currently not vissible?

I see, that this can be visual overwhelming / clutter , esp. if the rooms have also a icon to present their primary use.
But how about to add a similar text like for name, but even smaller?

Here at OpenLevelUp this isn't that easy to recognize and IMHO a bit like chaos 😉
Screenshot 2022-07-28 at 17-02-05 OpenLevelUp!

Dependency on maptiler

Hi, thanks for the job done.

Because of dependency on maptile, I get a cross origin error:
"Origin not allowed - Get your free key at https://cloud.maptiler.com/."

https://api.maptiler.com/maps/bright/style.json?key=T7HQrA4a6k5eOxDGD6qp

Must I understand registration on maptiler is mandatory ?

Could you suggest a freer solution ?

Support viewing indoor nodes and highway=corridor ways

It's not always possible to draw an exact indoor map. There are some malls without any mapped rooms, but they contain more-or-less precise shop nodes with level tags. I think it would be beneficial to display level selector when nodes with level tags are in view. Such malls may also contain highway=corridor ways which are not an area, but still help with navigation.
An example of such mall https://indoorequal.org/#map=18.04/59.436243/24.755846&level=0

There is a problem with underlying map as it displays shops on all floors and usually they are just hidden by overlapping indoor map which in this case doesn't have any areas. Not sure how to solve this. OsmInEdit suggests creating indoor=level areas and maybe they could be used, but I couldn't find information on them in OSM wiki. Wiki talks about level relations, not areas.

An example of this problem
https://indoorequal.org/#map=18.37/59.441147/24.735082&level=0
Thanks to the lonely elevator we can see it.

Problems to render a indoor map using geojson

I have this code but indoor equal does note render the file

<body>

</body>
<script>
    const indoorEqualWindow = window.open("https://indoorequal.org/");
window.addEventListener('message', (e) => {
  if (e.data.event === 'ready') {
    const file = new File([JSON.stringify({type: 'FeatureCollection', features: []})], 'mapa.geojson');
    indoorEqualWindow.postMessage({ command: 'preview',file }, '*');
  }
});
</script>

This is [mapa.geojson] file(https://gist.github.com/ArthurSalomaoo/54a78604c9edd11d196f70b7c551f223)

Can you help me to make this map visible in indoorequal?

maxBounds property not applied

Trying to set maxBounds in js/map.vue like this:

  data() {
    return {
      icons,
      indoorSource: { url: tilesUrl },
      mapStyle: `https://api.maptiler.com/maps/bright/style.json?key=${apiKey}`,
      maxBounds: [[2, 45],[5, 50]],
    };
  },

... It does not apply.
Is there any other place to set it ?
Same thing for minZoom.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Awaiting Schedule

These updates are awaiting their schedule. Click on a checkbox to get an update now.

  • Lock file maintenance

Detected dependencies

dockerfile
Dockerfile
  • node 20
github-actions
.github/workflows/ci.yml
  • actions/checkout v4
  • actions/setup-node v4
npm
package.json
  • @indoorequal/vue-maplibre-gl ^7.4.0
  • @turf/bbox ^7.0.0
  • @turf/center-of-mass ^7.0.0
  • @turf/line-to-polygon ^7.0.0
  • dayjs ^1.11.10
  • jszip ^3.7.1
  • lodash.uniq ^4.5.0
  • maplibre-gl ^4.3.2
  • maplibre-gl-indoorequal ^1.2.0
  • opening_hours ^3.5.0
  • osm2geojson-lite ^0.9.4
  • vue ^3.0.0
  • vue-i18n ^9.0.0
  • vuetify ^3.5.0
  • @babel/core ^7.24.4
  • @babel/preset-env ^7.24.4
  • @mdi/js ^7.4.47
  • @parcel/optimizer-data-url ^2.12.0
  • @parcel/resolver-glob ^2.12.0
  • @parcel/transformer-inline-string ^2.12.0
  • @parcel/transformer-sass ^2.12.0
  • @parcel/transformer-vue 2.12.0
  • @vue/test-utils ^2.0.0
  • @vue/vue3-jest 29
  • babel-jest ^29.7.0
  • buffer ^6.0.3
  • deepmerge ^4.3.1
  • deepsortobj ^0.1.3
  • jest-cli ^29.7.0
  • jest-environment-jsdom ^29.7.0
  • js-yaml ^4.1.0
  • parcel ^2.12.0
  • parcel-reporter-static-files-copy ^1.5.3
  • parcel-transformer-markdown-front-matter ^3.0.1
  • process ^0.11.10
  • yarn 4.3.1

  • Check this box to trigger a request for Renovate to run again on this repository

configurable source

config.json set apiKey for maptiler target.
May we set maptiler as a parameter in config.json ?
In that way, we could use other sources than maptiler.
Example:

$ cat config.json
{
  "sources": [{
    "name": "maptiler"
    "apiKey": "T7HQrA4a6k5eOxDGD6qp",
    "tilesUrl": "https://api.maptiler.com",
    "minZoom": 0
    "maxZoom": 14
  },{
    "name": "indoorequal",
    "tilesUrl": "https://tiles.indoorequal.org/"
    "minZoom": 17
    "maxZoom": 17
  }]
}

Rendering some more node POIs?

Hi, I would like to suggest, to add some more simple objects which usually appear just as node:

  • amenity=lockers
  • amenity=table
  • amenity=vending_machines
  • amenity=photo_booth
  • attraction=kiddie_ride
  • amenity=telephone

IMHO this objects are pretty wide spread in buildings like train stations, airports, conference halls and might help to understand the structure of larger areas within the floors?

Added walls disappear if along border of two floors

Hi, I noticed a small bug that might be related to z-order or the floor combination step you mentioned in the other issue.
If you add two floor areas and this areas might be seperated by a wall with a door, currently only the door will be rendered.

For example see:
Screenshot 2022-08-02 at 08-43-45 indoor

But this occurs only in the constellation, where the created wall shares the way with the closed areas. For walls wich just cross a single floor, the rendering is fine
Screenshot 2022-08-02 at 08-44-12 indoor

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.