Locations 插件 🌍

检查设置 location users map limit。如果它低于已添加位置的用户数量,则超过限制数量的用户将不会显示在地图上。

5 个赞

就是这样。谢谢。 :smile:

2 个赞

一些用户在使用默认提供商(nominatim)时遇到了速率限制,导致他们需要等待一分钟才能重试。

奇怪的是,我没有遇到任何限制。

参见:The location field in profile is kind of broken - Forum Feedback - Unicyclist.com

  1. 有什么想法可以解释为什么我没有遇到限制,而有些用户却遇到了?我尝试在快速输入时输入很长的地点名称。
  2. 对于 location_geocoding_provider 设置,你的第二个选择是什么(免费使用)?
  3. location_geocoding_debounce 设置是什么?

我看到 nominatim 的使用政策中提到“自动完成搜索 Nominatim 尚不支持此功能,你不得使用 API 在客户端实现此类服务。”

在新主题的地点按钮中没有自动完成功能,但在自定义用户字段中有:

image

image

chrome_tOtNSZ2dXy

  1. 这是禁止的用法吗?:thinking:

是,也不是。大部分情况是否定的。如果位置信息是在用户没有采取任何行动的情况下自动获取的,并且该网站是由公司或社区运营的(意味着不是私人个人),并且该信息并非必需,那么这可能违反 GDPR。

但是……地理位置的准确性很差。我不知道法国的情况如何,但在芬兰,所有运营商都覆盖全国,所以每次我的 IP 地址更改时,我的位置也会更改,而且每次都指向错误的城市。

IP 地址不被视为个人数据,而更像是公开数据,不能用于识别个人。

但是,在使用插件时,地理位置并非被禁止、不被允许或不合法,因为用户希望显示它。并且使用 IP 地址作为位置来源从来都不是不合法的。

不过,可能存在一些道德问题。但这取决于论坛。

我可能误解了这个插件的工作方式。我需要阅读完这个话题。感谢您的回复。 :slight_smile:

您只能在测试中使用 Nominatim。对于生产环境,我建议使用

2 个赞

这是上个月跟进的,抱歉,我不知怎么错过了任何回复通知 :man_facepalming:

我们另一个显示较大文字的网站使用的是 Leaflet v1.5.1

我看到 Locations 插件以前是 1.3.4,现在是 1.7.1,这意味着版本不是问题。

同意。

提醒一下大家,我们 Locations 地图上的文字太小了,无法阅读。

截图示例在此:Locations Plugin 🌍 - #736 by Richie

谢谢 Robert @merefield,是的,我可以访问另一个网站的源代码,该网站上的文字更大,但使用的是相同的底图。

我认为不同之处在于传递了一个额外的参数:

tileSize: 512

它在此上下文中应用:

// Attribution
var mbAttr = 'Map &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>, Content &copy; <a href="https://GreyArro.ws/">Grey Arrows Drone Club</a>',
	mbUrl = 'https://api.mapbox.com/styles/v1/mapbox/{id}/tiles/{z}/{x}/{y}?access_token=<%=Variabs.GlobalVariables.strOpenStreetMapKey%>',
	mbMaxZoom = '20'
;


