【问题标题】:Verify if a point is Land or Water in Google Maps在 Google 地图中验证一个点是陆地还是水域
【发布时间】:2012-03-27 12:25:13
【问题描述】:

..然后谷歌地图“将水域与水域分开”

嗯,不是圣经意义上的,而是..

我想知道我有哪些选项来验证 [Lat, Lon] 的点是陆地还是水。

谷歌地图显然有这些数据(水体是蓝色的)——但是 API 中有什么东西可以用来做这些吗?如果不是 - 他们不服务它是因为他们从未想过吗?还是因为太复杂?

我没有找到任何关于此事的信息——除了这里的一些类似问题(比如寻找地形类型或海拔——但这并不是我所需要的)。

有单独的层吗?一个选项?命令?还是我应该手动去做?

我能想到的唯一方法(如果我需要手动执行此操作)是检查每个提供的图块的确切点 - 然后检查该 Google 地图色调的 RGB 值。 这只是理论上的 - 因为在实践中 - 我不知道如何实现这一点,第一个障碍是我不知道如何将图块上的像素位置转换为 [LatLon] 点,例如

现成的解决方案会容易得多。

请注意,我不需要世界上所有的水(例如 - 我不关心溪流、小池塘、大多数河流或你邻居的游泳池。我需要一个人可以在没有帮助的情况下冒险的点浮动车辆)

编辑我

