如何在数据库中比较纬度和经度 [英] how to compair Latitute and Longitude in database

查看:129
本文介绍了如何在数据库中比较纬度和经度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在Google地图上创建了具有一组点(3,4等)的面,并将这些坐标保存到数据库中

我想检查一下,当用户在地图上的特定区域上绘制polgon时
那么下一次他们将无法在该区域上绘制多边形

如何在Google地图上检查用户将无法在另一个多边形上绘制多边形

任何人都可以为此提出建议的解决方案.............

这是绘制多边形的代码

i have created polygon with set of points(3,4 etc) on google map and save these coordinates to database

i want to check that when users draw polgon on particular area on map
then next time they will not be able to draw polygon on this area

how to check it on google map that users will not able to draw polygone over another polygone

can any one suggest solution for this.............

here is code to draw polygon

var COLORS = [["red", "#ff0000"], ["green", "#008000"], ["blue", "#000080"], ["purple", "#800080"], ["orange", "#ff8800"]];
        var options = {};
        var lineCounter_ = 0;
        var shapeCounter_ = 0;
        var markerCounter_ = 0;
        var colorIndex_ = 0;
        var featureTable_;
        var map;
        var outputFileMode = 'csv';
        var geocoder = null;

        var fillColor = "#0000FF"; // blue fill
        var lineColor = "#FF00FF"; // black line
        var opacity = .5;
        var lineWeight = 3;

        var currpoly = [];
        var poly = [];

        MyTopoInit();

        var WMS_TOPO_MAP = WMSCreateMap('Topo', 'USGS Topographic', 'Imagery by USGS / Service by TerraServer', 'http://www.terraserver-usa.com/ogcmap6.ashx', 'DRG', 'image/jpeg', false, 1.0, 4, 17, [], 't');
        //var NRCAN_TOPO_TILES = WMSCreateMap('Cdn', 'Canadian Topographic', 'Maps by NRCan.gc.ca','http://wms.cits.rncan.gc.ca/cgi-bin/cubeserv.cgi', 'PUB_50K:CARTES_MATRICIELLES/RASTER_MAPS', 'image/png', false, 1.0, 6, 17, [], 't' );
        var MYTOPO_MAP = new GMapType(mytopoLayer, G_SATELLITE_MAP.getProjection(), "MyTopo", G_PHYSICAL_MAP);


        // Web Map Service map types.
        //
        // Copyright © 2005,2006 by Jef Poskanzer <jef@mail.acme.com>.
        // http://www.acme.com/javascript/


        function WMSCreateMap(name, tip, copyright, baseUrl, layer, format, transparent, opacity, minResolution, maxResolution, extraTileLayers, urlArg) {
            debugger;
            var tileLayer = new GTileLayer(new GCopyrightCollection(copyright), minResolution, maxResolution);
            tileLayer.baseUrl = baseUrl;
            tileLayer.layer = layer;
            tileLayer.format = format;
            tileLayer.transparent = transparent;
            tileLayer.getTileUrl = WMSGetTileUrl;
            tileLayer.getOpacity = function () { return opacity; };
            tileLayer.getCopyright = function () { return { prefix: '', copyrightTexts: [copyright] }; };
            var tileLayers = [];
            for (var i in extraTileLayers)
                tileLayers.push(extraTileLayers[i]);
            tileLayers.push(tileLayer);
            return new GMapType(tileLayers, G_SATELLITE_MAP.getProjection(), name, { urlArg: 'o', alt: tip });
        }


        function WMSGetTileUrl(tile, zoom) {
            debugger;
            var southWestPixel = new GPoint(tile.x * 256, (tile.y + 1) * 256);
            var northEastPixel = new GPoint((tile.x + 1) * 256, tile.y * 256);
            var southWestCoords = G_NORMAL_MAP.getProjection().fromPixelToLatLng(southWestPixel, zoom);
            var northEastCoords = G_NORMAL_MAP.getProjection().fromPixelToLatLng(northEastPixel, zoom);
            var bbox = southWestCoords.lng() + ',' + southWestCoords.lat() + ',' + northEastCoords.lng() + ',' + northEastCoords.lat();
            var transparency = this.transparent ? '&TRANSPARENT=TRUE' : '';
            return this.baseUrl + '?VERSION=1.1.1&REQUEST=GetMap&LAYERS=' + this.layer + '&STYLES=&SRS=EPSG:4326&BBOX=' + bbox + '&WIDTH=256&HEIGHT=256&FORMAT=' + this.format + '&BGCOLOR=0xFFFFFF&EXCEPTIONS=INIMAGE' + transparency;
        }

        function MyTopoInit() {
            debugger;
            GetMyTopoTile = function (a, b, c) {
                var lURL = this.myBaseURL;
                lURL += b;
                lURL += "/" + a.x;
                lURL += "/" + a.y + ".png";
                return lURL;
            }

            var mytopoCopy = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0, 'Topo maps (c) MyTopo.com')
            var mytopoc = new GCopyrightCollection('');
            mytopoc.addCopyright(mytopoCopy);

            var tileMytopo = new GTileLayer(mytopoc, 6, 16);
            tileMytopo.myLayers = 'topoG';
            tileMytopo.myFormat = 'image/png';
            tileMytopo.myBaseURL = 'http://maps.mytopo.com/mytopo/tilecache.py/1.0.0/topoG/';

            tileMytopo.getTileUrl = GetMyTopoTile;

            mytopoLayer = [tileMytopo];
        }

        function getColor(named) {
            debugger;
            return COLORS[(colorIndex_++) % COLORS.length][named ? 0 : 1];
        }


        function startShape() {
            debugger;
            //select("shape_b");
            var color = getColor(false);
            var poly = new GPolygon([], color, 2, 0.7, "#0000FF", 0.2);
            startDrawing(poly, "Polygon " + (++shapeCounter_), function () {
                logCoordinates(poly);
                var cell = this;
                cell.innerHTML = " (" + poly.getVertexCount() + " points)";
            }, color);
        }



        function editShape() {
            debugger;
            var color = getColor(false);
            var points = [];
            var _Polygons = [];
            _Polygons = document.getElementById("PointsBox").value.split('?');


            for (var j = 0; j <= _Polygons.length - 1; j++) {
                var inputPolygon = _Polygons[j];



                pointsLines = inputPolygon.split(/ |\n/);

                var poly = new GPolygon([], color, 2, 0.7, "#0000FF", 0.2);
                //var poly = new GPolyline([],color,lineWeight,opacity);
                map.addOverlay(poly);

                //Read in coordinates
                for (var i = 0, len = pointsLines.length; i < len; ++i) {

                    if (pointsLines[i].search(/,|\t/) != -1) {
                        pointsCoords = pointsLines[i].split(/,|\t/);
                        if (parseFloat(pointsCoords[0]) != 0 && parseFloat(pointsCoords[1]) != 0) {
                            poly.insertVertex(0, new GLatLng(parseFloat(pointsCoords[0]), parseFloat(pointsCoords[1])));
                        }
                    }
                }
                var name = "Polygon " + (++shapeCounter_);
                var cells = addFeatureEntry(name, color);

                poly.enableEditing({ onEvent: "mouseover" });
                poly.disableEditing({ onEvent: "mouseout" });

                poly.Nametag = name;


                currpoly = poly;
                logCoordinates(poly);
                cells.desc.innerHTML = " (" + poly.getVertexCount() + " points)";
                GEvent.bind(poly, "lineupdated", cells.desc, function () {
                    logCoordinates(poly);
                    var cell = this;
                    cell.innerHTML = " (" + poly.getVertexCount() + " points)";
                });
                GEvent.addListener(poly, "click", function (latlng, index) {
                    currpoly = poly;
                    if (typeof index == "number") {
                        poly.deleteVertex(index);
                    } else {
                        //poly.setFillStyle({color: "#0000FF"});
                        poly.setStrokeStyle({ weight: 2 });
                        //poly.redraw(true);
                        cells.desc.innerHTML = " (" + poly.getVertexCount() + " points)";
                    }
                });

            }
        }



        function startLine() {
            debugger;
            //select("line_b");
            var color = getColor(false);
            var poly = new GPolyline([], color, lineWeight, opacity);
            startDrawing(poly, "Line " + (++lineCounter_), function () {
                logCoordinates(poly);
                var cell = this;
                cell.innerHTML = " (" + poly.getVertexCount() + " points)";
            }, color);
        }

        function addFeatureEntry(name, color) {
            debugger;
            currentRow_ = document.createElement("tr");
            var colorCell = document.createElement("td");
            currentRow_.appendChild(colorCell);
            colorCell.style.backgroundColor = color;
            colorCell.style.width = "1em";
            var nameCell = document.createElement("td");
            currentRow_.appendChild(nameCell);
            nameCell.innerHTML = name;
            var descriptionCell = document.createElement("td");
            currentRow_.appendChild(descriptionCell);
            featureTable_.appendChild(currentRow_);
            return { desc: descriptionCell, color: colorCell };
        }

        function startDrawing(poly, name, onUpdate, color) {
            debugger;
            poly.Nametag = name;
            map.addOverlay(poly);
            currpoly = poly;
            var cells = addFeatureEntry(name, color);
            poly.enableDrawing(options);
            poly.enableEditing({ onEvent: "mouseover" });
            poly.disableEditing({ onEvent: "mouseout" });

            GEvent.addListener(poly, "endline", function () {
                currpoly = poly;
                logCoordinates(poly);
                cells.desc.innerHTML = " (" + poly.getVertexCount() + " points)";
                GEvent.bind(poly, "lineupdated", cells.desc, onUpdate);
                GEvent.addListener(poly, "click", function (latlng, index) {
                    currpoly = poly;
                    if (typeof index == "number") {
                        poly.deleteVertex(index);
                    } else {
                        //poly.setFillStyle({color: "#0000FF"});
                        poly.setStrokeStyle({ weight: 2 });
                        //poly.redraw(true);
                        cells.desc.innerHTML = " (" + poly.getVertexCount() + " points)";
                    }
                });
            });
        }

        function continueDraw() {
            debugger;
            currpoly.deleteVertex((currpoly.getVertexCount()) - 1);
            currpoly.enableDrawing(options);
        }


        function initialize() {
            debugger;
            if (GBrowserIsCompatible()) {

                map = new GMap2(document.getElementById("map"));
                // Add map types //
                map.addMapType(G_PHYSICAL_MAP);
                map.addMapType(WMS_TOPO_MAP);
                //map.addMapType( NRCAN_TOPO_TILES );
                map.addMapType(MYTOPO_MAP);
                map.setCenter(new GLatLng(25.0, 45.0), 4);

                // Get bounds from URL if present
                var getbounds = getUrlVars();
                var bounds = new GLatLngBounds();

                if ((getbounds['minlat'] != undefined) && (getbounds['minlon'] != undefined) && (getbounds['maxlat'] != undefined) && (getbounds['maxlon'] != undefined)) {
                    var minpoint = new GLatLng(getbounds['minlat'], getbounds['minlon']);
                    bounds.extend(minpoint);
                    var maxpoint = new GLatLng(getbounds['maxlat'], getbounds['maxlon']);
                    bounds.extend(maxpoint);

                    map.setZoom(map.getBoundsZoomLevel(bounds));
                    map.setCenter(bounds.getCenter());
                }

                //map.addControl(new GSmallMapControl());
                map.addControl(new GLargeMapControl3D());
                //map.addControl(new GMapTypeControl());
                map.addControl(new GHierarchicalMapTypeControl(true));
                map.addControl(new GScaleControl());
                map.clearOverlays();
                geocoder = new GClientGeocoder();
                featureTable_ = document.getElementById("featuretbody");

                if (document.getElementById("button5").InnerText != "") {
                    count = 1;
                    editShape();
                }
            }
        }



        function logCoordinates(poly) {
            debugger;
            var currentPoly = document.getElementById("activepoly");
            currentPoly.innerHTML = '<b>' + poly.Nametag + '</b>';
            var coordtext = "";
            //alert(outputFileMode);

            if (outputFileMode == 'gpx') {
                var header = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n" +
        "&lt;gpx version=\"1.1\" creator=\"http://gsak.net\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\"&gt;\n" +
        "&lt;name&gt;Region name&lt;/name&gt;&lt;description&gt;Region description&lt;/description&gt;\n" +
        "&lt;rte&gt;\n";

                var footer = "&lt;/rte&gt;\n&lt;/gpx&gt;";
            }

            if (outputFileMode == 'csv') {
                var header = name + "";
                var footer = "";
            }

            if (outputFileMode == 'tsv') {
                var header = name + "";
                var footer = "";
            }


            // print coords header
            coordtext = header;
            // loop to print coords
            var cord;
            for (var i = 0; i < (poly.getVertexCount()); i++) {
                var vert = poly.getVertex(i);
                var lat = vert.lat();
                lat = lat.toFixed(6);
                var longi = vert.lng();
                longi = longi.toFixed(6);


//                PageMethods.CheckLatLong(lat, longi, OnSuccess);
//                function OnSuccess(maparr) {
//                }


                if (outputFileMode == 'gpx') {
                    coordtext += "&lt;rtept lat=\"" + lat + "\" lon=\"" + longi + "\"&gt;" + "&lt;/rtept&gt;\n";
                }
                if (outputFileMode == 'csv') {
                    coordtext += lat + "," + longi + ":";
                    cord += lat + "," + longi + ':';
                }
                if (outputFileMode == 'tsv') {
                    coordtext += lat + "\t" + longi + ":";
                    cord += lat + "," + longi + ':';
                }
            }

            coordtext += footer;
            document.getElementById("ndnvalue").value = coordtext;
            var ourtag = document.getElementById("coords");

            if (ourtag.tagName == "PRE" && "outerHTML" in ourtag) {
                ourtag.outerHTML = '<pre id="coords">' + coordtext + '</pre>';

            } else {
                ourtag.innerHTML = coordtext;
            }

        }

推荐答案



取得新的多边形点,并检查这些点是否存在于旧的多边形区域之内或之外.

比较逻辑:

将旧多边形作为多条线,并比较该线左侧或右侧的一个点(新多边形的边).
Hi,

Take new polygon points and check with whether the points are exists inside or outside of the old ploygons area.

Comparing Logic:

Take the old polygon as multiple lines and compare the a point(new polygon''s edges) left side or right side of the line.


这篇关于如何在数据库中比较纬度和经度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