Code Monkey home page Code Monkey logo

leaflet.polylinemeasure's Introduction

Leaflet.PolylineMeasure

  • Leaflet Plugin to measure distances of simple lines as well as of complex polylines.
  • Measuring in metric system (metres, kilometres), in imperial system (feet, landmiles), or in nautical miles.
  • Lines are drawn as realistic arcs. Bearings and distances are calculated considering Great-circle distance which is the shortest path between 2 points on Earth.
  • Arrows indicating the real midways of the line's great-circle distances, not their optical middle which is different due to projection, especially in high latitudes.
  • To finish drawing a line just doubleclick, or singleclick onto the last (=orange) point, or press "ESC"-key.
  • Moving of line's points afterwards is possible by clicking and draging them. (This feature can not be guaranteed to work on every mobile browser using touch input, e.g. with Chrome Mobile it isn't working right now)
  • To continue a line after it has been finished, hold the Ctrl-Key while clicking onto the first or last point of a line.
  • To add points, hold the Ctrl-Key while clicking onto an arrow.
  • To delete points, hold the Shift-Key while clicking onto a point.
  • It is an evolution of jtreml's Plugin leaflet.measure since the original plugin hasn't been bugfixed for years. I modified it to work again with Leaflet v1.0 and newer (still runs with Leaflet v0.7) and added functional and optical improvements.

Demos

  • Please take a look at these demos:
  • Demo 1 (kilometre units, bearings, with Clear Control and Unit Control buttons)
  • Demo 2 (landmile units, without bearings, without Unit Control button)
  • Demo 3 (nautical mile units, bearings, without Unit Control and Clear Control buttons)
  • Demo 4 (two maps)
  • Demo 5 (programatically providing polyline points - "Seeding Data")

Screenshot

Usage

Add 2 code lines within your HTML-file to load the .css and .js files of the plugin:

<link rel="stylesheet" href="https://ppete2.github.io/Leaflet.PolylineMeasure/Leaflet.PolylineMeasure.css" />
<script src="https://ppete2.github.io/Leaflet.PolylineMeasure/Leaflet.PolylineMeasure.js"></script>

Add 1 code line within your Javascript-file to add the plugin's control into your Leaflet map.

L.control.polylineMeasure(options).addTo(map);

Package manager install

It's possible to install and update the Plugin using package managers like npm. This feature has been added by other users. I'm not familiar nor responsible to keep these package manager installs up-to-date. If you notice such installs being outdated, feel free to provide a Pull request or contact one of the persons who introduced package manager installs, thanks.

Default options