读完cmets: 海拔方法不可靠,海平面以下的地方太多(您可以在此处查看“最深”10的列表http://geology.com/below-sea-level/),并且海平面以上的内陆水体(湖泊)太多。 反向地理定位方法不可靠,因为它会多次返回地缘政治实体,如城市或州 - 或零。 在提出问题之前,我已经研究过那些伪解决方案 - 但他们都没有真正回答这个问题 - 这些方法充其量只是不好的“猜测”。

【问题讨论】:

  • 您也许可以使用海拔库。虽然它并不总是成立,但我想大多数时候海平面区域的水。有一些相当明显的极端情况(死亡谷 CA、荷兰、山区湖泊等),但它可能适用于粗略的近似。
  • 谢谢,我已经想到了——但就像你指出的那样——地球上海平面以下的点太多了——排除所有点不是一个可行的解决方案..
  • @michael - 更不用说你提到的所有内陆水域......(湖泊等......)
  • 也许更适合 GIS.SE?您可以在赏金结束时迁移。
  • 您已经收到答复,对此我无话可说。但是,如果要查找水数据或 GIS 信息,那么在我们的单独域 http://gis.stackexchange.com/ 上进行单独的讨论g在这里,您会找到许多您可能需要的东西,包括水数据.. 这将对您有所帮助..(如果需要..)Old Post我希望这会有所帮助..

标签: javascript google-maps google-maps-api-3


【解决方案1】:

这是两种不同的方法,你可以试试:

  • 您可以使用 Google Maps Reverse Geocoding 。在结果集中,您可以通过检查types 来确定它是否是水。在水域情况下,类型为natural_feature。在此链接查看更多信息http://code.google.com/apis/maps/documentation/geocoding/#Types

    您还需要检查要素名称,如果它们包含Sea, Lake, Ocean 和其他一些与水域相关的字词,以提高准确性。例如沙漠也是natural_features。

    优点 - 所有检测过程都将在客户的机器上完成。无需创建自己的服务器端服务。

    缺点 - 非常不准确,您在水域得到“无”的机会非常高。

  • 您可以使用Google Static Maps 按像素检测水域/陆地。但为此,您需要创建 http 服务。

    这些是您的服务必须执行的步骤:

    1. 从客户端接收latitude,longitudecurrent zoom
    2. 向 Google 静态地图服务发送 http://maps.googleapis.com/maps/api/staticmap?center={latitude,longitude}&zoom={current zoom`}&size=1x1&maptype=roadmap&sensor=false 请求。
    3. 检测 1x1 静态图像的像素颜色。
    4. 回复有关检测的信息。

    您无法在客户端检测像素的颜色。是的,您可以在客户端机器上加载静态图像并在canvas 元素上绘制图像。但是你不能使用画布上下文的getImageData 来获取像素的颜色。这受到跨域策略的限制。

    Prons - 高度准确的检测

    缺点 - 使用自己的服务器资源进行检测

【讨论】:

  • 谢谢-我已经检查过了-我不知道类型正在变成Sea Lake Ocean之类的,就像您在编辑中指出的那样- natural_feature 也将是一座山,一座岛屿,和沙漠..你能指出一个文件吗?还有——你怎么能对没有地址的地方进行反向地理编码?那么作为地缘政治实体一部分的湖泊呢?就像城市或自治市范围内的湖泊(例如genevre)或只是城市港口内的一个点。在我的试验中,我没有这样做..
  • 对于世界上大部分水域,反向地理编码将返回“零结果”,请查看地理编码工具:gmaps-samples-v3.googlecode.com/svn/trunk/geocoder/… 并单击海洋内的某处。
  • @Tomas - 并不是说​​我想对“堆垛机”同伴不尊重或不尊重 - 但也许它没有被投票,因为它不是有效/准确的方法?
  • 以提议的方式使用静态地图可能会被认为违反了Terms (10.1.1(h))。
  • 至于静态地图方法,您可以使用样式developers.google.com/maps/documentation/static-maps/…,但也可以使用 Saurav 链接的文章。
【解决方案2】:

目前的任何 Google 服务似乎都不可能。

但还有其他服务,例如 Koordinates Vector JSON Query service!您只需查询 URL 中的数据,您会返回 JSON/XML 响应

请求示例:http://api.koordinates.com/api/vectorQuery.json?key=YOUR_GEODATA_KEY&layer=1298&x=-159.9609375&y=13.239945499286312&max_results=3&radius=10000&geometry=true&with_field_names=true

您必须注册并提供您的密钥和选定的层号。你可以搜索他们所有的repository of available layers。大多数层只是区域性的,但你也可以找到全球性的,比如World Coastline

当您选择一个层时,您单击“服务”选项卡,您将获得示例请求 URL。我相信你只需要注册就可以了!

现在是最好的:

You can upload your layer!

它不能立即使用,嘿必须以某种方式处理它,但它应该可以工作!图层存储库实际上看起来像是人们根据需要上传的。

【讨论】:

  • 这看起来几乎完美,但是我没有看到任何不是大洋洲的本地地图。有美国图层吗?
  • @HaloWebMaster 我提到的层是全局的。您还可以按区域搜索图层。
  • @HaloWebMaster 我刚刚注意到您可以上传自己的图层!查看我的更新。
  • 嘿,托马斯,我不知道你是否真的得到了赏金(因为我已经离线一周了),但这太棒了!感谢您的帮助,我无法让我的应用程序正常工作。谢谢! (如果你没有得到赏金,我会奖励它,请私信我)
  • 嘿,你为我节省了一周的自定义编码!值得!
【解决方案3】:

有一个名为onwater.io 的免费网络API 可以完全解决这个问题。它不是 Google 地图中内置的东西,但给定纬度和经度,它会通过 get 请求准确地返回 true 或 false。

关于水的例子: https://api.onwater.io/api/v1/results/23.92323,-66.3

{
  lat: 23.92323,
  lon: -66.3,
  water: true
}

陆地示例: https://api.onwater.io/api/v1/results/42.35,-71.1

{
  lat: 42.35,
  lon: -71.1,
  water: false
}

完全披露我在 Dockwa.com 工作,这家公司是 onwater 背后的公司。我们在水上建造自己来解决这个问题并帮助社区。它是免费使用的(大容量付费),我们想分享:)

【讨论】:

  • 它不再是免费的(对于更大的容量),但如果它完成了这项工作,它仍然非常实惠!
  • 文档页面出现错误。我想检查是否有任何覆盖范围的特定数据?我的意思是你覆盖哪些国家?
  • onwater.io 是否适用于湖泊和河流?如果是这样,我会得到类型的指示吗?
  • 大声笑根本与代码无关,但我想将我的全部道具扩展到你们构建这个。这就是这样(双关语)我完全无法想象将其变成 $/call 的想法是如何出现的。编辑:我认为dockwa.com 与容器有关。这些家伙实际上是在做船生意。哈哈
【解决方案4】:

我认为在本地进行此查询更有趣,因此我可以更加自力更生:假设我想一次生成 25000 个随机土地坐标,我宁愿避免调用可能成本高昂的外部 API。这是我在 python 中的镜头,使用 TomSchober 提到的python example。基本上,它会在包含所有陆地坐标的pre-made 350MB file 上查找坐标,如果坐标存在,它会打印出来。

import ogr
from IPython import embed
import sys

drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
ds_in = drv.Open("land_polygons.shp")    #Get the contents of the shape file
lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer

#Put the title of the field you are interested in here
idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")

#If the latitude/longitude we're going to use is not in the projection
#of the shapefile, then we will get erroneous results.
#The following assumes that the latitude longitude is in WGS84
#This is identified by the number "4236", as in "EPSG:4326"
#We will create a transformation between this and the shapefile's
#project, whatever it may be
geo_ref = lyr_in.GetSpatialRef()
point_ref=ogr.osr.SpatialReference()
point_ref.ImportFromEPSG(4326)
ctran=ogr.osr.CoordinateTransformation(point_ref,geo_ref)

def check(lon, lat):
    #Transform incoming longitude/latitude to the shapefile's projection
    [lon,lat,z]=ctran.TransformPoint(lon,lat)

    #Create a point
    pt = ogr.Geometry(ogr.wkbPoint)
    pt.SetPoint_2D(0, lon, lat)

    #Set up a spatial filter such that the only features we see when we
    #loop through "lyr_in" are those which overlap the point defined above
    lyr_in.SetSpatialFilter(pt)

    #Loop through the overlapped features and display the field of interest
    for feat_in in lyr_in:
        # success!
        print lon, lat

check(-95,47)

我尝试了十几个坐标,效果很好。 “land_polygons.shp”文件可以下载here,这是 OpenStreetMaps 的补充。 (我自己使用了第一个 WGS84 下载链接,也许第二个也可以)

【讨论】:

  • 湖泊呢?它将湖泊上的点视为海洋还是陆地?
  • 好问题!我在页面上查看了 linked in my answer 的 OpenStreetMaps 数据,它说 lands 文件的值基于标签 natural=coastline。快速谷歌搜索使用this page,其中明确指出海岸线标签实际上不适用于其命名法中的湖泊。所以我会说,我的方法确实将湖泊识别为水,因为我使用的数据集没有。但是你自己试试吧!
【解决方案5】:

这是我使用的,它工作得还不错……如果你有更多的 cpu 可以通过添加像素来浪费,你可以改进测试。

