图聚类 - 地图建模

图论的基础是三元组,点集,边集,权重函数。然而在实际的地图中,我们只知道地图(row,col)的值,可能表示海拔,也可能表示坡度,形式上就是一个二元矩阵。

形如此图:
在这里插入图片描述
表示的矩阵:
在这里插入图片描述

在这个矩阵中,255表示普通节点(不是障碍物),0表示障碍物。

转换为邻接矩阵,并画出点线图(代码):

import cv2
import numpy as np
# from MCL import markovCluster
import matplotlib.pyplot as py

obstacle = 0

unObstacle = 255


# 读取地图数据
def read_map_from_pic(file_path):
    pic = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
    return pic


# 判断两个节点是否有相连的边
def is_neighbour(position1, position2):
    # 检查两点元素是否是障碍物
    if map[position1.row][position1.col] == obstacle or map[position2.row][position2.col] == obstacle:
        return False
    if abs(position1.row-position2.row) < 2 and abs(position1.col - position2.col) < 2:
        return True
    else:
        return False


def getNodeSetByMap(map):
    nodeSet = []
    for row in range(map.shape[0]):
        for col in range(map.shape[1]):
            if map[row][col] == unObstacle:
                nodeSet.append(Node(Position(row, col)))
    return nodeSet



def getAdjacencyMatrix(nodeSet):
    edgeList = []
    adjacencyMatrix = np.zeros((len(nodeSet), len(nodeSet)))
    for row in range(len(nodeSet)):
        for col in range(len(nodeSet)):
            adjacencyMatrix[row][col] = 1 if is_neighbour(nodeSet[row].position, nodeSet[col].position) else 0
            if adjacencyMatrix[row][col] == 1:
                xList = [nodeSet[row].position.row, nodeSet[col].position.row]
                yList = [nodeSet[row].position.col, nodeSet[col].position.col]
                edgeList.append([xList, yList])
    return adjacencyMatrix, edgeList


def paintGraph(map, edgeList):
    rowList = []
    colList = []
    for row in range(map.shape[0]):
        for col in range(map.shape[1]):
            if map[row][col] == unObstacle:
               rowList.append(row)
               colList.append(col)
    py.scatter(rowList, colList, color='silver')
    for i in range(len(edgeList)):
        py.plot(edgeList[i][0], edgeList[i][1], color='cornflowerblue', linewidth=1, alpha=0.08)

    py.show()

# 三元组存储稀疏矩阵(领接矩阵)
class Triple:

    def __init__(self, position, value) -> None:
        super().__init__()
        self.position = position
        self.value = value


class Position:

    def __init__(self, row, col) -> None:
        super().__init__()
        self.row = row
        self.col = col


class Node:

    def __init__(self, position) -> None:
        super().__init__()
        self.position = position

# MCL聚类


if __name__ == "__main__":
    file_path = r"E:\python_code\pytorch_learn\data\tsp\pse_cvt1.png"
    map = read_map_from_pic(file_path)
    position1 = Position(4, 1)
    position2 = Position(3, 0)
    print(is_neighbour(position1, position2))
    # 图论点集
    nodeSet = getNodeSetByMap(map)
    # 构造邻接矩阵
    adjacencyMat, edgeList = getAdjacencyMatrix(nodeSet)
    print(adjacencyMat.shape)
    # 画图
    paintGraph(map, edgeList)
    #dimension = 4
    #numIter = 10
    #inflateMat = markovCluster(adjacencyMat, dimension, numIter)
    #print(inflateMat)


输出:
在这里插入图片描述

谱聚类

sci_learn

马尔可夫链

ArcGIS地理数据库建模设计及实现,ArcGIS Diagrammer和Case Tool的比较Marine Mammal Densities, Filtered by Season 地理数据库设计概述 esrI China 地理数据库设计概述 Three methods to create a Geodatabase Design your geodatabase What data? Lacation and projection? Geometric networks? 从现有设计中创建地理数据库 Create schema with Import existing data Use CAsE tools ArcCatalog Shapely 从头开始创建地理数据库 MS positon Coverages 数据库中将存储什么类型的数据? Build geometric >数据存储采用什么投影? networks 是否需要建立数据的修改规则? Define subtypes and >如何组织对象类,如表,要素类,和要素 attribute domains Arccatalog 类的子类。 是否需要维护不同类型对象间的关系? 数据库中是否包含几何网络? Load data into schema 数据库中是否包含拓扑相关要素? Define connectivity rules 数据库中是否存储自定义对象? chapelles Geodatabase Define relationships Geodatabase ∽:會忡 schema ⑤ esri china Marine Mammal Densities, Filtered by Season 地理数据库设计步骤 esrI China 地理数据库设计 数据分析 业务分析 地理数据库设计 esrI China 数据分析 ●地理数据库设计是指将地理信息编排为可根据地理位置进行整合的 系列数据专题(即层)。因此要进行地理数据库设计,需要先确定 要使用的数据专题,然后再指定各专题层的内容和表现形式。 如何将你的数据分门别类 矢量数据-SHP、CAD、MIF、KML、根据业务新建等 影像数据-底、矢量化 属性数据 大多情况 ●格式转换以及扩展(CAD) 根据需求分析设计 esrI China 空间数据模型设计步骤 ●要素类设计 >逻辑分类 形式上:土地权属、土地利用、自然资源、水利建设. 要素类划分 实质上:宗地、行政区、水系、阀门、电杆. 需要考虑: Domain和细化子类 要素类字段设计 对象描述 业务需求 esrI China 业务分析 ●是否属于典型行业 水利、交通、管网、石油等 是否需要数据质量检查业务 是否需要数据关联业务 是否数据表的某个字段必须有相关的值域限制 是否需要多用户编辑业务 是否需要3D分析业务 是否需要记录历史业务 是否需要上下级数据库同步业务 esrI China 空间数据模型设计步骤 ●要素间关系确定 空间要素间关系 ■质量检查规则(宗地与界址线、界址点的边界相互重合、水井和地下 水源地等 连通性规则(河道轴线应具备连通性 ■复杂关系类(宗地与房屋的依存关系 空间要素与非空间要素间关系 空间要素挂接属性表(房屋与房屋所属人的关系) ●●●。 esrI China
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值