options = {
    position: 'topleft',            // Position to show the control. Values: 'topright', 'topleft', 'bottomright', 'bottomleft'
    unit: 'kilometres',             // Default unit the distances are displayed in. Values: 'kilometres', 'landmiles', 'nauticalmiles'
    useSubunits: true,              // Use subunits (metres/feet) in tooltips if distances are less than 1 kilometre/landmile
    clearMeasurementsOnStop: true,  // Clear all measurements when Measure Control is switched off
    showBearings: false,            // Whether bearings are displayed within the tooltips
    bearingTextIn: 'In',            // language dependend label for inbound bearings
    bearingTextOut: 'Out',          // language dependend label for outbound bearings
    tooltipTextFinish: 'Click to <b>finish line</b><br>',
    tooltipTextDelete: 'Press SHIFT-key and click to <b>delete point</b>',
    tooltipTextMove: 'Click and drag to <b>move point</b><br>',
    tooltipTextResume: '<br>Press CTRL-key and click to <b>resume line</b>',
    tooltipTextAdd: 'Press CTRL-key and click to <b>add point</b>',
                                    // language dependend labels for point's tooltips
    measureControlTitleOn: 'Turn on PolylineMeasure',   // Title for the Measure Control going to be switched on
    measureControlTitleOff: 'Turn off PolylineMeasure', // Title for the Measure Control going to be switched off
    measureControlLabel: '&#8614;', // Label of the Measure Control (Unicode symbols are possible)
    measureControlClasses: [],      // Classes to apply to the Measure Control
    showClearControl: false,        // Show a control to clear all the measurements
    clearControlTitle: 'Clear Measurements', // Title text to show on the Clear Control
    clearControlLabel: '&times',    // Label of the Clear Control (Unicode symbols are possible)
    clearControlClasses: [],        // Classes to apply to Clear Control
    showUnitControl: false,         // Show a control to change the units of measurements
    unitControlUnits: ["kilometres", "landmiles", "nauticalmiles"],
                                    // measurement units being cycled through by using the Unit Control
    unitControlTitle: {             // Title texts to show on the Unit Control
        text: 'Change Units',
        kilometres: 'kilometres',
        landmiles: 'land miles',
        nauticalmiles: 'nautical miles'
    },
    unitControlLabel: {             // Unit symbols to show in the Unit Control and measurement labels
        metres: 'm',
        kilometres: 'km',
        feet: 'ft',
        landmiles: 'mi',
        nauticalmiles: 'nm'
    },
    unitControlClasses: [],         // Classes to apply to the Unit Control
    tempLine: {                     // Styling settings for the temporary dashed line
        color: '#00f',              // Dashed line color
        weight: 2                   // Dashed line weight
    },          
    fixedLine: {                    // Styling for the solid line
        color: '#006',              // Solid line color
        weight: 2                   // Solid line weight
    },
    arrow: {                        // Styling of the midway arrow 
        color: '#000',              // Color of the arrow
    },
    startCircle: {                  // Style settings for circle marker indicating the starting point of the polyline
        color: '#000',              // Color of the border of the circle
        weight: 1,                  // Weight of the circle
        fillColor: '#0f0',          // Fill color of the circle
        fillOpacity: 1,             // Fill opacity of the circle
        radius: 3                   // Radius of the circle
    },
    intermedCircle: {               // Style settings for all circle markers between startCircle and endCircle
        color: '#000',              // Color of the border of the circle
        weight: 1,                  // Weight of the circle
        fillColor: '#ff0',          // Fill color of the circle
        fillOpacity: 1,             // Fill opacity of the circle
        radius: 3                   // Radius of the circle
    },
    currentCircle: {                // Style settings for circle marker indicating the latest point of the polyline during drawing a line
        color: '#000',              // Color of the border of the circle
        weight: 1,                  // Weight of the circle
        fillColor: '#f0f',          // Fill color of the circle
        fillOpacity: 1,             // Fill opacity of the circle
        radius: 6                   // Radius of the circle
    },
    endCircle: {                    // Style settings for circle marker indicating the last point of the polyline
        color: '#000',              // Color of the border of the circle
        weight: 1,                  // Weight of the circle
        fillColor: '#f00',          // Fill color of the circle
        fillOpacity: 1,             // Fill opacity of the circle
        radius: 3                   // Radius of the circle
    },
};

Events

Several Events are fired during the use of the Plugin in order to offer interactivity outside the Plugin. Subscribe to events with:

map.on('polylinemeasure:toogle', e => { /* e.sttus */ });
map.on('polylinemeasure:start', currentLine => {...});
map.on('polylinemeasure:resume', currentLine => {...});
map.on('polylinemeasure:finish', currentLine => {...});
map.on('polylinemeasure:change', currentLine => {...});
map.on('polylinemeasure:clear', e => {...});
map.on('polylinemeasure:add', e => { /* e.latlng */ });
map.on('polylinemeasure:insert', e => { /* e.latlng */ });
map.on('polylinemeasure:move', e => { /* e.latlng ; e.sourceTarget._latlng */ });
map.on('polylinemeasure:remove', e => { /* e.latlng ; e.sourceTarget._latlng */ });
  • Please take a look at Demo 1, where those events get listed in the JS console of your browser

Seeding Data

You can programatically draw measured polylines using the .seed method. It takes an array of arrays of L.LatLng, which enables drawing multiple, discontinuous polylines:

let polylineMeasure = L.control.polylineMeasure(options);
polylineMeasure.addTo (map);

const line1coords = [
    { lat: 22.156883186860703, lng: -158.95019531250003 },
    { lat: 22.01436065310322, lng: -157.33520507812503 },
    { lat: 21.391704731036587, lng: -156.17065429687503 },
    { lat: 20.64306554672647, lng: -155.56640625000003 }
];
const line2coords = [
    { lat: 19.880391767822505, lng: -159.67529296875003 },
    { lat: 17.90556881196468, lng: -156.39038085937503 }
];

polylineMeasure.seed([line1coords, line2coords])
  • Please take a look at Demo 5, where multiple polylines are drawn and measured programatically.

leaflet.polylinemeasure's People

Contributors

blueberryking avatar bodryi avatar carueda avatar cr3a7ure avatar deeg avatar elephant112 avatar gijsalb avatar gijstop avatar grawl avatar lionsoft avatar loispostula avatar marcon2 avatar mpschaeuble avatar msinger avatar ppete2 avatar rendrom avatar rysson avatar slutske22 avatar waybackrider avatar yrral86 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  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  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

leaflet.polylinemeasure's Issues

Cannot turn off in iOS/Safari

Works great on other platforms, But when using Safari on an iPhone device, it is impossible to turn off the PolylineMeasure tool. Do you have any suggestions?

