Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >添加关于突出显示状态的图例和信息

添加关于突出显示状态的图例和信息
EN

Stack Overflow用户
提问于 2020-03-30 18:50:27
回答 1查看 850关注 0票数 3

我一直试图在右上角添加图例和/或信息部分,以显示关于我突出显示的状态的描述,但我无法这样做,因此我不得不发布一些指导。

我在typescript中使用React 16.13,所以在这个阶段使用钩子,而不是类组件(它仍然可以使用,但尽量避免)。我使用的库是React-Leaflet。我已经在网上读了一整天,我不知道如何将这两个东西添加到我的项目中,我想一旦我弄清楚如何做其中一个,另一个将很容易实现。

下面是我的代码:

代码语言:javascript
运行
AI代码解释
复制
const App: React.FC = () => {
  const [mapCenter, setMapCenter] = useState<L.LatLngTuple>([
    36.778259,
    -119.417931
  ]);
  const [geoJson, setGeoJson] = useState<TopoJSON[]>([]);
  const geoJsonRef = useRef<GeoJSON>(null);

  useEffect(() => {
    if (data.type === "Topology") {
      for (let key in data.objects) {
        if (data.objects.hasOwnProperty(key)) {
          setGeoJson(topojson.feature(data, data.objects[key]));
        }
      }
    }
  }, []);

  const highlightFeature = (e: L.LeafletMouseEvent) => {
    let layer = e.target;
    layer.setStyle({
      weight: 5,
      color: "#666",
      dashArray: "",
      fillOpacity: 0.7
    });
    if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) {
      layer.bringToFront();
    }
  };

  const resetHighlight = (e: L.LeafletMouseEvent) => {
    geoJsonRef.current!.leafletElement.resetStyle(e.target);
  };

  const onEachFeature = (feature: GeoJSON.Feature, layer: L.Layer) => {
    layer.bindPopup(feature.properties!.NAME10);
    layer.on({
      mouseover: highlightFeature,
      mouseout: resetHighlight
    });
  };

  return (
    <div className="App">
      <Map center={mapCenter} zoom={4} maxZoom={5} minZoom={4}>
        <TileLayer
          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
          attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
        />
        <GeoJSON
          data={geoJson}
          style={GetStyle}
          onEachFeature={onEachFeature}
          ref={geoJsonRef}
        />
      </Map>
    </div>
  );
 };

export default App;

对于这段代码,我提前表示抱歉。只是不确定如何实现Legend或像文档显示的那样大的信息。任何建议或例子都将不胜感激,感谢您的阅读!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 19:29:26

React-leaflet只是一个包装器。您只需使用原生leaflet代码片段来保持代码块更有组织和可重用性。

您可以使用本地leaflet的代码。要实现图例和突出显示的信息框,您需要做的唯一一件事就是拥有一个地图引用,您可以使用useLeaflet钩子获取它,因为您使用的是钩子。

我已经为您创建了两个包装器,一个用于Legend,另一个用于可视化geojson并显示信息框。下面是后者:

代码语言:javascript
运行
AI代码解释
复制
const HighlightedGeoJson = () => {
  const { map } = useLeaflet();

  useEffect(() => {
    // control that shows state info on hover
    const info = L.control();

    info.onAdd = () => {
      info._div = L.DomUtil.create("div", "info");
      info.update();
      return info._div;
    };

    info.update = props => {
      info._div.innerHTML =
        "<h4>US Population Density</h4>" +
        (props
          ? "<b>" +
            props.name +
            "</b><br />" +
            props.density +
            " people / mi<sup>2</sup>"
          : "Hover over a state");
    };

    info.addTo(map);

    const highlightFeature = e => {
      const layer = e.target;

      layer.setStyle({
        weight: 5,
        color: "#666",
        dashArray: "",
        fillOpacity: 0.7
      });

      if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) {
        layer.bringToFront();
      }

      info.update(layer.feature.properties);
    };

    let geojson;

    const resetHighlight = e => {
      geojson.resetStyle(e.target);
      info.update();
    };

    const zoomToFeature = e => {
      map.fitBounds(e.target.getBounds());
    };

    const onEachFeature = (feature, layer) => {
      layer.on({
        mouseover: highlightFeature,
        mouseout: resetHighlight,
        click: zoomToFeature
      });
    };

    geojson = L.geoJson(statesData, {
      style,
      onEachFeature: onEachFeature
    }).addTo(map);
  }, []);

  return null;
};

Demo

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60937459