function isItWatter($lat,$lng) {

    $GMAPStaticUrl = "https://maps.googleapis.com/maps/api/staticmap?center=".$lat.",".$lng."&size=40x40&maptype=roadmap&sensor=false&zoom=12&key=YOURAPIKEY";  
    //echo $GMAPStaticUrl;
    $chuid = curl_init();
    curl_setopt($chuid, CURLOPT_URL, $GMAPStaticUrl);   
    curl_setopt($chuid, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($chuid, CURLOPT_SSL_VERIFYPEER, FALSE);
    $data = trim(curl_exec($chuid));
    curl_close($chuid);
    $image = imagecreatefromstring($data);

    // this is for debug to print the image
    ob_start();
    imagepng($image);
    $contents =  ob_get_contents();
    ob_end_clean();
    echo "<img src='data:image/png;base64,".base64_encode($contents)."' />";

    // here is the test : I only test 3 pixels ( enough to avoid rivers ... )
    $hexaColor = imagecolorat($image,0,0);
    $color_tran = imagecolorsforindex($image, $hexaColor);

    $hexaColor2 = imagecolorat($image,0,1);
    $color_tran2 = imagecolorsforindex($image, $hexaColor2);

    $hexaColor3 = imagecolorat($image,0,2);
    $color_tran3 = imagecolorsforindex($image, $hexaColor3);

    $red = $color_tran['red'] + $color_tran2['red'] + $color_tran3['red'];
    $green = $color_tran['green'] + $color_tran2['green'] + $color_tran3['green'];
    $blue = $color_tran['blue'] + $color_tran2['blue'] + $color_tran3['blue'];

    imagedestroy($image);
    var_dump($red,$green,$blue);
    //int(492) int(570) int(660) 
    if($red == 492 && $green == 570 && $blue == 660)
        return 1;
    else
        return 0;
}

【讨论】:

  • 代码不能在新版本上工作。新版本应该是这样 if($red == 537 && $green == 627 && $blue == 765)
【解决方案6】:

查看此article。它无需服务器即可准确检测水面上是否有东西。这是一种依赖于 Google 地图中的自定义样式功能的 hack。

【讨论】:

    【解决方案7】:

    除了反向地理编码——正如Dr Molle 指出的那样,它可能会返回 ZERO_RESULTS——你可以使用高程服务。如果通过反向地理编码获得零结果,请获取该位置的高程。通常,当海床低于海平面时,海为负数。海拔服务有一个完整的example

    请记住,由于 Google 不会提供此信息,因此任何其他方法都只是一种猜测,而猜测本质上是不准确的。但是使用反向地理编码返回的type,或者如果type 不可用,则使用海拔高度,将涵盖大多数可能性。

    【讨论】:

    • 感谢您的回答和示例链接(顺便说一句 - 它不适用于我的 Opera) - 但我不能真正忽略所有陆地和负面区域,我的实验表明 TYPE不可靠 - 并且多次返回附近的地缘政治实体。必须有一些更精确的方法——“猜测”在这里似乎不是正确的方法。如果 TYPE 是可靠的 - 这将是最好的解决方案 - 但它不是......而且你忽略了所有高于海平面的内陆水体......
    【解决方案8】:

    这种方法完全不可靠。 事实上,返回的数据将完全取决于您正在使用的世界的哪个部分。 例如,我在法国工作。 如果我点击法国海岸的大海,Google 将返回它可以“猜测”到的最近的 LAND 位置。 当我就同一问题向 Google 索取信息时,他们回答说他们无法准确地返回所要求的水团上的点。

    我知道,这不是一个非常令人满意的答案。 这非常令人沮丧,特别是对于我们这些为用户提供点击地图来定义标记位置的能力的人来说。

    【讨论】:

    • 我同意 - @user1113426 和 @Andrew Leach 建议的方法并不是真正的方法。最好告诉用户“不要点击蓝色区域”:-) 但说真的 - 我很惊讶谷歌不想发布这样的功能 - 即使是近似的 - 它比“近似”更好现在存在 - 就像你的指针一样 - 有时会“捕捉”到数百米外的位置。甚至我建议的方法也更准确(可惜我不知道如何做到这一点。)
    【解决方案9】:

    如果所有其他方法都失败了,您可以随时尝试检查该点的海拔高度和大约一段距离 - 除了水之外,没有多少东西往往是完全平坦的。

    【讨论】:

    • 谢谢,这是个好主意,但在每个瀑布或河流峡谷上都会失败...
    【解决方案10】:

    不幸的是,这个答案不在 Google Maps API 中,并且引用的资源不是免费的,但是 DynamicGeometry 提供了一个 Web 服务,它公开了一个操作 GetWaterOrLand,它接受一个纬度/经度对 (you can see a demo here)。

    我对如何实现这一点的理解是使用水体形状文件。这些形状文件究竟是如何与 Google Maps API 一起使用的,但您或许可以从链接的演示中获得一些见解。

    希望在某种程度上有所帮助。

    【讨论】:

      【解决方案11】:

      下面是另一个纯 JavaScript 示例:http://jsfiddle.net/eUwMf/

      如您所见,ideia与rebe100x基本相同,从谷歌静态地图API获取图片,读取第一个像素:

      $("#xGps, #yGps").change(function() {
          var img = document.getElementById('mapImg');
      
          // Bypass the security issue : drawing a canvas from an external URL.
          img.crossOrigin='anonymous';
      
          var xGps = $("#xGps").val();
          var yGps = $("#yGps").val();
      
          var mapUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + xGps + "," + yGps +
              "&zoom=14&size=20x20&maptype=roadmap&sensor=false";
      
          // mapUrl += "&key=" + key;
      
          $(img).attr("src", mapUrl);
      
          var canvas = $('<canvas/>')[0];
          canvas.width = img.width;
          canvas.height = img.height;
          canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
      
          var pixelData = canvas.getContext('2d').getImageData(1, 1, 1, 1).data;
      
          if (pixelData[0] == 164 &&
              pixelData[1] == 190 &&
              pixelData[2] == 220) {
              $("#result").html("Water");
          } else {
              $("#result").html("Not water");
          }
      });
      

      【讨论】:

        【解决方案12】:

        See the answer I gave to a similar question - 它使用来自 Earth Api 的“HIT_TEST_TERRAIN”来实现该功能。

        有一个我在这里提出的想法的工作示例:http://www.msa.mmu.ac.uk/~fraser/ge/coord/

        【讨论】:

          【解决方案13】:

          我建议您在这里滚动。您可以使用GDAL 之类的工具来查询 shapefile 中某个点下的内容。您可以从包括 US Census Bureau 在内的许多来源获取美国地理的 shapefile。

          这可以通过 GDAL 二进制文件、源 C 或通过 Java、Python 等中的 swig 来完成。

          Census Maps

          GDAL Information

          Point Query Example in Python

          【讨论】:

            【解决方案14】:

            如果 List&lt;Address&gt; 地址返回 0 ,您可以假定此位置为海洋或自然资源。只需在 Google Places API 响应的响应方法中添加以下代码即可。

            如上所述初始化下面的列表

            List&lt;Address&gt; addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);

            if (addresses.size()==0) { Toast.MakeText(getApplicationContext,"Ocean or Natural Resources selected",Toast.LENGTH_SHORT).show(); }else{ }

            【讨论】:

              【解决方案15】:

              这是一个简单的解决方案

              由于 Google 无法提供有关位于海洋或内陆水域的坐标的可靠结果,因此您需要使用其他备份服务(例如 Yandex)来帮助在缺少关键信息时提供这些信息。您很可能不想使用 Yandex 作为您的主要地理编码器,因为 Google 在世界数据的可靠性和完整性方面要优越得多,但是 Yandex 在检索与水体坐标相关的数据时非常有用,所以两者都用。


              Yandex 文档:https://api.yandex.com.tr/maps/doc/geocoder/desc/concepts/input_params.xml


              获取海洋名称的步骤:

              1.) 首先使用 Google 对坐标进行反向地理编码。

              2.) 如果 Google 返回零结果,则坐标位于海洋上的可能性为 99%。现在向 Yandex 发出具有相同坐标的辅助反向地理编码请求。 Yandex 将返回一个带有精确坐标的 JSON 响应,在此响应中将有两个“键”:“值”对的重要性

              ["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]
              
              and
              
              ["GeoObject"]["name"]
              

              检查 kind 键,如果它 == "hydro",则您知道您在一片水域上方,并且由于 Google 返回的结果为零,因此该水域有 99.99% 的可能性是海洋。海洋的名称将是上面的“名称”键。

              这是我如何使用 Ruby 编写的这种策略的示例

              if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
                   ocean = result.data["GeoObject"]["name"] 
              end
              

              检索内陆水域名称的步骤:

              对于这个例子,假设我们的坐标位于某处的湖中:

              1.) 首先使用 Google 对坐标进行反向地理编码。

              2.) Google 最有可能返回的结果是附近陆地上显眼的默认地址。在此结果中,它提供了它返回的地址的坐标,该坐标与您提供的坐标不匹配。测量您提供的坐标与结果返回的坐标之间的距离,如果有显着差异(例如 100 码),则使用 Yandex 执行辅助备份请求并检查“种类”键的值,如果它是“水电”,那么您就知道坐标位于水上。因为谷歌返回的结果与上面的示例相反,所以有 99.99% 的可能这是一个内陆水域,所以现在你可以得到这个名字。如果“kind”不 == “hydro”,则使用 Google 地理编码对象。

              ["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"]
              
              and
              
              ["GeoObject"]["name"]
              

              这是用 Ruby 编写的用于获取 inland_body_of_water 的相同代码

              if result.data["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["kind"] == "hydro"
                   inland_body_of_water = result.data["GeoObject"]["name"] 
              end
              

              关于许可的说明:据我所知,Google 不允许您使用他们的数据显示在 Google 提供的地图之外的任何其他地图上。然而,Yandex 的许可非常灵活,您可以使用他们的数据在 Google 地图上显示。

              此外,Yandex 具有 50,000 次免费请求/天的高速率限制,并且不需要 API 密钥。

              【讨论】:

                【解决方案16】:

                通过使用 Google Elevation API,我设法接近了。这是结果的图像:

                您会看到六边形几乎停留在陆地上,即使定义了一个部分在水面上的矩形周长。在这种情况下,我从谷歌地图本身进行了快速检查,陆地上的最低海拔约为 8-9m,所以这是我的门槛。代码大部分是从 Google 文档和 Stack Overflow 复制/粘贴的,这里是完整的要点:

                https://gist.github.com/dvas0004/fd541a0502528ebfb825

                【讨论】:

                【解决方案17】:

                作为一个 Python 新手,我无法让 SylvainB 的解决方案与检查坐标是否在陆地上的 Python 脚本一起工作。然而,我设法通过下载 OSGeo4W (https://trac.osgeo.org/osgeo4w/) 解决了这个问题,然后安装了我需要的所有 pip、Ipython,并检查了所有指定的导入是否都在那里。我将以下代码保存为 .py 文件。

                检查坐标是否在陆地上的代码

                ###make sure you check these are there and working separately before using the .py file 
                
                import ogr
                from IPython import embed
                from osgeo import osr
                import osgeo
                
                import random
                #####generate a 1000 random coordinates
                ran1= [random.uniform(-180,180) for x in range(1,1001)]
                ran2= [random.uniform(-180,180) for x in range(1,1001)]
                
                
                drv = ogr.GetDriverByName('ESRI Shapefile') #We will load a shape file
                ds_in = drv.Open("D:\Downloads\land-polygons-complete-4326\land-polygons-complete-4326\land_polygons.shp")    #Get the contents of the shape file
                lyr_in = ds_in.GetLayer(0)    #Get the shape file's first layer
                
                #Put the title of the field you are interested in here
                idx_reg = lyr_in.GetLayerDefn().GetFieldIndex("P_Loc_Nm")
                
                #If the latitude/longitude we're going to use is not in the projection
                #of the shapefile, then we will get erroneous results.
                #The following assumes that the latitude longitude is in WGS84
                #This is identified by the number "4236", as in "EPSG:4326"
                #We will create a transformation between this and the shapefile's
                #project, whatever it may be
                geo_ref = lyr_in.GetSpatialRef()
                point_ref=osgeo.osr.SpatialReference()
                point_ref.ImportFromEPSG(4326)
                ctran=osgeo.osr.CoordinateTransformation(point_ref,geo_ref)
                ###check if the random coordinates are on land
                def check(runs):
                    lon=ran1[runs]
                    lat=ran2[runs]
                    #Transform incoming longitude/latitude to the shapefile's projection
                    [lon,lat,z]=ctran.TransformPoint(lon,lat)
                    #Create a point
                    pt = ogr.Geometry(ogr.wkbPoint)
                    pt.SetPoint_2D(0, lon, lat)
                    #Set up a spatial filter such that the only features we see when we
                    #loop through "lyr_in" are those which overlap the point defined above
                    lyr_in.SetSpatialFilter(pt)
                    #Loop through the overlapped features and display the field of interest
                    for feat_in in lyr_in:
                        return(lon, lat)
                
                ###give it a try
                result = [check(x) for x in range(1,11)] ###checks first 10 coordinates
                

                我试图让它在 R 中工作,但我做了一场噩梦,试图让你需要安装的所有包都被困在 python 上。

                【讨论】:

                  【解决方案18】:

                  我在这里有不同的解决方案。 在当前的谷歌地图实现中,它不计算从水域到陆地位置的方向/距离,反之亦然。为什么我们不使用这个逻辑来确定该点是陆地还是水。

                  举个例子吧

                  如果我们要判断一个点x是陆地还是水,那么

                  让我们检查点 x 和已知点 y 之间的方向,即陆地。如果它确定方向/距离,则点x 是陆地,否则它是水。

                  【讨论】:

                  • 您是否真的尝试过,或者您只是假设“用水烹饪”?
                  • 你认为如何处理桥梁?还是隧道?
                  猜你喜欢
                  • 1970-01-01
                  • 2018-04-03
                  • 2018-06-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多