Why is the line not drawn between two points

As shown in the picture below, It didn't work correctly in my project. Is it related to the CRS.Simple I use ?
image

my code:

<template>
        <l-map ref="map"  style="background: #fff;" :crs="crs">
            <l-image-overlay :url="url" :bounds="bounds"></l-image-overlay>
        </l-map>
</template>
<script>
 import {CRS} from 'leaflet';
import 'leaflet.polylinemeasure/Leaflet.PolylineMeasure.css';
import polylineMeasure from 'leaflet.polylinemeasure/Leaflet.PolylineMeasure';
export default {
    data() {
        return {
            zoom: 1,
            bounds: [[0, 0], [0, 0]],
            map: null,
            crs: CRS.Simple,
            width: 0,
            height: 0
        };
    },
    props: {
        url: {
            default: '',
            type: String
        }
    },
    watch: {
        url: function(newVal, oldVal) {
            if (newVal) {
                let img = new Image();
                img.src = newVal;
                let that = this;
                img.onload = () => {
                    that.width = img.width;
                    that.height = img.height;

                    const crss = CRS.Simple;
                    const w = img.width;
                    const h = img.height;
                    let p1 = new window.L.point(0, h);
                    let p2 = new window.L.point(w, 0);
                    let southWest = crss.unproject(p1);
                    let northEast = crss.unproject(p2);
                    const bound = new window.L.LatLngBounds(southWest, northEast);
                    that.bounds = bound;
                };
            }
        }
    },
    mounted() {
        this.$nextTick(() => {
            this.map = this.$refs.map.mapObject;
            this.drawnItems = new window.L.FeatureGroup();
            this.map.addLayer(this.drawnItems);

            this.drawControl = new window.L.Control.Draw({
                position: 'topright',
                draw: {
                    polyline: false,
                    polygon: false,
                    circle: false,
                    circlemarker: false,
                    marker: false,
                    zoomControl: true,
                    rectangle: false
                },
                edit: {
                    featureGroup: this.drawnItems,
                    remove: true
                }
            });
            this.map.addControl(this.drawControl);

            window.L.control.polylineMeasure({
                position: 'topright',
                unit: 'metres',
                clearMeasurementsOnStop: false,
                showMeasurementsClearControl: true,
                showUnitControl: false
            }).addTo(this.map);

        });
    }
</script>
  • "leaflet": "^1.5.1"
  • "leaflet-draw": "^1.0.4"
  • "leaflet.polylinemeasure": "^2.0.0"
  • "vue": "^2.5.16"

How to measure distance between CircleMarkers?

I have a layer with several CircleMarkers. However, I cannot measure the distance between two CircleMarkers since popups on clicking markers. Even setZIndex for different layers still not work.

Line drawn to former location of point

Click two points to create a path. Press ESC to complete.
Use SHIFT-click to delete either point leaving a single point remaining with distance = 0.
Drag this point to a new location
Use CTRL-click on point to resume building path.
Add a new point and press ESC to complete.
Note that there is a line drawn between the two points but also to the original location of the origin point.

image

Undeclared variables

Hi @ppete2 First off, great tool, thanks much for your work!

I just integrated this great tool in a vue-based project ... anyway, just noticed that calcAngle and distanceSegment are not declared thus causing runtime errors. Simple fix in a PR coming up shortly.

What about mobile devices?

This good for my map viewer, but I need to control without keyboard, from touchscreen only.
Is it possible to add, for example, a double-touch to add/remove point and stop/continue drawing?

Translation Support

We are developing a software and it will be use with different languages, and the tooltip has a static label for "in" "out" for example.

es6 problem

you left es6 arrow function in your code, that break my build process in my project
in Leaflet.PolylineMeasure.js in line 841

need to change from:
self._arrArrows[e.target.cntLine].forEach(element => { self._arrArrowsCurrentline.push(element); });

to:
self._arrArrows[e.target.cntLine].forEach(function (element) { self._arrArrowsCurrentline.push(element); });

Can`t translate units: km, m, ml

Please move the units of measure (km, m, ml, etc) in the options. Like bindTooltipText, measureControlTitleOn, etc. I need this for translate plugin to other languages.

click on "Clear measurments" button, (without draw anything), throws an exception

click on "Clear measurments" button, (without draw anything), throws an exception.

can see it in the official example page:
https://ppete2.github.io/Leaflet.PolylineMeasure/demo1.html

just click on "Clear measurments" button, (without draw anything)
and you will get the exception in your console:

Uncaught TypeError: Cannot read property 'finalize' of undefined
at e._finishPath (Leaflet.PolylineMeasure.js:760)
at e._clearAllMeasurements (Leaflet.PolylineMeasure.js:417)
at HTMLAnchorElement.r (DomEvent.js:81)

ESC key causes JS exception on Chrome for Mac

Steps:

  • open any of three examples
  • start drawing measurement path
  • press ESC key
  • see the error in the console
Leaflet.PolylineMeasure.js:829 Uncaught TypeError: Cannot read property 'ctrlKey' of undefined
    at e._finishOrRestartPath (Leaflet.PolylineMeasure.js:829)
    at e._onKeyDown (Leaflet.PolylineMeasure.js:473)
    at HTMLDocument.r (leaflet.js:5)
_finishOrRestartPath @ Leaflet.PolylineMeasure.js:829
_onKeyDown @ Leaflet.PolylineMeasure.js:473
r @ leaflet.js:5

Once created, moving a polyline measure breaks mouse move events propagation

Hello,
First just wanted to say that your plugin is awesome! It fills all my needs, especially nautical miles measures.

I am having an issue and at the moment not sure whether its due to an error on my part. Here is how to reproduce it:

  1. register a map mouse move listener:

map.on('mousemove', function(e){console.log('mouse move: '+e.latlng.lat+' '+e.latlng.lng)});

This works as expected and the mouse move events are shown in the console.

  1. Create a polyline measure. Works awesome.

  2. Select the tip of the polyline measure and move it to another location. You will notice that the mouse move events are no longer propagated in the console.

This is an issue for me because I use those events to display the current pointer lat/lng on the map.

Any workarounds to this issue would be greeatly appreciated! If I could stop the user from actually moving the polyline measure, that would be also fine, as long as I don't lose the mouse move events

Edit:
The problem seems to happen at the end of the _dragCircle method:

self._map.on ('mouseup', function () { 
                    self._resetPathVariables();
                    self._map.off ('mousemove');
                    self._map.dragging.enable();
                    self._map.on ('mousemove', self._mouseMove, self);
                    self._map.off ('mouseup');
                });

Thanks!

Midpoint arrow doesn't draw when arcpoints < 50

The drawArrow function assumes that arcpoints is 100, placing the arrow at points 48 and 49 in the array:

   _drawArrow: function (arcLine) {
            var P48 = arcLine[48];
            var P49 = arcLine[49];
            ...
        },

This fix worked for me:

        _drawArrow: function (arcLine) {
            var midpoint = Math.round(arcLine.length/2);
            var P48 = arcLine[midpoint-1];
            var P49 = arcLine[midpoint];
            ...
        },

clearMeasurementsOnStop ERROR TypeError: Cannot read property 'originalEvent' of undefined

Installed dependencies:

By default in config option clearMeasurementsOnStop is set to true. When you're setting one or more point (start drawing) and then you want to toggle the measure control, you'll get the error:

ERROR TypeError: Cannot read property 'originalEvent' of undefined
    at NewClass._finishOrRestartPath (Leaflet.PolylineMeasure.js:829)
    at NewClass._clearAllMeasurements (Leaflet.PolylineMeasure.js:428)
    at NewClass._toggleMeasure (Leaflet.PolylineMeasure.js:414)
    at HTMLAnchorElement.handler (leaflet-src.js:2280)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:17280)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
    at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:496)
    at invokeTask (zone.js:1540)

In your demo [email protected] is used and if I install it, everything works well.
In #38 you told that this error has already been solved, but the latest available version has this bug.

UPD In demo you're using files from repo, it seems to me that they are newer than [email protected] and didn't published to npm.

UPD2
changing in package.json from
"leaflet.polylinemeasure": "^2.0.0"
to
"leaflet.polylinemeasure": "git+https://github.com/ppete2/Leaflet.PolylineMeasure.git#master"
helped to install latest unpublished to npm version of this package.

@ppete2, can you publish this version as 2.1.0 for example to npm?

Kilometres and Feet reporting "undefined"

current options code:

...
unitControlTitle: {             
     text: 'Change Units',
     metres: 'meters',
     kilometres: 'kilometers',
     feet: 'feet',
     landmiles: 'miles'
},
     unitControlLabel: {            
     metres: 'm',
     kilometres: 'km',
     feet: 'ft',
     landmiles: 'mi'
}

That's the current code I'm using and when toggling the units I get the following options:

  • m
  • mi
  • undefined

Looks like the numbers actually update on the measured line label itself but it seems there are only 3 options (km and ft are combined as 'undefined' , I'm guessing.)

The units in the popup and the selected units also seem to be desynced.
I have a line and it's showing the following:

Unit Selected | Measurement Output

mi | 742 mi
undefined | 645 undefined
m | 1194 km

Esc and Alt-Click not work

Actions by Esc key and Alt-Click not work for me.
Ctrl-Click are work.

Firefox 62.0.3

Esc:
ReferenceError: resumeFirstpointFlag is not defined[Learn More] Leaflet.PolylineMeasure.js:516:1

Alt-Click:
silently

Command in external button

Hi,
Is it possible to have PolylineMeasure commands in external buttons (not inside map like samples) ?

Error when trying to delete the last point of polyline

When you have already drawn polyline, you can delete any points of it. But when you have the last one, you can't delete it and you get the error in console:

Uncaught TypeError: Cannot read property 'setStyle' of undefined
    at e._dragCircle (Leaflet.PolylineMeasure.js:1206)
    at e.fire (leaflet.js:5)
    at e._fireDOMEvent (leaflet.js:5)
    at e._handleDOMEvent (leaflet.js:5)
    at HTMLDivElement.r (leaflet.js:5)

Reproduced at any currently available demos.

Add/Remove Point

Hello,
it would be nice to have the possibility to delete a point or to add an additional one.

Best regards

Error when trying to delete the point of polyline during drawing

You draw the polyline and then hover any point of it not exiting out of drawing mode and you see tooltip with message "Press SHIFT-key and click to delete the point". But if you click it nothing happens and you'll get an error at console:

Uncaught TypeError: Cannot read property 'circleCoords' of undefined
    at e._dragCircle (Leaflet.PolylineMeasure.js:1195)
    at e.fire (leaflet.js:5)
    at e._fireDOMEvent (leaflet.js:5)
    at e._handleDOMEvent (leaflet.js:5)
    at HTMLDivElement.r (leaflet.js:5)

Reproduced at any currently available demos.

Bug with renderer canvas

Hi, updated measure dont work if leaflet map has canvas as a renderer:
var map = new L.Map('map', { renderer: L.canvas() });

Leaflet measure doesn't work on Internet Explorer 11

Leaflet measure doesn't work on Internet Explorer 11
It seems IE doesn't recognize the '=>' js syntax.

Since it's only used one time in PolylineMeasure, it may be corrected by replacing :

self._arrArrows[e.target.cntLine].forEach(element => { self._arrArrowsCurrentline.push(element); });

with its longer version :
self._arrArrows[e.target.cntLine].forEach(function(element) { return self._arrArrowsCurrentline.push(element); });

L.Mixin.Event deprecation warning

With Leaflet 1.3.4 throws a deprecation warning with L.MixinEvents:

Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead

Publish on npm?

Is there any chance you could publish this on npm? It seems like you have a package.json file but I get a 404 when trying to install leaflet.polylinemeasure.

Double click cannot stop drawing

After I loaded the Baidu map with the leaflet, I can't stop using double click..What happened?

This has been resolved is the version of the css.

Stack elements of the display bar horizontally

How can the display bar be stacked horizontally, instead of the default vertical?

Well, ideally without changing the native leaflet set-up:

.leaflet-bar a {
	display: inline-block;
	float: none;
}

distance_measure_tool

Thank You

Dedicated Events to subscribe to

Hello,

Just starting using your this nice plugin.

I would like to use the measurements infos (points position, bearings & distance) for later use.
Is there any events I can subscribe to, or any internal object I can observe to get these infos ?

Thx

Syntax error in Internet Explorer

Hi!

There is a syntax error on line 770 when testing in Internet Explorer:

lineCoords.splice ((circleNr-1)*(arcpoints-1), arcpoints, ...newLineSegment1);

I don't think the spread operator (...) is widely supported.

Uncaught ReferenceError: tooltipStart is not defined

i'm using stenciljs and add your plugin, but then it gave me an errors when i try to use it.
the errors related to variables that was not defined.

Uncaught ReferenceError: tooltipStart is not defined
Uncaught TypeError: self._currentLine.points.last is not a function

it seems that there are missing var before the issued variables that the console tell me about them.

Error on dragging circle

Hey! I'm using the plugin with AngluarJS and it's works just fine except this.
After drawing a path, I'm trying to drag one of the end-path circles. Map freezes and i see the following error in the console.
Uncaught TypeError: self._arrArrows[lineNr][circleNr].removeFrom is not a function

Any ideas what could be wrong?

Thanks in advance.

The measurement mode is not switched off.

If you click the measurement button when you select the next reference point when measuring the distance, the button will take the original view, but the measurement mode will not disappear.

Try to start the measurement and make another click on the measurement button for this effect.

Hide control

Hi,
How to hide the polylineMeasure control?
Thanks

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.