复制
相关文章
Spring Cloud Stream整合Kafka
KafkaProperties-> Consumer->valueDeserializer
用户1215919
2021/12/28
1.3K0
Kafka及Spring Cloud Stream
下载kafka http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
HUC思梦
2020/09/03
1.2K0
Spring Cloud Stream与Kafka集成
Spring Cloud Stream是一个用于构建消息驱动的微服务的框架,它为Spring Boot应用程序提供了与消息代理集成的声明式模型。在本文中,我们将探讨如何使用Spring Cloud Stream与Kafka集成,以及如何构建一个使用Kafka作为消息代理的Spring Boot应用程序。
堕落飞鸟
2023/04/12
1.5K0
Spring Cloud Stream与Kafka集成示例
下面是一个完整的示例,它使用Spring Cloud Stream和Kafka来创建一个简单的消息处理器和发布器:
堕落飞鸟
2023/04/12
1.2K0
spring-cloud-stream-binder-kafka属性配置
本文简单介绍下spring-cloud-stream-binder-kafka的一些属性配置。
code4it
2018/09/17
3.9K0
Kafka设计解析(七)- Kafka Stream
Kafka Stream背景 Kafka Stream是什么 Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature。它是提供了对存储于Kafka内的数据进行流式处理和分析的功能。 Kafka Stream的特点如下: Kafka Stream提供了一个非常简单而轻量的Library,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署 除了Kafka外,无任何外部依赖 充分利用Kafka分区机制实现水平扩展和顺序性保证 通过可容错的state store实
Jason Guo
2018/06/20
2.3K2
kafka stream简要分析
kafka历史背景 Kafka是2010年Kafka是Linkedin于2010年12月份开源的消息系统,我接触的不算早,大概14年的时候,可以看看我们14年写的文章《高速总线kafka介绍》。 消息总线一直是作IT系统集成的核心概念,IBM/oracle等传统厂商都有相关中间件产品。传统消息中间件解决是消息的传输,一般支持AMQP协议来实现,如RabbitMQ。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求
大数据和云计算技术
2018/03/08
1.3K0
kafka stream简要分析
kafka stream word count实例
kafka呢其实正道不是消息队列,本质是日志存储系统,而stream processing是其最近大力推广的特性,本文简单介绍下word count的实例。
code4it
2018/09/17
1K0
Kafka核心API——Stream API
Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature,它提供了对存储于Kafka内的数据进行流式处理和分析的功能。简而言之,Kafka Stream就是一个用来做流计算的类库,与Storm、Spark Streaming、Flink的作用类似,但要轻量得多。
端碗吹水
2020/09/23
3.7K0
Kafka核心API——Stream API
kafka stream errorlog报警实例
log4j-core-2.7-sources.jar!/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.java
code4it
2018/09/17
6460
Kafka Stream(KStream) vs Apache Flink
腾讯云流计算 Oceanus 是大数据实时化分析利器,兼容 Apache Flink 应用程序。新用户可以 1 元购买流计算 Oceanus(Flink) 集群,欢迎读者们体验使用。
吴云涛
2021/11/28
4.9K0
Kafka Stream(KStream) vs Apache Flink
Spark Stream对接kafka 源码分析
本文会讲解Spark Stream是如何与Kafka进行对接的,包括DirectInputStream和KafkaRDD是如何与KafkaConsumer交互的
平凡的学生族
2020/06/29
9760
单元测试(Spring)
YGingko
2017/12/28
4.7K0
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
在这个博客系列的第1部分之后,Apache Kafka的Spring——第1部分:错误处理、消息转换和事务支持,在这里的第2部分中,我们将关注另一个增强开发者在Kafka上构建流应用程序时体验的项目:Spring Cloud Stream。
架构师研究会
2019/10/23
2.6K0
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
Spring单元测试
单元测试对开发来说是一种基本素养。Java这方面的工业标准是使用JUnit。在使用了Spring框架及其衍生的相关框架后,会有不同程度的变化。
李鸿坤
2020/11/03
1.2K0
​玩转Kafka—Spring整合Kafka
参考文章:https://www.cnblogs.com/angelyan/p/10800739.html
闫同学
2022/10/31
8660
​玩转Kafka—Spring整合Kafka
Spring Cloud Task 集成Spring Cloud Stream
pring Cloud Task和Spring Cloud Stream都是Spring Cloud的组件,它们都提供了处理消息的功能。
堕落飞鸟
2023/04/17
7600
Spring cloud stream【消息分组】
  上篇文章我们简单的介绍了stream的使用,发现使用还是蛮方便的,但是在上个案例中,如果有多个消息接收者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单系统我们做集群部署,都会从RabbitMQ中获取订单信息,那如果一个订单同时被两个服务获取到,那么就会造成数据错误,我们得避免这种情况。这时我们就可以使用Stream中的消息分组来解决了!
用户4919348
2019/07/03
1.1K0
Spring cloud stream【消息分组】
Spring Cloud 系列之 Spring Cloud Stream
比如用户在电商网站下单,下单完成后会给用户推送短信或邮件,发短信和邮件的过程就可以异步完成。因为下单付款是核心业务,发邮件和短信并不属于核心功能,并且可能耗时较长,所以针对这种业务场景可以选择先放到消息队列中,有其他服务来异步处理。
古时的风筝
2019/09/29
1.7K0
Spring Cloud 系列之 Spring Cloud Stream
Spring Cloud Stream和 Kafka 的那点事,居然还有人没搞清楚?
Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected with shared messaging systems.
Java程序猿阿谷
2020/07/29
1.9K0
Spring Cloud Stream和 Kafka 的那点事,居然还有人没搞清楚?

相似问题

Spring Kafka Stream未编写

129

Spring cloud stream with bind kafka

15

Spring cloud stream / Kafka异常

2138

如何使用Kafka DSL对Spring Cloud Stream进行单元测试

168

如何使用Kafka Streams对Spring Cloud Stream进行单元测试

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档