// Basemaps
var
	// Full list: https://gis.stackexchange.com/a/244797/145060
	// Full list: https://docs.mapbox.com/help/troubleshooting/migrate-legacy-static-tiles-api/#which-classic-styles-are-being-deprecated
	// Full list: https://docs.mapbox.com/api/maps/#mapbox-styles
	dark = L.tileLayer(mbUrl, { id: 'dark-v10', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	road = L.tileLayer(mbUrl, { id: 'outdoors-v11', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	satellite = L.tileLayer(mbUrl, { id: 'satellite-v9', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 }),
	hybrid = L.tileLayer(mbUrl, { id: 'satellite-streets-v11', maxZoom: mbMaxZoom, attribution: mbAttr, tileSize: 512, zoomOffset: -1 })
;

因此,我认为我有一个功能请求 :slight_smile:

请问我们可以在插件设置中添加一个 tileSize 吗?

或者我是否可以通过 Map tile layer uri 设置来传递所需的 tilesize? :thinking:

您好,

我注意到 composer 位置按钮似乎存在一个问题。
Discourse 版本 a6abf8d07a

谢谢 :slightly_smiling_face:

1 个赞

谢谢 @Don,我可以重现,虽然它似乎并没有阻止显示,我会尽快查看

2 个赞

这是由于核心中的此提交引入的重大更改:FIX: Use CSS transition to make room for composer (#16750) · discourse/discourse@9ea8a4a (github.com)

我已推送一项修复以及一些小的格式调整,以改进外观和感觉:

4 个赞

谢谢你,Robert :slightly_smiling_face: 我非常感谢你在非维护时间如此迅速地修复了这个问题。我会尽快更新,并在此帖中说明它的工作原理。:slightly_smiling_face:

运行效果很棒,再次感谢!:slightly_smiling_face:

1 个赞

你好。有人知道是否可以通过此插件在地图上添加位置吗?

一些社区的位置很难在没有坐标的情况下识别,这可能会让一些用户望而却步。谢谢!

2 个赞

我确信之前有人请求过这个功能,但据我所知,它不在当前列表中。

功能请求可以在这里提出: Pavilion

但请注意,我们通常忙于维护插件,如果没有人赞助这项工作,新功能很少出现。

我们也欢迎 PR(拉取请求)。这是一个特别适合添加的功能。

5 个赞

您好,

我注意到主题标题下的位置存在一个问题。如果用户从 /preferences/profile 中删除先前添加的位置,那么它将在主题标题下显示一个空位置,而不是将其删除。

谢谢 :slightly_smiling_face:

您好!

我修改了 list/topic-list-item.raw 模板以在主题列表中显示位置:

    {{#if topic.location}}
      <div>
        {{d-icon 'map-marker-alt'}} {{location-format topic.location opts}}{{location-label-container}}
      </div>
    {{/if}}

但我认为我的条件没有正确编写,因为如果我禁用该插件,主题列表循环就会中断。

在 handlebars 模板中检查主题位置是否存在,正确的方法是什么?

1 个赞

覆盖这个似乎有点极端,为什么不使用连接器呢?:

topic-list-after-title 或者
topic-list-before-category

请看 An interesting strategy for passing properties via raw template plugin outlets

2 个赞

因为我找不到合适的(或者可能在我修改模板的时候它们还不存在,大约在 2 年前)::sweat_smile:

这样做可能会更容易,我会试试,谢谢!


呃…… 无法使用这些连接器。

我尝试过和看过的枯燥内容

我阅读了 Developing Discourse Themes & Theme Components

假设这是我们在连接器中添加 HTML 代码的方式:

<script type="text/x-handlebars" data-template-name="/connectors/topic-above-post-stream/test">
  <div style="height: 200px; width: 200px;background: red"></div>
</script>

我尝试了

<script type="text/x-handlebars" data-template-name="/connectors/topic-list-after-title/test">
  <div style="height: 200px; width: 200px;background: red"></div>
</script>

但它不起作用。是因为 topic-list-item 是一个 .hbr 文件而不是 .hbs 文件吗?

我使用了 https://meta.discourse.org/t/plugin-outlet-locations-theme-component/100673,但主题列表中的插件插槽没有显示出来。

我还查看了 https://meta.discourse.org/t/what-is-the-difference-between-raw-hbs-handlerbar-files-and-only-hbs-handlerbar-files/58565。

或者我只需要创建一个带有额外文件的主题组件,就像这个 https://github.com/discourse/discourse-topic-thumbnails/blob/main/javascripts/discourse/connectors/topic-list-before-link/topic-thumbnail.hbr 吗?

但是这里创建了新的连接器,而 topic-list-after-titletopic-list-before-category 已经存在了…… 所以我有点困惑。

2 个赞

也许这有帮助?:

image

image

{{context.topic.location.street}}

image

或者更好:

{{location-format context.topic.location}}

这会导致:
image

然后您可以使用 CSS 进行优化(例如,移至新行)。

2 个赞

好的,太棒了,非常感谢你,Robert!

所以,对于感兴趣的人来说,这个主题组件只是将位置添加到主题列表中。

3 个赞

使用 outlet 的方式更加优雅,但存在一个问题。

outlet 的位置就在主题标题之后……以及徽章 div(显示未读消息或新主题的点的那个)之前。结果:

我找不到简单的解决方案来修复这个问题,即使使用 CSS(我尝试过一些方法)。

我也觉得在 Feature 中请求一个新的 outlet 不会足够有趣而被添加到 Discourse 中。


编辑:我已经将徽章放在了位置旁边。这样就可以了。

image

1 个赞